ComboBox DataSource 没有按我预期的那样工作[重复]
Posted
技术标签:
【中文标题】ComboBox DataSource 没有按我预期的那样工作[重复]【英文标题】:ComboBox DataSource is not working as I expect [duplicate] 【发布时间】: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错误,这使得答案对他们不起作用。
【参考方案1】:
确保您的班级或数据源中有Name
属性。
【讨论】:
分享你的 _docMaterialsDB.MaterialGroup 让我看看 我接受这个答案。我把它作为一个公共领域而不是公共财产。以上是关于ComboBox DataSource 没有按我预期的那样工作[重复]的主要内容,如果未能解决你的问题,请参考以下文章
当 DataSource 值更改时,WinForms ComboBox 中的项目不会更新
DataSource 更改时,ComboBox 不会自动更新?
为啥设置 DataSource 时 ComboBox 不抛出异常?
ComboBox 自动 DropDownWidth 与 DataSource 类型无关
C# winForm程序 数据绑定 更新控件问题 combobox绑定的DataSource 数据表中已经添加了新的数据