2014-10-29 50 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,只要有可能就可以讓代碼可讀。 – 2014-10-29 11:06:07

+0

@ user3427079沒錯,我試圖在這裏。爲DataSet設置dSet,併爲Con連接。 – Wolfish 2014-10-29 12:34:39

回答

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 += ""; 
        } 

} 

編輯(因爲我不能因爲某些原因發表評論) 好的,我不確定你想要什麼,但是我沒有看到在任何地方設置了notNull vararaible,所以我不知道你是如何使用它的。根據您提出的問題的目標,這將按照您的預期工作:

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

我在這裏遇到的唯一問題是,這也將落在其中一列(或者說,單元格)爲空。倒過來說,我的意思是該方法將跳過整個行,而不僅僅是該單元格。 – Wolfish 2014-10-29 12:35:41

+0

是的,這將需要另一個循環,你檢查每個單元格的每一行是否爲空,如果是的話,放入一個EMPTY代碼。 – 2014-10-29 13:43:15

相關問題