读取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中,但是显示最新值

读取c#组合框文本和值

你的问题是,你应该在你的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中读取值比假设ComboBoxText总是包含绑定项的Text更安全。