我如何一次遍历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);
}
使用上面的代码时出现此错误 -
对象引用未设置为对象的实例。
答案 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