我是C#的新手,所以我一直在关注一些指南,并根据我的应用进行调整。 Here是我从微软那里得到的一个。
我使用了与他们建议的相同的代码,但是我收到了错误。
我的代码只是查看DataGridView中的数据,如果符合条件,则用红色突出显示该行。 这是我的代码:
private void dataGridView1_CellFormatting(object sender, DataGridViewCellFormattingEventArgs e)
{
//Set the row definition
DataGridViewRow row = this.dataGridView1.Rows[e.RowIndex];
//If we are on the validating column
if (this.dataGridView1.Columns[e.ColumnIndex].Name == "SelectedUID")
{
//check criteria
string stringValue = (string)e.Value;
if ((stringValue.IndexOf("JL") > -1))
{
Debug.WriteLine("The Format Value " + e.Value);
//format the row colour
row.DefaultCellStyle.ForeColor = Color.White;
row.DefaultCellStyle.BackColor = Color.Red;
}
else
{
Debug.WriteLine("The Value " + e.Value);
}
}
}
我对这个对象的转换有什么错误?我尝试了很多其他解决方案。除此之外,我试着测试:
if (e.value != null)
但是这里甚至没有读取空值,所以我不确定是什么被返回,因为我检查了长度并且它是0.
答案 0 :(得分:3)
DBNull.Value
属于DBNull
类型,无法转换为string
。相反,请使用Convert.ToString
来处理此案例。
另外,对于它的价值,DBNull.Value
与null
不同。有关详细信息,请参阅this answer。
答案 1 :(得分:0)
数据库中此字段的值为NULL,您无法将DBNull强制转换为字符串。尝试:
string stringValue = e.Value as string;
...如果cou希望stringValue
为null,则数据库值为DBNull时,或者:
string stringValue = e.Value == DBNull.Value ? string.Empty : (string)e.Value;
...如果您希望stringValue
为空(""),则数据库值为DBNull时。
答案 2 :(得分:0)
首先检查值是否为DBNull:
if (Convert.IsDBNull(e.Value) {
} else {
string stringValue = (string)e.Value;
if ((stringValue.IndexOf("JL") > -1))
{
Debug.WriteLine("The Format Value " + e.Value);
//format the row colour
row.DefaultCellStyle.ForeColor = Color.White;
row.DefaultCellStyle.BackColor = Color.Red;
}
else
{
Debug.WriteLine("The Value " + e.Value);
}
}
答案 3 :(得分:0)
试试这个:string stringValue =Convert.ToString(e.Value);
或者您可以在数据类型中使用Nullable
关键字。