0

SQL の各行をコンボボックスに挿入します。ここで、EmployeeID はコンボボックスの値になり、EmployeeFirstName EmployeeLastName はコンボボックス項目のテキストになります。ただし、この行

このエラーが表示されます:

エラー 1 'System.Windows.Forms.ComboBox.ObjectCollection.Insert(int, object)' に一致する最適なオーバーロード メソッドには、無効な引数がいくつかあります C:\Users\bilgisayar\Desktop\WindowsFormsApplication1\WindowsFormsApplication1\Form1.cs 45 21 WindowsFormsApplication1

4

4 に答える 4

2

新しいクラスを定義する

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

DataReader の読み取り中に、このクラスのインスタンスを作成し、コンボボックス アイテム コレクションに追加します。コンボボックスの 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();
}
于 2013-09-27T19:21:04.603 に答える
1

これを試して

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

indexコンボボックスに挿入する整数値はどこですか

これのことですか

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

コンボボックスに追加するだけの場合は、次を試してください

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();
}
于 2013-09-27T19:20:55.060 に答える
1

まず、 を使用Addして にアイテムを追加しますComboBox。第二に、フォームのすぐ内側でプレーンなネイティブとシンプルを使用anonymous typeしている間に入力することを好みます。ComboBoxSqlDataReader

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ました! 代わりに、のDataSourceプロパティComboBoxを目的のリストに設定する必要があります。したがって、作業コードは次のとおりです。

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;
于 2013-09-27T19:29:48.143 に答える
0

Items.InsertComboBox リストの特定の位置に挿入することを求めています。

使いたい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));
于 2013-09-27T19:23:29.770 に答える