簡體   English   中英

閱讀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保存到listbox2中,但是會顯示最新值。

您的問題是您應該 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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM