插入DataTable和DataRow:索引超出范围

时间:2014-09-29 07:48:10

标签: c# datatable datarow

美好的一天Stack Exchange。这是我在此的头一篇博文。我在DataTable和Datarow遇到的这个问题上需要你的帮助。这是错误:

  

指数超出范围。必须是非负数且小于   集合。参数名称:index

^发生这种情况并指向dataGridView1 [0] index

这是我的代码:

static DataTable dtTest = GetTable();

    static DataTable GetTable()
    {
        //added 4 columns with an incremental id

        DataTable dt = new DataTable();
        dt.Columns.Add("ID");
        dt.Columns["ID"].AutoIncrement = true;
        dt.Columns.Add("item");
        dt.Columns.Add("qty", typeof(decimal));
        dt.Columns.Add("amount", typeof(decimal));
        return dt;
    }

    private void btnInsert_Click(object sender, EventArgs e)
    {
             //added 3 rows to hold data to be inserted to DataTable

            DataRow myRow;

            myRow = dt.NewRow();
            myRow["item"] = txtItem.Text;
            myRow["qty"] = Convert.ToDecimal(txtQty.Text);
            myRow["amount"] = Convert.ToDecimal(txtAmount.Text);
            dtTest.Rows.Add(myRow);

            refreshItemGrid();
    }

    private void refreshItemGrid()
    {
        dataGridView1.Refresh();
        dataGridView1.Columns[0].Visible = false;             // ID
        dataGridView1.Columns[1].HeaderText = "ITEM";         // item 
        dataGridView1.Columns[2].HeaderText = "QUANTITY";     // qty
        dataGridView1.Columns[3].HeaderText = "AMOUNT";       // amount
    }

我在哪里做错了?在此先感谢您的帮助。干杯!

1 个答案:

答案 0 :(得分:0)

您的错误是由于dataGridView1GetTable方法中创建的表之间缺少绑定所致。所以你需要放在行的某个地方

dataGridView1.DataSource = <table_returned_from_GetTable_call>;

我以这种方式放置这一行,因为从上面的代码中不清楚应该添加这一行的位置。当然,对bntInsert点击事件的调用需要在此之前实现。

除此之外,您还应确保 AutoGenerateColumns 属性设置为True。 (这是默认设置,但考虑到上下文,您可能无意中将其设置为false)。最后(这可能只是一个错字)你需要修复

 myRow = dtTest.NewRow();