I am trying to get to grips with using DataSource
with a combo. At the moment I have this:
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();
}
But it does not display the data as I expect:
If I comment out my binding attempt and then trying the original foreach
loop I get what I expect:
I tried setting:
cbMaterialGroupsValueMember = "Name";
But then it raises an exception.
How do I get it to display the correct value? I am missing something.
Update
I do have the name
property in the class:
public class CutToolsDatabaseMaterialGroup
{
[XmlElement]
public string Name;
[XmlElement(ElementName = "Material")]
public List<CutToolsDatabaseMaterial> Materials;
public CutToolsDatabaseMaterialGroup()
{
Name = "";
Materials = new List<CutToolsDatabaseMaterial>();
}
}
And:
public class CutToolsDatabaseMaterial
{
[XmlElement]
public string Name;
[XmlArray]
[XmlArrayItem(ElementName ="Value")]
public List<string> Text;
public CutToolsDatabaseMaterial()
{
Name = "";
Text = new List<string>();
}
}
Update
I tried the linked answer and used:
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();
}
But I still get an exception: