【问题标题】:Reading c# combo box text and value?读取 c# 组合框文本和值?
【发布时间】:2015-06-06 17:09:27
【问题描述】:

我编写这段代码是为了将值和文本保存到组合框中:

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,但显示最新值。

【问题讨论】:

  • @SimonMᶜKenzie 感谢我的朋友关注我的问题,我用两个字段读取数组日期,id 和标题,id 保存到组合框值和标题保存到组合框文本中,但是当我读取数据,我看到将最新的数组值保存到组合框项中
  • 别担心!我的第一条评论不正确,因为我没有阅读整个问题。您需要在您的for 循环中定义item inside,因为您当前只是在每次循环循环时覆盖item 的属性,因此您最终会得到一个组合框,其中包含一组相同的项目(因为它们都是相同的项目)!
  • @SimonMᶜKenzie 感谢您的帮助,请将您的代码写到帖子中,我会为您的帖子投票
  • 完成!我还根据我的第一个(已删除)评论提供了一些建议。

标签: c# combobox


【解决方案1】:

您的问题是您应该在您的for 循环中定义item inside,因为您目前正在为您的查询中的每个结果一次将相同的项目添加到您的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 更安全。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-07
    • 2020-12-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多