2012-03-14 36 views
0

我在運行時將項目添加到一個ComboBox。一切工作正常,但問題是,ValueMember在所有項目中顯示的最後一條記錄的唯一價值。我想要ValueMember中的當前項目。所有ComboBoxItem ValueMembers是最後一個項目從DataReader的

string qr1 = "select * from categorymaster"; 
SqlCommand cmd1 = new SqlCommand(qr1, con); 
con.Open(); 
SqlDataReader dr1 = cmd1.ExecuteReader(); 
cmbcat.Items.Clear(); 

while (dr1.Read()) 
{ 
    cmbcat.Items.Add(dr1[1].ToString()); 
    cmbcat.DisplayMember = dr1[1].ToString(); 
    cmbcat.ValueMember = dr1[0].ToString(); 
} 
con.Close(); 

任何人都可以幫我嗎?

回答

1

你並不需要使用值成員,而循環

string qr1 = "select * from categorymaster"; 
     SqlCommand cmd1 = new SqlCommand(qr1, con); 
     con.Open(); 
     SqlDataReader dr1 = cmd1.ExecuteReader(); 
     cmbcat.Items.Clear(); 
     while (dr1.Read()) 
     { 
      cmbcat.Items.Add(new Item(dr1[1].ToString(), dr1[0].ToString())); 

     } 
     con.Close(); 
+0

我沒有得到它「添加項目」行.. BT我得到解決..感謝ü所有的答覆... :) – piyush 2012-03-14 09:02:52

3

DisplayMemberValueMember是指屬性的名稱中的對象,而不是像值在你的代碼。既然你不用任何對象填充項目,而只是使用值,你根本不需要設置它們。

但在一般的方法需要工作!這是更好地創造你來自哪裏,你的讀者在兩個屬性保持這兩個值對象,並定義一個作爲ValueMember,另一個爲DisplayMember

2

如果你想使用ValueMemberDisplayMember在你的情況,你應該填補DataTable並將其設置爲DataSourceComboBox

DataTable dt = new DataTable(); 
dt.Columns.Add("ID"); 
dt.Columns.Add("CategoryName"); 

cmbcat.DisplayMember = "CategoryName"; 
cmbcat.ValueMember = "ID"; 
cmbcat.DataSource = dt; 
+0

嘿嘿感謝ü...它的工作:) – piyush 2012-03-14 09:00:55

1

每當你經歷一個項目從讀者的while-循環,您將項目添加到組合框。到目前爲止好,但你設置顯示 - 和ValueMember組合框的最後一個項目是從閱讀器讀取的。所以最後ComboBox的Display - 和ValueMember等於讀取的最後一個項目。

編輯:

對於一個合適的解決方案看已經被@ionden恩@PraVn給出的答案:使用一個DataTable /來源或只是添加在循環的項目。

相關問題