【问题标题】:Inserting into DataTable and DataRow : Index out of range插入 DataTable 和 DataRow :索引超出范围
【发布时间】:2014-09-29 07:48:10
【问题描述】:

美好的一天堆栈交换。这是我在这里的第一篇文章。在使用 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
    }

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

【问题讨论】:

  • 在哪里将 dtTest 绑定到 dataGridView1?在绑定它们之前,dataGridView 中没有可使用的列
  • 我之前尝试过“dataGridView1.DataSource = dtTest”来绑定我的datagridview,但还是一样的错误
  • 属性 AutoGenerateColumns 的值是多少?它应该设置为 True (这是默认设置,但让我们检查一下......),顺便说一下,我想这是一个错字,但你不能从一个表创建一个 NewRow 并添加到另一个表
  • 我如何支持史蒂夫的评论?它解决了它!谢谢,伙计!

标签: c# datatable datarow


【解决方案1】:

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

dataGridView1.DataSource = <table_returned_from_GetTable_call>;

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

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

 myRow = dtTest.NewRow();

【讨论】:

  • 答案在 AutoGenerateColumns 为真。斯帕西博。
猜你喜欢
  • 1970-01-01
  • 2023-01-16
  • 1970-01-01
  • 2019-09-24
  • 2019-06-28
  • 2018-03-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多