Fill Combobox from database

后端 未结 7 1185
北海茫月
北海茫月 2020-11-28 12:22

I have an error with a combobox

My code:

SqlConnection conn = new SqlConnection();
try
{
    conn = new SqlConnection(@\"Data Source=SHARKAWY;Initia         


        
相关标签:
7条回答
  • 2020-11-28 12:41

    You will have to completely re-write your code. DisplayMember and ValueMember point to columnNames! Furthermore you should really use a using block - so the connection gets disposed (and closed) after query execution.

    Instead of using a dataReader to access the values I choosed a dataTable and bound it as dataSource onto the 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!");
        }               
    }
    

    Using a dataTable may be a little bit slower than a dataReader but I do not have to create my own class. If you really have to/want to make use of a DataReader you may choose @Nattrass approach. In any case you should write a using block!

    EDIT

    If you want to get the current Value of the combobox try this

    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 讨论(0)
  • 2020-11-28 12:46

    Out side the loop, set following.

    cmbTripName.ValueMember = "FleetID"
    cmbTripName.DisplayMember = "FleetName"
    
    0 讨论(0)
  • 2020-11-28 12:47
    void Fillcombobox()
    {
    
        con.Open();
        cmd = new SqlCommand("select ID From Employees",con);
        Sdr = cmd.ExecuteReader();
        while (Sdr.Read())
        {
            for (int i = 0; i < Sdr.FieldCount; i++)
            {
               comboID.Items.Add( Sdr.GetString(i));
    
            }
        }
        Sdr.Close();
        con.Close();
    
    }
    
    0 讨论(0)
  • 2020-11-28 12:55
    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 讨论(0)
  • 2020-11-28 12:59

    To use the Combobox in the way you intend, you could pass in an object to the cmbTripName.Items.Add method.

    That object should have FleetID and FleetName properties:

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

    The Fleet Class:

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

    Or, You could probably do away with the need for a Fleet class completely by using an anonymous type...

    while (drd.Read())
    {
        cmbTripName.Items.Add(new {FleetId = drd["FleetID"].ToString(), FleetName = drd["FleetName"].ToString()});
    }
    cmbTripName.ValueMember = "FleetId";
    cmbTripName.DisplayMember = "FleetName";
    
    0 讨论(0)
  • 2020-11-28 13:06
    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());
    }
    
    0 讨论(0)
提交回复
热议问题