2013-08-17 4 views
0

У меня следующий DataTable:удалить пустые клетки из DataTable

enter image description here

Как показано на рис, есть некоторые пустые ячейки в этой таблице данных.

Я хочу удалить их и показать только ячейки со значениями.

Я попытался следующий код, но оно не сработало:

For i=0 to dt.Rows.count-1 

For j=0 to dt.Column.count-1 


if dt.rows(i).tostring()="" then 

dt.rows.remove(i) 

end if 

next 

Next 

Этот код не работает. Пожалуйста, помогите мне.

Ответ на C# также может помочь мне.

+0

какой твой язык?? C# или VB.net ?? – AminM

+0

мой lang - vb, но ans with C# также может помочь мне –

+0

, где эта пустая ячейка исходит от ?? как вы заполняете свой стол ??? – AminM

ответ

2

В идеале вы хотите удалить строку, когда ВСЕ ее ячейки пусты. Алгоритм, который вы указали, удалит строку, даже если одна ячейка в ней пуста. Вы должны изменить свой код так:

Сначала удалите пустые строки:

For i = 0 To dt.Rows.Count - 1 
    flag = True 

    For j = 0 To dt.Columns.Count - 1 
     If Not(dt.Rows(i).IsNull(j)) AndAlso dt.Rows(i)(j).ToString() <> "" Then 
      flag = False 
      Exit For 
     End If 
    Next 

    If flag Then dt.Rows(i).Delete() 
Next 

dt.AcceptChanges() 

Теперь удалить пустые столбцы:

For i = 0 To dt.Columns.Count - 1 
    flag = True 

    For j = 0 To dt.Rows.Count - 1 
     If Not(dt.Rows(j).IsNull(i)) AndAlso dt.Rows(j)(i).ToString() <> "" Then 
      flag = False 
      Exit For 
     End If 
    Next 

    If flag Then dt.Columns.RemoveAt(i) 
Next 

dt.AcceptChanges() 
+0

удаляет пустые строки сверху, но не столбцы. –

+0

@FarhanMukadam: Обновлен мой ответ. – dotNET

1

Вы лучше удалить столбцы первой:

dt.Columns.OfType<DataColumn>() 
      .Where(c=>!dt.Rows.OfType<DataRow>() 
          .Any(r=>r.Field<string>(c.ColumnName) != "")) 
      .ToList() 
      .ForEach(c=>dt.Columns.Remove(c)); 

//Remove rows 
dt.Rows.OfType<DataRow>() 
     .Where(r=>!dt.Columns.OfType<DataColumn>() 
          .Any(c=>r.Field<string>(c.ColumnName) != "")) 
     .ToList() 
     .ForEach(r=>dt.Rows.Remove(r)); 
Смежные вопросы