【问题标题】:System.NullReferenceException Error Csharp [duplicate]System.NullReferenceException 错误 Csharp [重复]
【发布时间】:2020-03-05 10:57:34
【问题描述】:

得到错误:

System.NullReferenceException

在 C# Windows 窗体上的以下代码。

try
{
    foreach (DataGridViewRow row in dataGridView2.Rows)
    {
        if (row.Cells["txtAttendance_Status"].Value.ToString() == "Attended")
        {
            row.Cells["txtStatus"].Value = true;
        }
        else if (row.Cells["txtAttendance_Status"].Value.ToString() == "Not Attended")
        {
            row.Cells["txtStatus"].Value = false;
        }
        else
        {
            row.Cells["txtStatus"].Value = false;
        }
    }
}

catch (Exception ex)
{
    MessageBox.Show("Error", ex.ToString());
}

下表:

【问题讨论】:

  • 包括您的完整代码,因为不清楚您是来自数据库的insertinggetting
  • 还包括您的完整错误以了解有关该问题的更多信息。

标签: c# sql .net nullpointerexception


【解决方案1】:

运行此行之前

row.Cells["txtAttendance_Status"].Value.ToString()

您必须检查 row.Cells["txtAttendance_Status"].Value 的内容不为空。

您正在对 Null 执行 ToString()

编辑:代码

switch (row.Cells["txtAttendance_Status"].Value)
{
    //only if its string with value Attended
    case string s when s.Equals("Attended", StringComparison.InvariantCultureIgnoreCase):
        row.Cells["txtStatus"].Value = true;
        break;
    default:
        //All other cases "Not Attended", null or whatever
        row.Cells["txtStatus"].Value = false;
}

【讨论】:

  • 类似 if (row.Cells["txtAttendance_Status"].Value?.ToString() == "Attended")
  • 它可以用 lambda 和 linq 在一行中完成,但这种方式更具可读性
【解决方案2】:
try
            {
                foreach (DataGridViewRow row in dataGridView2.Rows)


                        if (Convert.ToString(row.Cells["txtAttendance_Status"].Value) == "Attended")
                        {
                            row.Cells["txtStatus"].Value = true;
                        }
                        else if (Convert.ToString(row.Cells["txtAttendance_Status"].Value) == "Not Attended")
                        {
                            row.Cells["txtStatus"].Value = false;
                        }
                        else
                        {
                            row.Cells["txtStatus"].Value = false;
                        }

            }

            catch (Exception ex)
            {
                MessageBox.Show("Error", ex.ToString());
            }

【讨论】:

    【解决方案3】:
    try
            {
                foreach (DataGridViewRow row in dataGridView2.Rows)
    
    
                        if (row.Cells["txtAttendance_Status"].Value.ToString() == "Attended")
                        {
                            row.Cells["txtStatus"].Value = true;
                        }
                        else if (row.Cells["txtAttendance_Status"].Value.ToString() == "Not Attended")
                        {
                            row.Cells["txtStatus"].Value = false;
                        }
                        else
                        {
                            row.Cells["txtStatus"].Value = false;
                        }
    
            }
    
            catch (Exception ex)
            {
                MessageBox.Show("Error", ex.ToString());
            }
    

    在此代码中,如果任何数据库列具有 null 值并且您尝试将其转换为字符串,则会抛出 System.NullReferenceException

    例如, 根据您的 SQL 表结果,对于“requestid”50,“txtAttendance_Status”具有空值,如果您尝试转换此空值,则会出现“System.NullReferenceException”错误。1

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-01-20
      • 2013-07-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多