Inserting text gives objectcollection error

后端 未结 4 1976
终归单人心
终归单人心 2021-01-29 01:10

I want to insert each row in SQL into combobox, where EmployeeID will be combobox Value, and EmployeeFirstName EmployeeLastName will be text of combobox item. However this line<

相关标签:
4条回答
  • 2021-01-29 01:54

    Try this

    comboBox1.Items.Insert(index, dr.GetString(1) + dr.GetString(2));
    

    Where index is an integer value where you want to insert in combobox

    Did you mean this

    comboBox1.Items.Insert(dr.GetInt32(0), dr.GetString(1) + dr.GetString(2));
    

    If you want to just add in combobox try the following

    comboBox1.Items.Add(dr.GetString(1) + dr.GetString(2));
    

    I think you're looking for DataSource

    void comboboxrefresh()
    {
        cnn.Open();
        SqlCommand cmd = new SqlCommand("SELECT EmployeeID, (EmployeeFirstName + EmployeeLastName) as EmployeeName FROM Employees", cnn);
        DataTable table = new Datatable();
        SqlDataAdapter adapter = new SqlDataAdapter(cmd);
        adapter.Fill(table);
    
        comboBox1.DisplayMember = "EmployeeName";
        comboBox1.ValueMember = "EmployeeID";
    
        comboBox1.DataSource = table;
    
        cnn.Close();
    }
    
    0 讨论(0)
  • 2021-01-29 01:56

    Define a new class

    public class EmpItem
    {
       public int empID;
       public string empName;
    }  
    

    While reading the DataReader create an instance of this class and add it to the combobox items collections. Do not forget to set the DisplayMember and ValueMember of the combobox

    void comboboxrefresh()
    {
        comboBox1.DisplayMember = "empName";
        comboBox1.ValueMember = "empID";
        cnn.Open();
        SqlCommand cmd = new SqlCommand("SELECT EmployeeID,EmployeeFirstName,EmployeeLastName FROM Employees", cnn);
        SqlDataReader dr = cmd.ExecuteReader();
        if (dr.HasRows)
        {
            while (dr.Read())
            {
                EmpItem ei = new EmpItem() { empID=dr.GetInt32(0), empName = dr.GetString(1) + dr.GetString(2)};
                comboBox1.Items.Add(ei);
            }
        }
        cnn.Close();
    }
    
    0 讨论(0)
  • 2021-01-29 02:00

    First, use Add to add items to the ComboBox. Second, I prefer anonymous type to fill the ComboBox while you use plain native Sql and simple DataReader immediately inside your form.

    void comboboxrefresh()
        {
            cnn.Open();
            SqlCommand cmd = new SqlCommand("SELECT EmployeeID,EmployeeFirstName,EmployeeLastName FROM Employees", cnn);
            SqlDataReader dr = cmd.ExecuteReader();
            if (dr.HasRows)
            {
                combobox1.ValueMember = "Id";
                combobox1.DisplayMember = "FullName";
    
                while (dr.Read())
                {
                    comboBox1.Items.Add(
                      new {
                             FullName = dr.GetString(1) + " " + dr.GetString(2), 
                             Id = dr.GetInt32(0)
                          });
                }
            }
    
            cnn.Close();
        }
    

    Update:

    I noticed that naively adding to the Item list is not working! Instead, DataSource property of ComboBox should be set to desired list. So the working code is as:

    var list = new List<object>();
    combobox1.ValueMember = "Id";
    combobox1.DisplayMember = "FullName";
    while (dr.Read())
    {
       list.Add(
           new {
                  FullName = dr.GetString(1) + " " + dr.GetString(2), 
                  Id = dr.GetInt32(0)
                });
     }
    combobox1.DataSource = list;
    
    0 讨论(0)
  • 2021-01-29 02:10

    Items.Insert is looking for you to Insert at a specific point in the ComboBox list.

    You want to use Items.Add

    comboBox1.Items.Add(dr.GetString(1) + dr.GetString(2) + dr.GetInt32(0));
    

    If you want to use Insert it would need to be something like this:

    comboBox1.Items.Insert(0, dr.GetString(1) + dr.GetString(2) + dr.GetInt32(0));
    
    0 讨论(0)
提交回复
热议问题