【问题标题】:Windows Forms combobox - databind to multiple propertiesWindows 窗体组合框 - 数据绑定到多个属性
【发布时间】:2011-05-18 14:18:28
【问题描述】:

我在将数据绑定到 Combobox 的 SelectedValue 和 Text 属性时遇到问题。下面是相关代码sn-p:

DataTable dt1 = DataAccess.GetLoanPurposes();
ddLoanPurpose.DisplayMember = "Name";
ddLoanPurpose.ValueMember = "Value";
ddLoanPurpose.DataBindings.Add("Text", _scenario, "LoanPurposeString", false);
ddLoanPurpose.DataBindings.Add("SelectedValue", _scenario, "LoanPurpose", false);            
ddLoanPurpose.DataSource = dt1;

我可以绑定到 Text SelectedValue 中的任何一个,一切都运行良好。当我尝试绑定到 both 时,麻烦就来了。只有第一个数据绑定有效(上面示例中的 Text to LoanPurposeString)。如果我切换数据绑定的顺序...

ddLoanPurpose.DataBindings.Add("SelectedValue", _scenario, "LoanPurpose", false);
ddLoanPurpose.DataBindings.Add("Text", _scenario, "LoanPurposeString", false);

...然后我失去了 Text 到 LoanPurposeString 的绑定,但现在 SelectedValue 绑定到了 LoanPurpose。所以我的问题是双重的:为什么两个绑定都不连接到我的 _scenario 对象,为什么顺序很重要?

【问题讨论】:

  • 你想通过绑定“文本”属性来实现什么?你不需要它。 ddLoanPurpose.DataBindings.Add("Text", _scenario, "LoanPurposeString", false);

标签: c# winforms data-binding


【解决方案1】:

似乎不支持对两个不同属性的数据绑定(至少不是基于我的研究)。在这个特定的实例中,最好的解决方案是将我的 _scenario 对象(LoanPurpose 和 LoanPurposeString)中的单独属性组合成一个 KeyValuePair 属性。

public KeyValuePair<string, string> LoanPurpose { get; set; }

我只需要确保 DataSource 中的 ValueMember 变量是 KeyValuePair。所以像......

DataTable dt = new DataTable();
dt.Columns.Add(new DataColumn("Name", typeof(string)));
dt.Columns.Add(new DataColumn("Value", typeof(KeyValuePair<string, string>)));
DataRow dRow = dt.NewRow();
dRow["Name"] = "Eric";
dRow["Value"] = new KeyValuePair<string, string>("1", "Eric");
dt.Rows.Add(dRow);

绑定语法将与我原来的问题中的相同,唯一的区别是 ValueMember 现在是 KeyValuePair 对象而不是字符串。

ddLoanPurpose.DisplayMember = "Name";
ddLoanPurpose.ValueMember = "Value";
ddLoanPurpose.DataSource = dt;

【讨论】:

    猜你喜欢
    • 2017-02-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多