如何检查datagridview中的选定行是否为空(没有项目)C#

时间:2011-11-04 08:47:40

标签: c# datagridview

我如何检查行的单元格中是否有数据,即不是空/空。

我一直在尝试以下方法:

        if (dgvClient.SelectedRows.Count > 0)
        {
            DataGridViewRow currentRow = dgvClient.SelectedRows[0];
            if (currentRow.Cells.ToString() != String.Empty)
            {
                //The code that will be here will open a form
            }
            else
            {
                MessageBox.Show("Select a non null row");
            }
        }

然而,它似乎没有起作用,我没有想法:/

感谢您的帮助, ARI

6 个答案:

答案 0 :(得分:8)

.CellsDataGridViewCell个对象的集合。

你需要遍历那个集合&测试每个单元格以查看它是否具有值...

if (currentRow.Cells.Count > 0) 
{      
   bool rowIsEmpty = true;    

   foreach(DataGridViewCell cell in currentRow.Cells)    
   {
      if(cell.Value != null) 
      { 
          rowIsEmpty = false;
          break;
      }    
   }

   if(rowIsEmpty)
   {
       MessageBox.Show("Select a non null row"); 
   }
   else
   {
       //DoStuff
   }
}

答案 1 :(得分:3)

另一种检查是否选择了新空行的方法

if(dataGridView.CurrentRow.Index == dataGridView.Rows.Count -1)
{
    //you selected a new row
}

答案 2 :(得分:1)

         for (int i = 0; i < dataGridView1.Rows.Count; i++)
            {
                for (int j = 0; j < dataGridView1.Columns.Count; j++)
                {
                    DataGridViewCell cell = dataGridView1[j, i];
                    object value = cell.Value;
                    if (value == string.Empty)
                    {
                             //do
                    }
                }
            }

答案 3 :(得分:1)

我认为这可以通过处理DataGridView.RowEnter事件来完成。当行接收输入焦点但在它成为当前行之前,会发生RowEnter事件。例如,从一个单元格移动到另一行中的另一个单元格。

检查每个单元格值:

 void dataGridView1_RowEnter(object sender, DataGridViewCellEventArgs e)
 {
     dataGridView1.Rows[e.RowIndex].ReadOnly = checkrow(dataGridView1.Rows[e.RowIndex]);
 }

 bool checkrow(DataGridViewRow testrow)
 {
        for (int i = 0; i < testrow.Cells.Count; i++)
        {
            if (testrow.Cells[i].Value != null)
            {
                // if datagridview is databound, you'd better check whether the cell value is string.Empty
                if (testrow.Cells[i].Value.ToString() != string.Empty)
                {
                    // if value of any cell is not null, this row need to be readonly
                    return true;
                }

                // if there is an unbound checkbox column, you may need to check whether the cell value is null or false(uncheck).
            }
        }

        // else false
        return false;
 }

答案 4 :(得分:1)

惊讶没有linq回答所以这里是:

if (dataGridView1.Rows.Cast<DataGridViewRow>()
      .Any(x => x.Cells.Cast<DataGridViewCell>()
      .Any(c => c.Value != null)))

DataGrid行是DataCollection类型,它实现了IEnumerable。你只需要投射单元格和行。

答案 5 :(得分:0)

我在检查C#Windows窗体中当前行是否为空时遇到了同样的问题,我输入了以下逻辑,它对我有用,如果您想检查所有值然后放置所有单元格值,也可以使用它例如0,1,2,3 ...或创建一个动态函数进行检查。

 private void dataGridViewProduct_RowHeaderMouseClick(object sender, DataGridViewCellMouseEventArgs e)
        {
            if (dataGridViewProduct.Rows[e.RowIndex].Cells[0].Value.ToString()!= string.Empty)
            { //dowork

}}