插入文本会导致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
将项Add
到ComboBox
。 其次,我更喜欢使用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
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));