Windows窗体组合框 - 数据绑定到多个属性

时间:2011-05-18 14:18:29

标签: c# winforms data-binding

我无法将数据绑定到Combobox的SelectedValue和Text属性。以下是相关的代码段:

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,一切都运行得非常好。当我尝试绑定到两者时出现问题。只有第一个数据绑定工作(上例中的文本到LoanPurposeString)。如果我切换数据绑定的顺序......

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

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

1 个答案:

答案 0 :(得分:3)

似乎不支持数据绑定到两个不同的属性(至少不是基于我的研究)。在此特定实例中,最佳解决方案是将_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;