填充数据网格视图时出现未处理的异常

时间:2016-11-21 13:44:18

标签: c# winforms datagridview

我正在使用C#winform应用程序。我的目标是在用户从datetimePicker中选择一个日期之后,执行查询并返回仅具有相同记录的结果。接下来,用户将选择其中一个记录,这些记录应该从组合框中填充与该客户关联的所有项目(custlocation)。这部分正在运行。问题是,现在我一直试图让我的dataGridView1填充。我一直在说:

  

类型' System.ArgumentOutOfRangeException'的未处理异常发生在mscorlib.dll

     

其他信息:指数超出范围。必须是非负数且小于集合的大小。

我已检查过我的查询,并返回正确的结果。

private void custlocation_SelectedIndexChanged(object sender, EventArgs e)
{
    SqlDataAdapter da = new SqlDataAdapter(
        "Select [orderitem].*, [orderitem].qty, [orderitem].descrip, [orderitem].tally "+
        "from [orderitem] inner join [Order] on [orderitem].orderId = [order].ct "+
        "where [order].loadDate='" + dateTimePicker1.Value.Date + "' "+
        "and [order].addr1=" + custlocation.Text, conn);

    DataTable lt = new DataTable();
    //da.Fill(lt);

    //dataGridView1.DataSource = lt;
    dataGridView1.AutoGenerateColumns = true;
    dataGridView1.DataSource = lt;
    dataGridView1.Columns[4].Name = "loadtickets";
    dataGridView1.Rows[a].Cells[0].Value = rdr["orderID"].ToString();
    dataGridView1.Rows[a].Cells[1].Value = rdr["qty"].ToString();
    dataGridView1.Rows[a].Cells[2].Value = rdr["descrip"].ToString();
    dataGridView1.Rows[a].Cells[3].Value = rdr["tally"].ToString();
}

2 个答案:

答案 0 :(得分:0)

数组是基于零的,就像您在@category.articles.where(published: true) 属性上使用的那样。似乎您正在尝试更改第5列的名称,但您只有4。

更改

Cells

dataGridView1.Columns[4].Name = "loadtickets";

答案 1 :(得分:0)

  

mscorlib.dll中发生了'System.ArgumentOutOfRangeException'类型的未处理异常

     

其他信息:指数超出范围。必须是非负数且小于集合的大小。

此错误是因为您必须使用dataGridView1.Columns[3].Name = "loadtickets";之类的 SqlDataAdapter da = new SqlDataAdapter( "Select [orderitem].*, [orderitem].qty, [orderitem].descrip, [orderitem].tally "+ "from [orderitem] inner join [Order] on [orderitem].orderId = [order].ct "+ "where [order].loadDate='" + dateTimePicker1.Value.Date + "' "+ "and [order].addr1=" + custlocation.Text, conn);

  

无法绑定多部分标识符“System.Data.DataRowView”

此错误是由于查询造成的。

orderitm.*

您已选择orderitem[orderitem].qty, [orderitem].descrip, [orderitem].tally中的所有列)和同一表中的3列([orderitem].qty AS Quantity)。所以这些列是重复的

您必须删除这些重复项或为其提供类似public static void main(String[] args) { myMap = new HashMap<>(); // 123,totti 100,roma, 100,totti addToMap("totti", 123); addToMap("roma", 100); addToMap("totti", 100); System.out.println(myMap); } private static void addToMap(String string, int i) { int t = i; if (myMap.get(string) != null) { t += myMap.get(string); } myMap.put(string, t); }

的别名