读取c#组合框文本和值
本文关键字:文本 组合 读取 | 更新日期: 2023-09-27 17:54:11
我写了下面的代码来保存值和文本到组合框:
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
,因为你目前在你的查询中为每个结果添加相同的项目到你的ComboBox
一次,同时更新项目的文本和值以匹配当前的查询结果。在循环结束时,您将得到一个包含相同项的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);
}
为了整洁/安全起见,我建议将"添加"代码更改为:
listBox1.Visible = true;
var selectedItem = (ComboboxItem)comboBox2.SelectedItem;
listBox1.Items.Add(selectedItem.Text);
listBox2.Items.Add(selectedItem.Value);
首先,如果您知道所选项目是ComboboxItem
,那么使用as
是没有意义的。显式强制转换的意图更明确。其次,直接从ComboboxItem
中读取值比假设ComboBox
的Text
总是包含绑定项的Text
更安全。