C# 组合框从数据库动态添加多个项目文本和值

C# combobox adding multiple items text and values from database dynamically

我正在尝试在一个组合框中列出多家公司。这些公司来自数据库 table tbl_companies。 Combobox 值应该是 table 的 id(这是 table 的主键)。文字应为公司名称。 比如 id=1 和 name = "XYZ"。 代码是

      string connStr = "My Connection string";
        SqlConnection conn = new SqlConnection(connStr);

        string strQuery = "SELECT * FROM tbl_Companies ORDER BY id ASC";
        SqlCommand cmd = new SqlCommand(strQuery, conn);

        conn.Open();

        SqlDataReader companyRead = cmd.ExecuteReader();

        if (companyRead.HasRows)
        {
            while (companyRead.Read())
            {
                int cId = (Convert.ToInt16(companyRead["id"].ToString()));
                cmbCompany.Items.Insert(cId, companyRead["name"].ToString());
            }
        }
        conn.Close();

当我执行代码时,出现以下错误。 System.ArgumentOutOfRangeException:'InvalidArgument='1' 的值对 'index' 无效。 参数名称:index'

作为参考,我也分享了[enter image description here]错误代码的截图1

我需要指导,如何解决问题。

您在特定索引处插入,当列表开头为空时,索引“1”被视为超出范围。

尝试:

cmbCompany.Items.Add(companyRead["name"].ToString());

相反。

您的错误出在 Item.Insert 方法中,其中第一个参数应该是您要插入新值而不是项目值的现有项目集合中的位置。

您可以简单地将组合数据源设置为 DataTable 并设置 DisplayMember and ValueMember 属性

,而不是使用此手动循环
string connStr = "My Connection string";
using(SqlConnection conn = new SqlConnection(connStr))
{
    string strQuery = "SELECT * FROM tbl_Companies ORDER BY id ASC";
    SqlCommand cmd = new SqlCommand(strQuery, conn);
    conn.Open();
    DataTable dt = new DataTable();
    dt.Load(cmd.ExecuteReader())
    cmbCompany.DisplayMember = "name";
    cmbCompany.ValueMember = "id";
    cmbCompany.DataSource = dt;
}

另请考虑,一旦您以这种方式设置了数据源 属性,您就不应手动插入新项目,而应将元素添加到基础数据表并刷新组合数据源绑定