score:0

Try this:

for (int i = dt.Rows.Count - 1; i >= 0; i--)
    {
    if (dt.Rows[i]["Column2"].ToString() == "")
        {
            dt.Rows[i].Delete();
            dt.AcceptChanges();
        }
    }

score:1

According to the requirements you are mentioning you would need to use Any which will check that if at least column has null value or empty string it would filter out that row. So, do like:

row => !row.ItemArray.Any(field => field is DBNull || 
                                string.IsNullOrWhiteSpace(field as string))

EDIT:

If your all columns are of type string then the above code would work fine, otherwise you will need to convert it to string explicitly by calling ToString():

row => !row.ItemArray.Any(field => field is DBNull || 
                                string.IsNullOrWhiteSpace(field.ToString()))

This will now only return those rows for which every column has value in it.

score:1

If for loop can be used. We can check each row and column for nulls

    for (int i = dt.Rows.Count - 1; i >= 0; i--)
    {

      if (dt.Rows[i]["col1"] == DBNull.Value || dt.Rows[i]["col2"] == DBNull.Value)
      {
           dt.Rows[i].Delete();
      }
    }

Related Query

More Query from same tag