我正在使用C#WinForms,我有一些复选框,其文本在按钮单击时添加到datagridview(dgData)中。这是它的代码。
private void btnAdd_Click(object sender, EventArgs e)
{
dgData.Rows.Clear();
foreach(Control c in pnlDeficiency.Controls)
{
if ((c is CheckBox) && ((CheckBox)c).Checked)
dgData.Rows.Add(c.Text);
}
}
我的保存代码就在这里。
private void btnSave_Click(object sender, EventArgs e)
{
if (MessageBox.Show("Are You Sure You Want to Save the Record!", "TAC | Question", MessageBoxButtons.YesNo, MessageBoxIcon.Question, MessageBoxDefaultButton.Button1) == DialogResult.Yes)
{
SqlConnection S_Conn = new SqlConnection(strConnString);
S_Conn.Open();
int a = 10;
for (int i = 0; i <= dgData.Rows.Count; i++)
{
string Query_Insert = "";
Query_Insert = "INSERT into Deficiency_Details (Vendor_Id, Tender_Id, DeficiencyType) values ('" + cmbSelectVendor.SelectedValue + "', '" + cmbSelectTender.SelectedValue + "', '" + dgData.Rows[i].Cells[0].Value.ToString() + "')";
SqlCommand Command_Insert = new SqlCommand(Query_Insert, S_Conn);
a = Command_Insert.ExecuteNonQuery();
}
if (a == 0)
{
MessageBox.Show("Record Not Saved Successfully! Please Check Fields", "TAC | Alert", MessageBoxButtons.OKCancel, MessageBoxIcon.Error);
}
else
{
MessageBox.Show("Record Saved Successfully", "TAC | Success", MessageBoxButtons.OKCancel, MessageBoxIcon.Information);
}
S_Conn.Close();
S_Conn.Dispose();
ResetAll();
}
}
我得到的错误是指数偏离狂暴。我调试了我的程序,错误就在这行
dgData.Rows[i].Cells[0].Value.ToString()
VALUE为NULL。我知道错误,我之前解决了很多次,但这一次它根本没有解决。请帮帮我。
答案 0 :(得分:1)
问题是这一行:
for (int i = 0; i < dgData.Rows.Count; i++)
您需要将其更改为:
{{1}}
因为我们假设你的GridView中有10行。 dgData.Rows.Count为10.现在,由于你的&lt; =运算符,你从0到10运行。 0-10将是11次循环运行。您的GridView只包含10行。因此,索引在最后一次循环迭代时超出范围。如果你改为&lt;运算符你的循环刚刚从0到9运行,正好是10次迭代。
答案 1 :(得分:0)
使用以下代码,您可以在其中指定需要插入的单元格的索引
DataGridViewRow row = (DataGridViewRow)dgData.Rows[0].Clone();
row.Cells[0].Value = c.text;
dbData.Rows.Add(row);