【问题标题】:How can i prevent the program from crashing due to null data [duplicate]如何防止程序因空数据而崩溃[重复]
【发布时间】:2021-07-15 14:30:50
【问题描述】:

我正在使用 Datagridview 从我的 sql 服务器获取数据。我正在尝试根据它们的值更改单元格的颜色。但是,如果列上有空数据,则会崩溃。我正在使用 .NET Framework 4.0。代码如下:

 private void MyDataGrid()
    {
        foreach (DataGridViewRow row in MyDataGrid.Rows)

        {
            var cell = row.Cells[5];
            int val = Convert.ToInt32(cell.Value);
            if (val < 0)
            {
                cell.Style.BackColor = Color.Red;
            }
            else if (val > 0)
            {
                cell.Style.BackColor = Color.Green;
            }

        }
    }

这是错误:

在 mscorlib.dll 中发生了“System.InvalidCastException”类型的未处理异常

附加信息:对象不能从 DBNull 分配给其他类型。

【问题讨论】:

  • @LarsTech TryParse 来自对象?有趣
  • 比较 DBNull.Value 和 cell.Value ...如果它们相等,那么你不应该执行你的代码
  • 还用try catch换行可以吗?
  • @LeiYang 捕捉到预期的异常......有趣(但显然是错误的)方法

标签: c# winforms datagridview


【解决方案1】:

它发生在您使用 Convert.ToInt32() 的行中。您可以添加条件来检查 cell.Value 是否为空。我不确定您想对这些值做什么,但您可以使用“继续”跳过显示它,这将跳过当前迭代并转到下一个:

private void MyDataGrid()
        {
            foreach (DataGridViewRow row in MyDataGrid.Rows)
            {
                var cell = row.Cells[5];

                if (cell.Value == null || cell.Value == DBNull.Value) 
                    continue;

                int val = Convert.ToInt32(cell.Value);
                if (val < 0)
                {
                    cell.Style.BackColor = Color.Red;
                }
                else if (val > 0)
                {
                    cell.Style.BackColor = Color.Green;
                }

            }
        }

【讨论】:

  • 这个我已经试过了,不行。
  • DBNull.Value比较
  • if (cell.Value == null || cell.Value == DBNull.Value) continue;
  • 成功了,非常感谢! @Selvin,@Jimi。
  • 我认为代码风格 cell.Style.BackColor = val &lt; 0 ? Red : Green 正好适合这里。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-05-30
  • 2014-08-22
  • 2010-09-07
  • 2023-03-07
  • 2021-10-26
相关资源
最近更新 更多