格式化DataGridView C时出现System.DBNull错误#

时间:2015-06-17 12:12:10

标签: c# .net datagridview

我是C#的新手,所以我一直在关注一些指南,并根据我的应用进行调整。 Here是我从微软那里得到的一个。

我使用了与他们建议的相同的代码,但是我收到了错误。

enter image description 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.

4 个答案:

答案 0 :(得分:3)

DBNull.Value属于DBNull类型,无法转换为string。相反,请使用Convert.ToString来处理此案例。

Demo

另外,对于它的价值,DBNull.Valuenull不同。有关详细信息,请参阅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关键字。