Я думаю, что ваш лучший выбор - использовать DataView между DataGridView и DataTable.
DataView позволяет фильтровать значения, используя и выражение, не влияя на исходный DataTable. Чтобы отфильтровать все пустые столбцы, вы можете создать представление с этим выражением:
DataView view = new DataView(table);
view.RowFilter = "ISNULL(id, '') <> '' AND ISNULL(name, '') <> '' AND ISNULL(address, '') <> '' AND ISNULL(phoneno, '') <> ''";
Функция ISNULL заменяет значение столбца указанной строкой, если значение столбца равно нулю. Таким образом, фильтр заменяет каждое значение NULL пустыми строками, исключая пустые или пустые столбцы.
Затем вы можете использовать это представление для передачи значений в сетку вместо использования данных:
dataGridView1.ColumnCount = view.Columns.Count;
dataGridView1.RowCount = view.Rows.Count;
for (int i = 0; i < dataGridView1.RowCount; i++)
{
for (int j = 0; j < dataGridView1.ColumnCount; j++)
{
dataGridView1[j, i].Value = view.Rows[i][j].ToString();
}
}
Также вместо использования циклов для предоставления значений в сетку, вы можете просто использовать привязку данных. Это намного проще:
dataGridView1.DataSource = view;
Надеюсь, это поможет!