我如何检查行的单元格中是否有数据,即不是空/空。
我一直在尝试以下方法:
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
答案 0 :(得分:8)
.Cells
是DataGridViewCell
个对象的集合。
你需要遍历那个集合&测试每个单元格以查看它是否具有值...
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
}}