如何解决:为什么 MyComboBox.Items.Count = 0,如果我将一个包含 1 个或更多元素的列表 <MyClass> 添加为数据源?
How to fix: Why is MyComboBox.Items.Count = 0, if I add as DataSource an List<MyClass> with 1 and more Elements?
我需要一些帮助。
我想将一个列表作为数据源添加到组合框。
该列表包含 1 个或多个 "Zaehler".
类型的元素
我在我的 GUI 中使用了 3 个组合框。两次有效。我创建了一个列表元素并添加了 T 的元素。之后我将这个列表设置为数据源。如果我检查调试器,它说 comboBox.Items = List..Count = comboBox.DataSource.Count.
private void LadeZaehlerDaten()
{
//NEUER ZÄHLER
List<Zaehler> zaehlerArten = new List<Zaehler>();
zaehlerArten.Add(new StromZaehler(1, "Stromzähler"));
zaehlerArten.Add(new GasZaehler(2, "Gaszähler"));
cb_ZaehlerArt.DataSource = zaehlerArten;
cb_ZaehlerArt.DisplayMember = "Name";
cb_ZaehlerArt.Sorted = true;
cb_ZaehlerArt.DropDownStyle = ComboBoxStyle.DropDownList;
Zaehler z = (Zaehler)cb_ZaehlerArt.SelectedItem;
// ... more code
}
此代码工作正常...我有 zaehlerArten 和 2 个元素,在 ComboBox 中我有 2 个项目 bzw。 DataSource.Count = 2.
在此之后我创建了一个新的 Zaehler 并将其添加到列表 zaehlerList 中,它将包含所有正确的 Zaehler。
这个出错了....
private void LadeVertragsDaten()
{
//NEUER VERTRAG
cb_VertragZaehler.DataSource = zaehlerList;
cb_VertragZaehler.DisplayMember = "Name"; //Property in Zaehler
cb_VertragZaehler.ValueMember = "ZaehlerNr"; //Property in Zaehler
//cb_VertragZaehler.Sorted = true;
cb_VertragZaehler.DropDownStyle = ComboBoxStyle.DropDownList;
if (cb_VertragZaehler.Items.Count < 1)
{
return;
}
else
{
Zaehler auswahl = (Zaehler)cb_VertragZaehler.SelectedItem;
}
}
如果我检查调试器...它说 das cb_VertragZaehler.Items 是 0 但 DataSource 和 zaehlerList 计数 2。
在我看来,我没有做任何不同的事情。它应该像 LadeZaehlerDaten()
一样工作
由于ComboBox 的Items 为0 我无法使用此"Zaehler" 的信息。
我确实说过 DisplayMember 是 Name ... 即使我确实希望使用像 ZaehlerNr 和 Name 这样的东西... booth 是 class Zaehler 的属性。
有人能说说为什么它在 LadeZaehlerDaten() 中有效但在 LadeVertragsDaten() 中无效吗?
图片:DebuggerInformation
而且我真的不知道为什么..
您尝试分配的列表应该是不可变的。尝试使用 cb_VertragZaehler.DataSource = new List<Zaehler>(zaehlerList);
创建它的副本
我需要一些帮助。 我想将一个列表作为数据源添加到组合框。 该列表包含 1 个或多个 "Zaehler".
类型的元素我在我的 GUI 中使用了 3 个组合框。两次有效。我创建了一个列表元素并添加了 T 的元素。之后我将这个列表设置为数据源。如果我检查调试器,它说 comboBox.Items = List..Count = comboBox.DataSource.Count.
private void LadeZaehlerDaten()
{
//NEUER ZÄHLER
List<Zaehler> zaehlerArten = new List<Zaehler>();
zaehlerArten.Add(new StromZaehler(1, "Stromzähler"));
zaehlerArten.Add(new GasZaehler(2, "Gaszähler"));
cb_ZaehlerArt.DataSource = zaehlerArten;
cb_ZaehlerArt.DisplayMember = "Name";
cb_ZaehlerArt.Sorted = true;
cb_ZaehlerArt.DropDownStyle = ComboBoxStyle.DropDownList;
Zaehler z = (Zaehler)cb_ZaehlerArt.SelectedItem;
// ... more code
}
此代码工作正常...我有 zaehlerArten 和 2 个元素,在 ComboBox 中我有 2 个项目 bzw。 DataSource.Count = 2.
在此之后我创建了一个新的 Zaehler 并将其添加到列表 zaehlerList 中,它将包含所有正确的 Zaehler。 这个出错了....
private void LadeVertragsDaten()
{
//NEUER VERTRAG
cb_VertragZaehler.DataSource = zaehlerList;
cb_VertragZaehler.DisplayMember = "Name"; //Property in Zaehler
cb_VertragZaehler.ValueMember = "ZaehlerNr"; //Property in Zaehler
//cb_VertragZaehler.Sorted = true;
cb_VertragZaehler.DropDownStyle = ComboBoxStyle.DropDownList;
if (cb_VertragZaehler.Items.Count < 1)
{
return;
}
else
{
Zaehler auswahl = (Zaehler)cb_VertragZaehler.SelectedItem;
}
}
如果我检查调试器...它说 das cb_VertragZaehler.Items 是 0 但 DataSource 和 zaehlerList 计数 2。
在我看来,我没有做任何不同的事情。它应该像 LadeZaehlerDaten()
一样工作由于ComboBox 的Items 为0 我无法使用此"Zaehler" 的信息。
我确实说过 DisplayMember 是 Name ... 即使我确实希望使用像 ZaehlerNr 和 Name 这样的东西... booth 是 class Zaehler 的属性。
有人能说说为什么它在 LadeZaehlerDaten() 中有效但在 LadeVertragsDaten() 中无效吗?
图片:DebuggerInformation
而且我真的不知道为什么..
您尝试分配的列表应该是不可变的。尝试使用 cb_VertragZaehler.DataSource = new List<Zaehler>(zaehlerList);