如果有人可以向我建议如何将 Combobox 正确绑定到 Windows 窗体中的数据中继器,我将不胜感激。
我创建了一个带有数据转发器的 Windows 窗体。数据重复器包含一个文本框和一个组合框。我有一个数据集,其中包含一个包含 2 列的数据表,即“Value”和“OverflowBehaviour”。我将文本框绑定到“Value”,将组合框绑定到“OverflowBehaviour”。以下代码显示了创建数据集并将其绑定到文本框和组合框:
private void Form1_Load(object sender, EventArgs e)
{
bindingsource = new BindingSource();
ds = new DataSet("Preferences");
DataTable table = new DataTable("Preference");
table.Columns.Add("Value");
table.Columns.Add("OverflowBehaviour");
for (int i = 1; i <= 8; i++)
{
if (i < 5)
table.Rows.Add(i, ValueTypeAutoIncrementOverflowBehaviour.Exception);
else
table.Rows.Add(i, ValueTypeAutoIncrementOverflowBehaviour.Wrap);
}
ds.Tables.Add(table);
bindingsource.DataSource = ds;
bindingsource.DataMember = "Preference";
textBox1.DataBindings.Add(new Binding("Text", bindingsource, "Value", true, DataSourceUpdateMode.OnValidation));
comboBox1.DataBindings.Add("SelectedItem", bindingsource, "OverflowBehaviour", false, DataSourceUpdateMode.OnValidation);
dataRepeater.DataSource = bindingsource;
}
“OverflowBehaviour”是一个枚举,定义如下:
public enum ValueTypeAutoIncrementOverflowBehaviour
{
Wrap,
Exception,
}
我从这篇文章ComboBox On DataRepeater Control Shares Selected Index中读到,我需要在 ItemCloned 事件中手动映射组合框的数据源,我这样做了:
void dataRepeater_ItemCloned(object sender, Microsoft.VisualBasic.PowerPacks.DataRepeaterItemEventArgs e)
{
var Combo = (ComboBox)e.DataRepeaterItem.Controls.Find("comboBox1", false)[0];
Combo.DataSource = System.Enum.GetValues(typeof(ValueTypeAutoIncrementOverflowBehaviour));
}
我还按照同一篇文章中的建议实施了 DrawItem。代码如下所示。
void dataRepeater_DrawItem(object sender, Microsoft.VisualBasic.PowerPacks.DataRepeaterItemEventArgs e)
{
var DataRepeater = (Microsoft.VisualBasic.PowerPacks.DataRepeater)sender;
var Combo = (ComboBox)e.DataRepeaterItem.Controls.Find("comboBox1", false)[0];
Combo.SelectedItem = ((List<ValueTypeAutoIncrementOverflowBehaviour>)DataRepeater.DataSource)[e.DataRepeaterItem.ItemIndex];
}
但是,当我运行该项目时,它在最后一行显示错误消息而失败。错误消息是将“System.Windows.Forms.BindingSource”类型的对象转换为“System.Collections.Generic.List`1[WindowsFormsApplication1.Form1+ValueTypeAutoIncrementOverflowBehaviour] 类型的错误。我无法访问帖子中显示的 DataRepeater.DataSource 中的任何字段。
任何人都可以建议解决方案吗?请问有没有更好的方法可以在windows形式的数据转发器中绑定组合框?