Windows 窗体组合框 - 数据绑定到多个属性
本文关键字:属性 数据绑定 窗体 组合 Windows | 更新日期: 2023-09-27 17:56:55
我在数据绑定到组合框的 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;
我可以绑定到文本或选定值,一切都运行良好。 当我尝试绑定两者时,麻烦就来了。 只有第一个数据绑定有效(在上面的例子中,文本到LoanPurposeString)。 如果我切换数据绑定的顺序...
ddLoanPurpose.DataBindings.Add("SelectedValue", _scenario, "LoanPurpose", false);
ddLoanPurpose.DataBindings.Add("Text", _scenario, "LoanPurposeString", false);
。然后我失去了文本与LoanPurposeString的绑定,但现在SelectedValue绑定到LoanPurpose。所以我的问题是双重的:为什么两个绑定都连接到我的_scenario对象,为什么顺序很重要?
似乎不支持对两个不同属性的数据绑定(至少不是基于我的研究)。 在此特定实例中,最佳解决方案是将我的_scenario对象(LoanPurpose 和 LoanPurposeString)中的单独属性组合到单个 KeyValuePair 属性中。
public KeyValuePair<string, string> LoanPurpose { get; set; }
我只需要确保数据源中的 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;