美好的一天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
}
我在哪里做错了?在此先感谢您的帮助。干杯!
答案 0 :(得分:0)
您的错误是由于dataGridView1
与GetTable
方法中创建的表之间缺少绑定所致。所以你需要放在行的某个地方
dataGridView1.DataSource = <table_returned_from_GetTable_call>;
我以这种方式放置这一行,因为从上面的代码中不清楚应该添加这一行的位置。当然,对bntInsert
点击事件的调用需要在此之前实现。
除此之外,您还应确保 AutoGenerateColumns 属性设置为True。 (这是默认设置,但考虑到上下文,您可能无意中将其设置为false)。最后(这可能只是一个错字)你需要修复
myRow = dtTest.NewRow();