Как проверить, пуста ли выбранная строка в datagridview (не имеет элемента) C#
Как бы я проверил, есть ли в ячейках строки данные, т. е. не пустые/null.
Я пробовал следующее:
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");
}
}
однако, похоже, он не работает, и у меня нет идей:/
Спасибо за любую помощь, Ари!--2-->
5 ответов
.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
}
другой способ проверить, выбрана ли новая пустая строка, возможно
if(dataGridView.CurrentRow.Index == dataGridView.Rows.Count -1)
{
//you selected a new row
}
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
}
}
}
Я думаю, что это можно сделать, обработав 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;
}
удивлен нет ответа linq, так что вот он:
if (dataGridView1.Rows.Cast<DataGridViewRow>()
.Any(x => x.Cells.Cast<DataGridViewCell>()
.Any(c => c.Value != null)))
строки DataGrid имеют тип DataCollection, который реализует IEnumerable. Вам просто нужно бросить ячейки и строки.