正在插入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
}
我哪里做错了?提前感谢您的帮助。干杯
您的错误是由于dataGridView1
和在GetTable
方法中创建的表之间缺少绑定。所以你需要把放在某个地方
dataGridView1.DataSource = <table_returned_from_GetTable_call>;
我这样放这行是因为从上面的代码中不清楚这行应该添加到哪里。当然,对bntInsert
点击事件的调用之前需要有这个功能。
除此之外,您还应确保属性AutoGenerateColumn设置为True
(这是默认值,但考虑到上下文,您可能无意中将其设置为false)。最后(这可能只是一个拼写错误),你需要修复
myRow = dtTest.NewRow();