Удалить строку, если первые 4 datarows пусты - PullRequest
0 голосов
/ 30 марта 2020

У меня есть dataTable, в котором я хочу динамически удалить строку из dataTable, если datarow [0] - datarow [3] пусты.

Я пробовал код, но не уверен, как удалить строку:

foreach (DataRow row in myDataSet.Tables[0].Rows)
 {
 if ((string.IsNullOrEmpty(row[0].ToString())) && (string.IsNullOrEmpty(row[1].ToString())) && (string.IsNullOrEmpty(row[2].ToString())) && (string.IsNullOrEmpty(row[3].ToString())))
  {
 // delete the Row

    }
 }

myDataSet.Tables[0].AcceptChanges();

Как удалить строку, используя c#?

Ответы [ 2 ]

1 голос
/ 30 марта 2020

Использование 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.
0 голосов
/ 30 марта 2020

Я бы использовал Linq, чтобы дать вам список подходящих строк, а затем удалил бы эти строки из DataTable:

var rows = myDataSet.Tables[0].AsEnumerable()
                .Where(r => (string.IsNullOrEmpty(r[0].ToString())) 
                   && (string.IsNullOrEmpty(r[1].ToString())) 
                   && (string.IsNullOrEmpty(r[2].ToString())) 
                   && (string.IsNullOrEmpty(r[3].ToString())))
                .ToList();
            foreach(DataRow row in rows)
            {
                myDataSet.Tables[0].Rows.Remove(row);
            }

Не забудьте добавить ссылку на System.Linq, если у вас ее нет .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...