代码之家  ›  专栏  ›  技术社区  ›  BPDESILVA

例外:输入数组输入数组长于此表组合框中的列数

  •  0
  • BPDESILVA  · 技术社区  · 7 年前

    为了解释我在做什么,我尝试使用静态方法将特定列中的数据加载到组合框中。异常在 7以下代码行 。每当我运行程序时,这一行就会引发异常, 输入数组输入数组长于此表中的列数。

    void DataGridViewModules()
    {
        DataRow dr;
        CommonDBTransaction c = new CommonDBTransaction();
        string sql = "SELECT MId FROM Module";
        DataTable dt = c.searchData(sql);
        dr = dt.NewRow();
        dr.ItemArray = new object[] { 0, "--Select Module--" }; //Exception jumps out here
        dt.Rows.InsertAt(dr,0);
        metroComboBoxMod.ValueMember = "MId";
        metroComboBoxMod.DisplayMember = "MId";
        metroComboBoxMod.DataSource = dt;
    }
    

    用于查询数据的静态方法是,

    public DataTable searchData(string query)
    {
        try
        {
            DataTable table = new DataTable();
            using(SqlConnection con = new SqlConnection(....constring here...))//connection string was added
            {
                using(SqlDataAdapter da = new SqlDataAdapter(query, con))
                   da.Fill(table);
            }
            return table;
        }
        catch(Exception ex)
        {
            MessageBox.Show(ex.ToString());
            return null;
        }
    }
    

    我做错了什么?我如何修复它&参考就足够了?

    1 回复  |  直到 7 年前
        1
  •  1
  •   qwertydog    7 年前

    看起来您在select查询中只检索了一列,但在新行中添加了一个2列数组。

    您可以通过以下方式逃脱:

    DataRow dr;
    CommonDBTransaction c = new CommonDBTransaction();
    string sql = "SELECT MId FROM Module";
    DataTable dt = c.searchData(sql);
    dr = dt.NewRow();
    dr[0] = "--Select Module--";
    dt.Rows.InsertAt(dr,0);
    metroComboBoxMod.ValueMember = "MId";
    metroComboBoxMod.DisplayMember = "MId";
    metroComboBoxMod.DataSource = dt;
    

    否则,您可能需要ValueMember和DisplayMember都有一个单独的列:

    DataRow dr;
    CommonDBTransaction c = new CommonDBTransaction();
    string sql = "SELECT MId AS MId, MId AS DisplayId FROM Module";
    DataTable dt = c.searchData(sql);
    dr = dt.NewRow();
    dr[0] = 0;
    dr[1] = "--Select Module--";
    dt.Rows.InsertAt(dr,0);
    metroComboBoxMod.ValueMember = "MId";
    metroComboBoxMod.DisplayMember = "DisplayId";
    metroComboBoxMod.DataSource = dt;