The individual cells in a DataTable can have a null value in the form of System.DbNull.Value. If the DataTable is created by querying a database through ADO.NET, you can write the SQL statement in a way eliminates nulls. It could look like this “SELECT isnull(name, 'n/a') AS name FROM products”.

However, there can be scenarios where you don’t have the chance to manipulate the DataTable before you use it. Such a scenario have I recently been involved in and the problem was that the data retrieved from a database could contain nulls in any of the integer type columns. If I then bind the DataTable to a GridView in ASP.NET, I had to do a lot of workarounds to calculate footers and other values based on those columns.

Instead of doing the workarounds in a lot of different places in the code, I decided it was a better idea to clean the DataTable for nulls before it is used. That led to the CleanDataTable method below, that replaces null values with zeros for a few integer type columns.

/// <summary>

/// In the case of null values in a data table, this method

/// will turn all nulls into zeros instead.

/// </summary>

public static DataTable CleanDataTable(DataTable dt)

{

  for (int a = 0; a < dt.Rows.Count; a++)

  {

    for (int i = 0; i < dt.Columns.Count; i++)

    {

      if (dt.Rows[a][i] == DBNull.Value)

      {

        Type type = dt.Columns[i].DataType;

        if (type == typeof(int) || type == typeof(float) || type == typeof(double))

        {

          dt.Columns[i].ReadOnly = false;

          dt.Rows[a][i] = 0.0F;

        }

      }

    }

  }

 

  return dt;

}

The point is that you only have to clean it once to avoid any workaround for handling null values.

Comments


Comments are closed