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

What did you think?

Used only for your avatar and replies; never published.