【发布时间】:2021-01-16 21:56:16
【问题描述】:
我正在尝试将DataSource 与组合一起使用。目前我有这个:
private void EditMaterialsForm_Load(object sender, EventArgs e)
{
try
{
cbMaterialGroups.DataSource = _docMaterialsDB.MaterialGroup;
cbMaterialGroups.DisplayMember = "Name";
//foreach(CutToolsDatabaseMaterialGroup oMaterialGroup in _docMaterialsDB.MaterialGroup)
//{
// cbMaterialGroups.Items.Add(oMaterialGroup.Name);
//}
}
catch (System.IO.FileNotFoundException /*e*/)
{
// TODO
this.BeginInvoke(new MethodInvoker(this.Close));
}
if (cbMaterialGroups.Items.Count > 0)
cbMaterialGroups.SelectedIndex = 0;
SetControlStates();
}
但它并没有像我预期的那样显示数据:
如果我注释掉我的绑定尝试,然后尝试原来的 foreach 循环,我会得到我期望的结果:
我试过设置:
cbMaterialGroupsValueMember = "Name";
但是它引发了一个异常。
如何让它显示正确的值?我错过了一些东西。
更新
我在课堂上有name 属性:
public class CutToolsDatabaseMaterialGroup
{
[XmlElement]
public string Name;
[XmlElement(ElementName = "Material")]
public List<CutToolsDatabaseMaterial> Materials;
public CutToolsDatabaseMaterialGroup()
{
Name = "";
Materials = new List<CutToolsDatabaseMaterial>();
}
}
还有:
public class CutToolsDatabaseMaterial
{
[XmlElement]
public string Name;
[XmlArray]
[XmlArrayItem(ElementName ="Value")]
public List<string> Text;
public CutToolsDatabaseMaterial()
{
Name = "";
Text = new List<string>();
}
}
更新
我尝试了链接的答案并使用了:
public partial class EditMaterialsForm : Form
{
private MaterialsDatabase.CutToolsDatabase _docMaterialsDB;
private BindingSource bindingMaterialGroups = new BindingSource();
public EditMaterialsForm()
{
InitializeComponent();
}
private void EditMaterialsForm_Load(object sender, EventArgs e)
{
try
{
bindingMaterialGroups.DataSource = _docMaterialsDB.MaterialGroup;
cbMaterialGroups.DataSource = bindingMaterialGroups.DataSource;
cbMaterialGroups.DisplayMember = "Name";
cbMaterialGroups.ValueMember = "Name";
//foreach(CutToolsDatabaseMaterialGroup oMaterialGroup in _docMaterialsDB.MaterialGroup)
//{
// cbMaterialGroups.Items.Add(oMaterialGroup.Name);
//}
}
catch (System.IO.FileNotFoundException /*e*/)
{
// TODO
this.BeginInvoke(new MethodInvoker(this.Close));
}
if (cbMaterialGroups.Items.Count > 0)
cbMaterialGroups.SelectedIndex = 0;
SetControlStates();
}
但我仍然遇到异常:
【问题讨论】:
-
我自己什至没有尝试在 winforms 中进行绑定,但从已接受的重复答案看来,您似乎缺少
BindingSource。 -
简单地谷歌搜索错误信息是值得的。见this。您必须使用 properties 进行绑定,将
Name设为属性。 -
@Sinatr 我看到了。其他cmets说那个答案不对所以我没有尝试。但我刚刚试过,没问题。谢谢。 :)
-
错误的 cmets 不能被否决,您必须始终以一定的批评态度对待他们。人们也经常犯other错误,这使得答案对他们不起作用。
标签: c# winforms data-binding combobox