代码:
int i = 0;
List<int> ChkedRow = new List<int>();
for (i = 0; i <= dataGridView1.RowCount; i++)
{
if (dataGridView1.Rows[i].Cells[0].Value.ToString() == "yes")
{
ChkedRow.Add(i);
}
}
if (ChkedRow.Count == 0)
{
MessageBox.Show("Select one checkbox");
return;
}
foreach (int j in ChkedRow)
{
try
{
Query = "Insert into dbo.tbl_Class(Class_Name,Category,Description,Item) values ('" + txtname.Text + "','" + cbo_cat.Text + "','" + txtdesc.Text + "','" + dataGridView1.Rows[j].Cells[1].Value.ToString() + "')";
SqlCommand cmd = new SqlCommand(Query, con);
con.Open();
cmd.ExecuteNonQuery();
con.Close();
}
catch (Exception ex)
{
MessageBox.Show(ex.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}
MessageBox.Show("Records successfully inserted");
我想在sql中保存我在datagridview中选择的行,但我在此行中有错误 "if (dataGridView1.Rows[i].Cells[0].Value.ToString() == "yes")"
。而且我不知道为什么。你能帮帮我吗?或建议另一种代码或其他方法?请帮忙。
答案 0 :(得分:0)
我不太确定你会得到什么错误,但是你肯定会得到IndexOutOfRange异常或者类似的东西,因为你在这里迭代这些行的方式......
for (i = 0; i <= dataGridView1.RowCount; i++)
RowCount
返回总行数,但是,您正在访问从零开始的索引,该索引将在您最后一次迭代时立即抛出上述xception。因此,您必须更改for循环中的评估表达式以排除上一次迭代...
for (i = 0; i < dataGridView1.Rows.Count; i++)
根据您的评论,由于您获得了NullReferenceException
,因此您应该确保将单元格的值设置为null以外的值,如下所示...
var row = dataGridView1.Rows[i];
if (!string.IsNullOrEmpty(row.Cells[0].Value) && row.Cells[0].Value.ToString() == "yes")
{
ChkedRow.Add(i);
}
也尝试使用dataGridView1.Rows.Count
代替RowCount
属性
答案 1 :(得分:0)
您是否尝试使用columnname而不是int index?
if (dataGridView1.Rows[i].Cells["ColumnName"].Value.ToString() == "yes")
{
ChkedRow.Add(i);
}
答案 2 :(得分:-1)
试试这个,
foreach (GridViewRow grdRow in dataGridView1.Rows)
{
CheckBox chk = new CheckBox();
int count=0;
chk = (CheckBox)grdRow.FindControl("check box name");
if (chk != null && chk.Checked == true)
{
//write code for insesrt
count++;
}
}
if(count==0)
{
MessageBox.Show("Select one checkbox");
}