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

本文关键字:索引 范围 DataRow 插入 DataTable | 更新日期: 2023-09-27 18:24:51

祝您交易愉快。这是我在这里的第一篇帖子。我在DataTable和Datarow的问题上需要你的帮助。错误如下:

索引超出范围。必须是非负的并且小于收藏。参数名称:索引

^出现这种情况并指向dataGridView1[0]索引

这是我的代码:

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
    }

我哪里做错了?提前感谢您的帮助。干杯

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

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

dataGridView1.DataSource = <table_returned_from_GetTable_call>;

我这样放这行是因为从上面的代码中不清楚这行应该添加到哪里。当然,对bntInsert点击事件的调用之前需要有这个功能。

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

 myRow = dtTest.NewRow();