【问题标题】:ComboBox SelectedItem property won't changeComboBox SelectedItem 属性不会改变
【发布时间】:2015-08-24 12:21:04
【问题描述】:

您好,我的组合框有问题。
一开始documentTypeComboBox.SelectedItem 值为空,然后GetDataRow() 方法返回不为空的DataRow(100% 确定它为我的测试返回非空值)
毕竟 SelectedItem 属性的值仍然为空。不知道出了什么问题。我 100% 确定返回的 DataRow 被分配为组合框 DataSource 行

    public void SetDefaultData()
    {
        documentTypeComboBox.SelectedItem = null;

        dataWystawieniaDate.Value = _Faktura.DataWystawienia;
        dataSprzedazyDate.Value = _Faktura.DataSprzedazy;

        warehouseComboBox.SelectedItem = Helpers.GetDataRow(_Dictionary.Magazines, _Faktura.Magnum);
        paymentMethodComboBox.SelectedItem = Helpers.GetDataRow(_Dictionary.SpPaymentMethodsData, _Faktura.IdSposobuPlatnosci);
        priceComboBox.SelectedItem = Helpers.GetDataRow(_Dictionary.PricesData, _Faktura.RodzajCeny);
        discountComboBox.SelectedItem = Helpers.GetDataRow(_Dictionary.RabatyData, _Faktura.RodzajRabatu);
        documentTypeComboBox.SelectedItem = Helpers.GetDataRow(_Dictionary.SpDocumentsCodes, _Faktura.Kod, documentTypeComboBox.DisplayMember);

        documentNumberTextBox.Text = _Faktura.Numer;
        kwotaBruttoTextBox.Text = _Faktura.PlnWartoscBrutto.ToString();
    }


    public static DataRow GetDataRow(DataTable dt, string value, string fieldName)
    {
        foreach (DataRow dr in dt.Rows)
        {
            if (dr[fieldName].ToString() == value)
                return dr;
        }
        return null;
    }

【问题讨论】:

  • 你在哪里设置数据源?
  • private void LoadData() { documentTypeComboBox.DataSource = _Dictionary.SpDocumentsCodes; documentTypeComboBox.ValueMember = "ID"; documentTypeComboBox.DisplayMember = "KOD"; }
  • 您是否尝试在组合中设置 DataRow 对象?这是 WPF 吗?
  • No DataSource is DataTable 从 SQL 中选择

标签: c# combobox


【解决方案1】:

我想我明白了。 SelectedItem 属性是 DataRowView 而不是 DataRow。这解释了为什么它没有选择正确的值。 改用 SelectedValue :)

https://social.msdn.microsoft.com/Forums/windows/en-us/77b23eb9-112f-4fea-9d3a-486b822f22ea/combobox-datatable-selecteditem

【讨论】:

  • 好的,我会检查一下,但是看上面,discountComboBox 使用相同的方法,它正在工作public static DataRow GetDataRow(DataTable dt, int id) { foreach (DataRow dr in dt.Rows) { if (Convert.ToInt32(dr["ID"]) == id) return dr; } return null; }
  • 也许它总是设置组合中的第一个项目...我怀疑它在其他情况下是否有效
  • 它正在工作,谢谢,但为什么它不能只使用 1 个组合,而我有 5 个都以相同的方式工作。
  • 好。很高兴它有效。正如我之前所说,也许总是选择组合框中的第一个项目,你看不到如果你要更改为第一个项目以外的任何其他项目,它就行不通。
猜你喜欢
  • 2011-01-05
  • 2012-01-18
  • 2016-06-15
  • 2014-05-30
  • 1970-01-01
  • 2021-09-26
  • 1970-01-01
  • 2011-06-24
  • 1970-01-01
相关资源
最近更新 更多