阅读 C# 组合框文本和值?
Reading c# combo box text and value?
我写了这段代码来将值和文本保存到组合框中:
public class ComboboxItem
{
public string Text { get; set; }
public object Value { get; set; }
public override string ToString()
{
return Text;
}
}
ComboboxItem item = new ComboboxItem();
for (int i = 0; i < query.Count(); i++)
{
item.Text = query[i].gaptitle1.ToString();
item.Value = query[i].id.ToString();
comboBox2.Items.Add(item);
}
我想将我的查询两个字段保存到组合框中,第一个标题字段和第二个 id 字段,我需要 id 唯一字段在我的其他应用程序中进行搜索,例如当我想用这种方法读取组合框数据和值时:
listBox1.Visible = true;
listBox1.Items.Add(comboBox2.Text);
listBox2.Items.Add((comboBox2.SelectedItem as ComboboxItem).Value.ToString());
使用上面的代码,当用户触发按钮组合框时,我希望文本保存到列表框 1 中,id 保存到列表框 2 中,但最新值显示。
您的问题是您应该在 for
循环中定义 item
inside,因为您当前正在向 [=] 添加相同的项目14=] 针对查询中的每个结果一次,同时还更新项目的文本和值以匹配当前查询结果。在循环结束时,您会得到一个 ComboBox
充满相同项目的结果,所有项目都等于查询中的最后一项。这是您的代码 应该 的样子:
for (int i = 0; i < query.Count(); i++)
{
ComboboxItem item = new ComboboxItem();
item.Text = query[i].gaptitle1.ToString();
item.Value = query[i].id.ToString();
comboBox2.Items.Add(item);
}
仅针对 tidiness/safety,我建议将您的 "addition" 代码更改为:
listBox1.Visible = true;
var selectedItem = (ComboboxItem)comboBox2.SelectedItem;
listBox1.Items.Add(selectedItem.Text);
listBox2.Items.Add(selectedItem.Value);
首先,如果您知道所选项目是 ComboboxItem
,那么使用 as
就没有意义了。显式转换的意图更清晰。其次,直接从 ComboboxItem
中读取值比假设 ComboBox
的 Text
将始终包含绑定项的 Text
.[=22= 更安全]
我写了这段代码来将值和文本保存到组合框中:
public class ComboboxItem
{
public string Text { get; set; }
public object Value { get; set; }
public override string ToString()
{
return Text;
}
}
ComboboxItem item = new ComboboxItem();
for (int i = 0; i < query.Count(); i++)
{
item.Text = query[i].gaptitle1.ToString();
item.Value = query[i].id.ToString();
comboBox2.Items.Add(item);
}
我想将我的查询两个字段保存到组合框中,第一个标题字段和第二个 id 字段,我需要 id 唯一字段在我的其他应用程序中进行搜索,例如当我想用这种方法读取组合框数据和值时:
listBox1.Visible = true;
listBox1.Items.Add(comboBox2.Text);
listBox2.Items.Add((comboBox2.SelectedItem as ComboboxItem).Value.ToString());
使用上面的代码,当用户触发按钮组合框时,我希望文本保存到列表框 1 中,id 保存到列表框 2 中,但最新值显示。
您的问题是您应该在 for
循环中定义 item
inside,因为您当前正在向 [=] 添加相同的项目14=] 针对查询中的每个结果一次,同时还更新项目的文本和值以匹配当前查询结果。在循环结束时,您会得到一个 ComboBox
充满相同项目的结果,所有项目都等于查询中的最后一项。这是您的代码 应该 的样子:
for (int i = 0; i < query.Count(); i++)
{
ComboboxItem item = new ComboboxItem();
item.Text = query[i].gaptitle1.ToString();
item.Value = query[i].id.ToString();
comboBox2.Items.Add(item);
}
仅针对 tidiness/safety,我建议将您的 "addition" 代码更改为:
listBox1.Visible = true;
var selectedItem = (ComboboxItem)comboBox2.SelectedItem;
listBox1.Items.Add(selectedItem.Text);
listBox2.Items.Add(selectedItem.Value);
首先,如果您知道所选项目是 ComboboxItem
,那么使用 as
就没有意义了。显式转换的意图更清晰。其次,直接从 ComboboxItem
中读取值比假设 ComboBox
的 Text
将始终包含绑定项的 Text
.[=22= 更安全]