2017-02-15 95 views
0

我正在检查所选行的单元格7,8,9是否为null。但是,即使所有单元格的值都为空,它也只显示“已启用”。这里是我的代码如何检查Datagridview中选定行的特定列是否为空?

private void btnTest_Click_1(object sender, EventArgs e) 
    { 

     foreach (DataGridViewRow row in dgvReceivingproducts.Rows) 
     { 
      if (row.Cells[7].Value != null && row.Cells[8].Value != null && row.Cells[9].Value != null) 
      { 

       lblchecker.Text = "enabled"; 

      } 
      else 
      { 
       lblchecker.Text = "disabled"; 

      } 
     }   
    } 
+1

作为@PabloJ建议在他的回答,请核对'DbNull.Value'取代'null' – Pikoh

回答

0

您是否尝试过使用Convert.IsDBNull()代替!=null

0

你可以试试这个::

if ((row.Cells[7].Value != null && row.Cells[8].Value != null && row.Cells[9].Value != null) 
    || (row.Cells[7].Value != DBNull.Value && row.Cells[8].Value != DBNull.Value && row.Cells[9].Value != DBNull.Value)) 
    { 
     lblchecker.Text = "enabled"; 
    } 
    else 
    { 
     lblchecker.Text = "disabled"; 
    } 

如果没有功能使用IsNullOrWhitespace功能测试:

String.IsNullOrWhitespace(row.Cells[8].Value...)

+0

它的工作,但不是全部。当所有的行和列都是空白时,它显示“禁用”,并且当所有的行和列都有值时启用。但如果例如有3行。第1行和第2行在其列7,8,9中有空值或空白值,但第3行在其第7,8,9列上有值。文本显示“已启用”。我想要的是只有当所有的行及其列7,8,9不为空或空白时才会显示。 – FutureDev

+0

我编辑使用'!='来做这个,就像你一样。 –

1

此代码中可能有两个错误:
1.上述所有答案中提到的那个
2. 您是否意识到lblchecker.Text的值只对应于GridView中的最后一行?(你的逻辑似乎不正确,你想为每个行的值,因为现在这也不是什么代码产生?)

一些良好做法的建议:
1.避免使用索引。如果您以后重新安排栏目会怎样?尝试使用列名替代
2.更好的方法是使用DataKeys
3.甚至更好的方法是如果该“启用”/“禁用”值是预先计算的,即在数据绑定之前。可能你可以在SQL或业务层中执行此操作。这取决于逻辑背后

UPDATE:
你说明每行的“已启用”值,如果你设置的每一行内的值。使用你的代码,一个可能的办法是类似的东西:

private void btnTest_Click_1(object sender, EventArgs e) 
{ 
    foreach (DataGridViewRow row in dgvReceivingproducts.Rows) 
    { 
     if (row.Cells[7].Value != null && row.Cells[8].Value != null && row.Cells[9].Value != null) 
     { 
      row.Cells[X].Value = "enabled"; 
     } 
     else 
     { 
      row.Cells[X].Value = "disabled"; 
     } 
    }   
} 
+0

是的,我认为这只检查最后一行先生。我需要检查每一行,我怎么能实现这个先生?先生,请注意你未来的良好做法谢谢。 – FutureDev

相关问题