插入文本会导致objectcollection错误

我想将SQL中的每一行插入到combobox中,其中EmployeeID将是combobox值,而EmployeeFirstName EmployeeLastName将是combobox项目的文本。 不过这一行

给我这个错误:

错误1’System.Windows.Forms.ComboBox.ObjectCollection.Insert(int,object)’的最佳重载方法匹配具有一些无效参数C:\ Users \ bilgisayar \ Desktop \ WindowsFormsApplication1 \ WindowsFormsApplication1 \ Form1.cs 45 21 WindowsFormsApplication1

定义一个新类

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

在读取DataReader时,创建此类的实例并将其添加到combobox项集合中。 不要忘记设置combobox的DisplayMember和ValueMember

 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(); } 

试试这个

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

其中index是要在combobox中插入的整数值

你的意思是这个吗?

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

如果您只想添加combobox,请尝试以下操作

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

我想你正在寻找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(); } 

首先,使用Add将项AddComboBox 。 其次,我更喜欢使用anonymous type来填充ComboBox而在表单中使用简单的本机Sql和简单的DataReader

 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(); } 

更新:

我注意到,天真地添加到Item列表不起作用! 相反, ComboBox DataSource属性应设置为所需的列表。 所以工作代码如下:

 var list = new List(); 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; 

Items.Insert正在寻找您在ComboBox列表中的特定点插入。

您想使用Items.Add

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

如果你想使用Insert它需要是这样的:

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