2014-10-29 3 views
0

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

Потому что мне нужен отдельный вывод строки для каждой строки (количество строк может меняться, количество столбцов является константой (3)), мне нужно адресовать каждую отдельную ячейку, чтобы рассказать о методе, что делать если ячейка окажется пустой. Первоначально я попробовал следующее:

набор данных: con.dSet лист <>: Офицеры

bool notNull(var cell) 
{ 
    if (cell != null) 
    { 
     return true; 
    } 
    else 
    { 
     return false; 
    } 
} 

void hereAreAllThePeople() 
{ 
    if (con.dSet != null) 
    { 
     foreach (DataRow row in dSet.Tables[0].Rows) 
     { 
      string str = string.Empty; 
      foreach (DataColumn col in row) 
      { 
       if (notNull) 
       { 
        str += col.ToString(); 
       } 
       else if (!notNull) 
       { 
        str += ""; 
       } 
      } 
      Officers.Add(str); 
     } 
    } 
} 

Его некрасиво, и он падает, потому что row не перечислим. Как мне это понять?

+0

Используйте классический цикл for вместо foreach? Вы также должны избегать двусмысленных имен, таких как dSet и con, если это возможно, чтобы прочитать код другим. –

+0

@ user3427079 Правда, я пытался это сделать здесь. dSet для DataSet и con для подключения. – Wolfish

ответ

0

Да, это довольно manky код, но я полагаю, вы могли бы сделать это:

foreach (DataColumn col in dSet.Tables[0].Columns) 
      { 
       if (notNull) 
       { 
        str += row[col].ToString(); 
       } 
       else if (!notNull) 
       { 
        str += ""; 
       } 
      } 

, зная вас есть три поля,

for (int i = 0; i <3; i++) 
{ 
if (notNull) 
        { 
         str += row[i].ToString(); 
        } 
        else if (!notNull) 
        { 
         str += ""; 
        } 

} 

Edited (потому что я не могу комментировать по какой-то причине) ОК, я не уверен, что вы хотите от этого, но я не вижу, что noNull varaible установлен нигде, поэтому не знаю, как вы его используете. Основываясь на заявленной цели вашего вопроса, это будет работать, как вы ожидаете:

void hereAreAllThePeople() 
{ 
    if (con.dSet != null) 
    { 
     foreach (DataRow row in dSet.Tables[0].Rows) 
    { 
      Officers.Add(string.Join("", row.ItemArray.Select(p => (p == null) ? "": p.ToString()).ToArray())); 
     } 
     } 
    } 
+0

Единственная проблема, которую я имею здесь, это то, что это также упадет и на один из столбцов (точнее, на ячейки) будет null. К падению я имею в виду, что метод будет пропускать всю строку, а не только эту ячейку. – Wolfish

+0

Yup, для этого потребуется еще один цикл, в котором вы проверяете каждую ячейку для каждой строки, является ли она пустой или нет, и введите какой-то код EMPTY, если это так. –

Смежные вопросы