我如何获得DataGridView行值并将它们存储在变量中

本文关键字:存储 变量 何获得 DataGridView | 更新日期: 2023-09-27 18:04:38

我如何一次循环一个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);
}

当使用上面的代码时,我得到这个错误:

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

我如何获得DataGridView行值并将它们存储在变量中

最可能的问题是你引用的一个或两个单元格包含一个空值,当你试图在这样的单元格上调用ToString()时抛出异常。

一个解决方案是使用??操作符,如果单元格值为空,则返回参数的默认值:

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

如果单元格的Value为null,这段代码将返回一个空字符串;您可能希望使用不同的默认值

发现问题,我需要一个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);
        }
    }

什么是contentValue1?

不确定c#——它可以隐式地键入变量吗?也许可以试试string contentvalue1 = ...

此外,根据单元格中可能存在的控件类型…你可以这样写

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