18

i am trying to check the datagridview cells for empty and null value... but i can not do it right...

for (int i = 0; i < dataGridView1.Rows.Count; i++)
{
    if ((String)dataGridView1.Rows[i].Cells[3].Value == String.Empty)
    {
        MessageBox.Show(" cell is empty");
        return;
    }

    if ((String)dataGridView1.Rows[i].Cells[3].Value == "")
    {
        MessageBox.Show("cell in empty");
        return ;
    }
}

i even tried this codes

if (String.IsNullOrEmpty(dataGridView1.Rows[i].Cells[3].Value))
{
  MessageBox.Show("cell is empty");
  return;
}

can any one help me.. with this...

3
  • can you tell me what is the error message you are getting Commented Nov 24, 2011 at 10:05
  • For empty/null check use string.IsNullOrEmpty() Commented Nov 24, 2011 at 10:06
  • it is not showing any error message even though.. i leave the cell blank... Commented Nov 24, 2011 at 10:14

9 Answers 9

28

I would try like this:

foreach (DataGridViewRow rw in this.dataGridView1.Rows)
{
  for (int i = 0; i < rw.Cells.Count; i++)
  {
    if (rw.Cells[i].Value == null || rw.Cells[i].Value == DBNull.Value || String.IsNullOrWhiteSpace(rw.Cells[i].Value.ToString())
    {
      // here is your message box...
    }
  } 
}
Sign up to request clarification or add additional context in comments.

2 Comments

IsNullOrWhitespace has error saying 'string' does not contain definition for 'IsNullOrWhitespace' can you tell me why?
The "s" in "Whitespace" needs to be capitalized.
6
if (String.IsNullOrEmpty(dataGridView1.Rows[i].Cells[3].Value as String))
{
    MessageBox.Show("cell is empty");
    return;
}

Add as String, it works for me.

Comments

4
if (!GridView1.Rows[GridView1.CurrentCell.RowIndex].IsNewRow)
{
     foreach (DataGridViewCell cell in GridView1.Rows[GridView1.CurrentCell.RowIndex].Cells)
    {
        //here you must test for all and then return only if it is false
        if (cell.Value == System.DBNull.Value)
        {
            return false;
        }
    }
}

Comments

4

I think you should use this:

for (int i = 0; i < dataGridView1.RowCount; i++)
{
    for (int j = 0; j < dataGridView1.ColumnCount; j++) 
    {
        if (dataGridView1.Rows[i].Cells[j].Value == DBNull.Value)
        {
            dataGridView1.Rows[i].Cells[j].Value = "null";
        }
    }
}
dataGridView1.Update();

Comments

1

I think you should check for null first

Convert.IsDBNull(dataGridView1.Rows[j].Cells[1].FormattedValue)

2 Comments

are you sure? this is not the usual way to check for nulls and also, why do you check against FormattedValue and not Value only?
@David Suggested FormattedValue which would after any specific formats being applied to the cell, post those compare the values
0
for (int i = 0; i < GV1.Rows.Count; i++)
{
    if ((String)GV1.Rows[i].Cells[4].Value == null)
    {
        MessageBox.Show(" cell is empty");
        return;
    }
}

It's working fine.

Comments

0

Try this :

foreach (DataGridViewRow row in dataGridView.Rows)
{
    IEnumerable<DataGridViewCell> cellsWithValusInRows = from DataGridViewCell cell in row.Cells
        where string.IsNullOrEmpty((string)cell.Value)
        select cell;

     if (cellsWithValusInRows != null && cellsWithValusInRows.Any())
     {
         //Then cells with null or empty values where found  
     }
}

Then check for the collection if it is null or it has elements.

I hope this was helpful.

Comments

0

Works perfect for me:

for (int i = dataGridView1.Rows.Count - 1; i >= 0; i--)
{
    DataGridViewRow dataGridViewRow = dataGridView1.Rows[i];

    foreach (DataGridViewCell cell in dataGridViewRow.Cells)
    {
        string val = cell.Value as string;
        if (string.IsNullOrEmpty(val))
        {
            if (string.IsNullOrEmpty(dataGridView1.Rows[i].Cells[3].Value as string)) // If you want to check more then just one cell you could also add "&& (string.IsNullOrEmpty(dataGridView1.Rows[i].Cells[ANY NUMBER].Value as string)
            {
                MessageBox.Show(" cell is empty");
                return;
                /* or to delete replace with:
                dataGridView1.Rows.Remove(dataGridViewRow);
                break;
                */
            }
        }
    }
}

Comments

0
        // move cell value to Excel
        for (int i = 0; i < grd.Rows.Count; i++)
        {
            for (int t = 0; t < grd.Columns.Count; t++)
            {
                try
                {
                    worksheet.Cells[i + 2, t + 1] = grd.Rows[i].Cells[t].Value.ToString();
                }
                catch (Exception e)
                {
                    Debug.WriteLine(e.HResult + " " + e.Message + " I've always hated null ");
                }
            }
        }

2 Comments

Please add some explanation to your answer
I have tried all suggestions provided in this post and nobody works well for me... at end I have opted for catch any type of error during setting value... If there is an error I skip the cell otherwise I set the value... I hope my explanation is exaustive.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.