2012-05-04 48 views
1

朋友們,我在我的datagridview中使用datagridviewcomboboxcolumn作爲列索引1。我取從訪問數據庫表中的數據,並通過以下方式填充datagridviewcomboboxcolumn:如何獲取DataGridviewcombobox列的ValueMember的值

for (int i = 0; reader.Read(); i++) 
     { 
      cmbBusCode.Items.Add(reader["BUSINESS_CODE"] + "-" + reader["BUSINESS_DESCRIPTION"]); 
      cmbBusCode.ValueMember = "BUSINESS_CODE"; 
     } 

然後我寫這篇文章:

 cmbBusCode.DisplayIndex = 1; 
     cmbBusCode.Width = 200; 
     cmbBusCode.Name = "Code"; 
     cmbBusCode.HeaderText = "Code"; 

並加入此列

dgView.Columns.Add(cmbBusCode); 

Combobox正在填充,我可以從列表中選擇任何一個。現在,當我保存數據時,我想獲取所選項目的ValueMember。爲了得到這個數值我用下面的代碼,但它給現場的字符串表示「BUSINESS_CODE」不是value..Please幫助我,讓獲得所選項目的ValueMemeber ..

foreach (DataGridViewRow row in dgView.Rows) 
    { 
     string cd = row.Cells["Code"].Value.ToString(); 
    } 

回答

0

的「項目「您添加到列沒有」BUSINESS_CODE「列(實際上,您添加它的項目只是一個字符串),所以這是行不通的。

您需要做的是分配包含多列的項目。其中一個必須是BUSINESS_CODE列(因爲它是您希望成爲DataGridView中的基礎字段的值),另一個應該是包含您此刻添加的連接值的顯示列(DisplayMemberValueMember )。

最簡單的辦法是創建一個類型化的數據集,添加一個包含我描述的兩列的表格,並用來自數據讀取器的數據填充表格。

然後,添加該表作爲該列的數據源。

-1

您可以嘗試在cmbBusCode.Items集合中添加DataGridViewComboBoxCell而不是string。然後您可以在單元格中指定Value。我不確定這是否可行,但值得一試。

+0

咦? 'cmbBusCode'是'DataGridViewComboBoxCell'!它的'Items'集合應該包含顯示和可選項目的列表。如果作爲項目傳遞的對象包含與「DisplayMember」和「ValueMember」的值相對應的成員,則會將這些成員的值顯示或分配給基礎數據對象的字段。你的建議是*不值得一試,因爲這不是如何工作... –

+0

@ThorstenDittmar,是的cmbBusCode是DataGridViewComboBoxColumn,我已經使用上述代碼填充。我想獲得列表中選定項目的相應ValueMember ..但我沒有得到.. – Sukanya

+0

你讀過我的答案了嗎?您的項目不包含具有您分配給「ValueMember」屬性的名稱的屬性。閱讀我的答案。給你一個比喻:你可以編寫一個名爲'button_Click'的方法 - 但是,除非你將它分配給一個按鈕的'Click'事件,否則它不會被調用。您沒有獲得價值,因爲您確實將屬性名稱分配給了「ValueMember」,但底層對象中沒有該名稱。 –