[英]Get selected value from comboBox
我正在使用C#,winforms。
遇到了一個小問題。 我盡可能地調試,這讓我相信我正在使用的代碼導致問題。 好的,我有一個充滿查詢數據的組合框。
有2列“名稱”和“鍵碼”。 我只使用以下方式顯示名稱:
accCollection.DisplayMember = "name";
然后我使用以下內容來獲取與名稱對應的keycode值。
string acct = accCollection.SelectedValue.ToString();
我遇到的問題是鍵碼與名稱不匹配。 我雖然這可能是我的查詢,所以我做的是在填充comboBox之前在數據網格視圖中顯示查詢結果。 數據網格視圖顯示正確的結果,這使我相信我使用了錯誤的代碼!
希望這是一個愚蠢的一線問題,如果你們想要更多的代碼讓我知道,我將編輯這篇文章。
更新繼承了我忘記提及的代碼,因為你可以看到我已經分配了數據成員
accCollection.DataSource = myTable;
accCollection.DisplayMember = "name";
accCollection.ValueMember = "keycode";
更新::::還有更多信息。 所選值應為1557,即名稱帳號。 但我得到1855,這是一個不同的帳號。 就像我說數據表是正確的....這就是為什么我sooooooo困惑!
更新::下載一些代碼,以便您可以看到我如何使用信息更新組合框!
SqlCommand accountFill = new SqlCommand("SELECT name, keycode FROM dbo.Customer", conn1);
SqlDataAdapter readacc = new SqlDataAdapter(accountFill);
DataTable dt = new DataTable();
readacc.Fill(dt);
dataGridView3.DataSource = dt;
conn1.Close();
accCollection.DataSource = dt;
accCollection.DisplayMember = "name";
accCollection.ValueMember = "keycode";
然后我將以下內容傳遞給我調用其他查詢的任務。
private void button1_Click_1(object sender, EventArgs e)
{
checkBox1.Checked = true;
string acct = accCollection.SelectedValue.ToString();
Task t = new Task(() => GetsalesFigures(acct));
t.Start();
}
更新::只是為了顯示我得到的數據!
好的,所以在調試一些幫助之后,我已經使用了以下代碼來獲得這些結果。
var result = accCollection.SelectedValue;
if (result != null)
{
MessageBox.Show(result.ToString());
}
這= 1885這是錯的
但是,當我這樣做。
DataRowView row = (DataRowView)accCollection.SelectedItem;
if (row != null)
{
MessageBox.Show(row[0] + " " + row[1]);
}
它顯示了正確的數據,“melksham”“1557”
為什么是這樣?
您可以使用SelectedValue
或SelectedItem
屬性,但您還必須檢查返回的值是否為null。
如果綁定DataTable,則SelectedItem屬性將返回DataRowView。
DataRowView row = (DataRowView)accCollection.SelectedItem;
if(row!=null)
{
MessageBox.Show(row[0] + " " + row[1]);
}
如果是SelectedValue,
var result = accCollection.SelectedValue;
if (result != null)
{
MessageBox.Show(result.ToString());
}
編輯:
Form_Load事件中的代碼:
private void Form1_Load(object sender, EventArgs e)
{
DataTable dt = new DataTable();
dt.Columns.Add("A1", typeof(int));
dt.Columns.Add("A2");
dt.Rows.Add(1, "A");
dt.Rows.Add(2, "B");
comboBox1.DataSource = dt;
comboBox1.DisplayMember = "A2";
comboBox1.ValueMember = "A1";
}
Button的Click處理程序中的代碼:
var result = comboBox1.SelectedValue;
if (result != null)
{
MessageBox.Show(result.ToString());
}
DataRowView row = (DataRowView)comboBox1.SelectedItem;
if (row != null)
{
MessageBox.Show(row[0] + " " + row[1]);
}
好幾件事:
ValueMember屬性應該是列的名稱,該列是項的值。
accCollection.DisplayMember = "name"; accCollection.ValueMember = "key";
如果您想要所選項目的值,您應該使用:
string acct = accCollection.SelectedValue.ToString();
獲取顯示文本為:
string acct = accCollection.SelectedText;
請參閱此了解詳情。
我創建了一個DataTable,我用來將dataTable綁定到組合框以顯示標題類型,我想獲得數據表中的標題id到變量。
cmbTitle.DataSource=dataTable;
cmbTitle.DisplayMember="title_type";
cmbTitle.ValueMember="id";
然后在cmbtitle的選擇更改事件中,我將選定的值成員轉換為字符串並解析為整數以將其保存回數據庫,因為它是外鍵。
private void cmb_title_SelectedIndexChanged(object sender, EventArgs e)
{
string userTitle = cmb_title.SelectedValue.ToString();
int.TryParse(userTitle, out this.userTitle);
MessageBox.Show(this.userTitle.ToString());
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.