簡體   English   中英

從comboBox中獲取選定的值

[英]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”

為什么是這樣?

您可以使用SelectedValueSelectedItem屬性,但您還必須檢查返回的值是否為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]);
}

好幾件事:

  1. DisplayMember屬性應該是要在組合框內顯示的列的名稱。
  2. 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.

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