Использование row.Delete()
- рабочий пример .
Обычно вы не можете добавлять или удалять из коллекции внутри foreach
l oop , но вызов row.Delete()
помечает только строку для удаления. На самом деле он не удаляется, пока не будет вызван AcceptChanges
.
var dataTable = new DataTable();
dataTable.Columns.Add("One", typeof(string));
dataTable.Columns.Add("Two", typeof(string));
dataTable.Columns.Add("Three", typeof(string));
dataTable.LoadDataRow(new [] { "", "", ""}, true);
dataTable.LoadDataRow(new [] { "NotBlank", "", ""}, true);
dataTable.LoadDataRow(new [] { "", "", "" }, true);
dataTable.LoadDataRow(new [] { "NotBlank", "", "" }, true);
dataTable.LoadDataRow(new [] { "", "", "" }, true);
dataTable.AcceptChanges();
// 5 rows in table.
foreach(DataRow row in dataTable.Rows) {
var values = new[] { row[0], row[1], row[2] };
if(values.All(x => x == null || string.IsNullOrEmpty(x.ToString()))) {
row.Delete();
}
}
// Still 5 rows, 3 marked as deleted
dataTable.AcceptChanges();
// 2 rows in table.