2012-09-19 10 views
8

से Combobox भरें एक comboboxडेटाबेस

साथ मैं एक त्रुटि है मेरे कोड:

SqlConnection conn = new SqlConnection(); 
try 
{ 
    conn = new SqlConnection(@"Data Source=SHARKAWY;Initial Catalog=Booking;Persist Security Info=True;User ID=sa;Password=123456"); 
    string query = "select FleetName, FleetID from fleets"; 
    SqlCommand cmd = new SqlCommand(query, conn); 
    cmd.CommandText = query; 
    conn.Open(); 
    SqlDataReader drd = cmd.ExecuteReader(); 
    while (drd.Read()) 
    { 
     cmbTripName.Items.Add(drd["FleetName"].ToString()); 
     cmbTripName.ValueMember = drd["FleetID"].ToString(); 
     cmbTripName.DisplayMember = drd["FleetName"].ToString(); 
    } 
} 
catch 
{ 
    MessageBox.Show("Error "); 
} 

डेटा बता गया में प्रस्तुत किया है, लेकिन जब आप चयन को बदलने valuemember displaymember नहीं बदलता है।

यह अब काम कर रहा है, लेकिन जब मैं डेटा

private void button1_Click(object sender, EventArgs e) 
{ 
    label1.Text = cmbTripName.DisplayMember; 
    label2.Text = cmbTripName.ValueMember; 
} 

यह प्रदर्शित किया जाता है को दिखाने के लिए बटन पर क्लिक करें:

FleetName
FleetID

यह मूल्य प्रदर्शित नहीं करता है

उत्तर

12

आपको अपना कोड पूरी तरह से फिर से लिखना होगा। DisplayMember और ValueMember कॉलम नाम पर इंगित करें! इसके अलावा आपको वास्तव में using block का उपयोग करना चाहिए - इसलिए कनेक्शन निष्पादन के बाद डिस्प्ले (और बंद) हो जाता है।

इसके बजाय मूल्यों तक पहुँचने के लिए एक DataReader का उपयोग करने का

मैं एक DataTable choosed और ComboBox पर डेटा स्रोत के रूप में यह बाध्य।

using (SqlConnection conn = new SqlConnection(@"Data Source=SHARKAWY;Initial Catalog=Booking;Persist Security Info=True;User ID=sa;Password=123456")) 
{ 
    try 
    { 
     string query = "select FleetName, FleetID from fleets"; 
     SqlDataAdapter da = new SqlDataAdapter(query, conn); 
     conn.Open(); 
     DataSet ds = new DataSet(); 
     da.Fill(ds, "Fleet"); 
     cmbTripName.DisplayMember = "FleetName"; 
     cmbTripName.ValueMember = "FleetID"; 
     cmbTripName.DataSource = ds.Tables["Fleet"]; 
    } 
    catch (Exception ex) 
    { 
     // write exception info to log or anything else 
     MessageBox.Show("Error occured!"); 
    }    
} 

का उपयोग करते हुए एक DataTableएक थोड़ा धीमी एक से DataReader लेकिन मैं अपने वर्ग बनाने के लिए की जरूरत नहीं है हो सकता है। यदि आप वास्तव में कोडेटा रीडर का उपयोग करना चाहते हैं तो आप @Nattrass दृष्टिकोण चुन सकते हैं। किसी भी मामले में आपको using block लिखना चाहिए!

संपादित

आप प्राप्त करना चाहते हैं बता गया की वर्तमान मूल्य इस

private void cmbTripName_SelectedIndexChanged(object sender, EventArgs e) 
{ 
    if (cmbTripName.SelectedItem != null) 
    { 
     DataRowView drv = cmbTripName.SelectedItem as DataRowView; 

     Debug.WriteLine("Item: " + drv.Row["FleetName"].ToString()); 
     Debug.WriteLine("Value: " + drv.Row["FleetID"].ToString()); 
     Debug.WriteLine("Value: " + cmbTripName.SelectedValue.ToString()); 
    } 
} 
+0

अब काम कर रही है, लेकिन मुझे 'लेबल 1 लेबल करने के लिए ValueMember और displaymember डालने की आवश्यकता है। टेक्स्ट = cmbTripName.DisplayMember; लेबल 2.Text = cmbTripName.ValueMember; ' –

+0

परिणाम: सिस्टम.डेटा। डेटा नाम नहीं –

1

लूप के बाहर, निम्नलिखित सेट करें।

cmbTripName.ValueMember = "FleetID" 
cmbTripName.DisplayMember = "FleetName" 
+0

उन गुणों के लिए स्तंभ नाम सेट करनी चाहिए की कोशिश करो। आपने डेटा मान सेट कर दिए हैं। यह समस्या – Prasanna

7

जिस तरह से आप चाहते हैं में Combobox का उपयोग करने के लिए आपको cmbTripName.Items.Add विधि करने के लिए एक वस्तु पास कर सकता है।

वस्तु होना चाहिए कि FleetID और FleetName गुण:

while (drd.Read()) 
{ 
    cmbTripName.Items.Add(new Fleet(drd["FleetID"].ToString(), drd["FleetName"].ToString())); 
} 
cmbTripName.ValueMember = "FleetId"; 
cmbTripName.DisplayMember = "FleetName"; 

Fleet कक्षा:

class Fleet 
{ 
    public Fleet(string fleetId, string fleetName) 
    { 
      FleetId = fleetId; 
      FleetName = fleetName 
    } 
    public string FleetId {get;set;} 
    public string FleetName {get;set;} 
} 

या, आप शायद पूरी तरह से एक गुमनाम का उपयोग करके एक Fleet वर्ग के लिए जरूरत के साथ दूर कर सकता है टाइप करें ...

while (drd.Read()) 
{ 
    cmbTripName.Items.Add(new {FleetId = drd["FleetID"].ToString(), FleetName = drd["FleetName"].ToString()}); 
} 
cmbTripName.ValueMember = "FleetId"; 
cmbTripName.DisplayMember = "FleetName"; 
0
private void StudentForm_Load(object sender, EventArgs e) 

{ 
     string q = @"SELECT [BatchID] FROM [Batch]"; //BatchID column name of Batch table 
     SqlDataReader reader = DB.Query(q); 

     while (reader.Read()) 
     { 
      cbsb.Items.Add(reader["BatchID"].ToString()); //cbsb is the combobox name 
     } 
    } 
0
  SqlConnection conn = new SqlConnection(@"Data Source=TOM-PC\sqlexpress;Initial Catalog=Northwind;User ID=sa;Password=xyz") ; 
      conn.Open(); 
      SqlCommand sc = new SqlCommand("select customerid,contactname from customers", conn); 
      SqlDataReader reader; 

      reader = sc.ExecuteReader(); 
      DataTable dt = new DataTable(); 
      dt.Columns.Add("customerid", typeof(string)); 
      dt.Columns.Add("contactname", typeof(string)); 
      dt.Load(reader); 

      comboBox1.ValueMember = "customerid"; 
      comboBox1.DisplayMember = "contactname"; 
      comboBox1.DataSource = dt; 

      conn.Close(); 
+0

कोड काम कैसे करता है इसके पीछे कुछ स्पष्टीकरण फायदेमंद होगा। – rayryeng

0
string query = "SELECT column_name FROM table_name";  //query the database 
SqlCommand queryStatus = new SqlCommand(query, myConnection); 
sqlDataReader reader = query.ExecuteReader();        

while (reader.Read()) //loop reader and fill the combobox 
{ 
ComboBox1.Items.Add(reader["column_name"].ToString()); 
}