使用ado.net在c#中的datagridview中插入数据库检查行

时间:2014-09-30 03:20:52

标签: c# sql-server checkbox datagridview ado.net

代码:

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")"。而且我不知道为什么。你能帮帮我吗?或建议另一种代码或其他方法?请帮忙。

3 个答案:

答案 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");
}