如何获取DataGridView行值并存储在变量中?

时间:2011-08-03 23:20:39

标签: c# datagridview

我如何一次遍历DataGridView的行(我有2列)然后将这2列存储在一个变量中,我将用它作为sql查询的参数?

  foreach (DataGridViewRow Datarow in contentTable_grd.Rows)
            {
                contentValue1 = Datarow.Cells[0].Value.ToString();
                contentValue2 = Datarow.Cells[1].Value.ToString();

                SqlParameter param4 = new SqlParameter("@contentTableValue1", contentValue1);
                SqlParameter param5 = new SqlParameter("@contentTableValue2", contentValue2);

            }

使用上面的代码时出现此错误 -

  

对象引用未设置为对象的实例。

3 个答案:

答案 0 :(得分:5)

最可能的问题是,您引用的Cell中的一个或两个都包含空值,并且当您尝试在此类单元格上调用ToString()时会抛出异常。

如果Cell Value为null,一种解决方案是使用?? operator返回参数的默认值:

contentValue1 = Datarow.Cells[0].Value ?? string.Empty;
contentValue2 = Datarow.Cells[1].Value ?? string.Empty;

如果单元格的Value为null,则此代码将返回空字符串;您可能希望使用其他默认值。

答案 1 :(得分:3)

发现问题我需要一个if语句来阻止空单元格通过

    foreach (DataGridViewRow Datarow in contentTable_grd.Rows)
    {
        if (Datarow.Cells[0].Value != null && Datarow.Cells[1].Value != null)
        {
            contentValue1 = Datarow.Cells[0].Value.ToString();
            contentValue2 = Datarow.Cells[1].Value.ToString();
            MessageBox.Show(contentValue1);
            MessageBox.Show(contentValue2);
        }

    }

答案 2 :(得分:1)

contentValue1是什么?

不确定c# - 可以隐式输入变量吗?也许尝试像string contentvalue1 = ...

这样的东西

此外,根据单元格中的控件类型...您可能会执行类似

的操作

string contentvalue1 = CTYPE(DataRow.FindControl("myTextbox"),textbox).text