[英]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
讀取值,而不是假設ComboBox
的Text
將始終包含綁定項的Text
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.