2014-07-24 113 views
0
ds.Tables.Add(dt); 
    return ds; 

在上面的代碼片段中,我如何返回數據集,但排除了所有空行,即空行,在所有列中都使用null或空字符串。從數據集中刪除空白行

+0

對於那個檢查null的所有列應該是字符串類型 –

回答

2

你將不得不做手工之前檢查,然後返回數據表像之下(一個例子),其中傳遞您希望與所有空刪除數據行的表

for (int i = dt.Rows.Count - 1; i >= 0; i--) 
{ 
    if (dt.Rows[i]["col1"] == DBNull.Value && dt.Rows[i]["col2"] == DBNull.Value) 
    { 
     dt.Rows[i].Delete(); 
    } 
} 
dt.AcceptChanges(); 
ds.Tables.Add(dt); 
return ds; 
+0

在這種情況下你假設表只有兩列。如果表有500列,那麼比較每一條if語句會使其更加冗長 –

+0

您也可以不在迭代語句中刪除行 –

+0

首先,您沒有閱讀過答案嗎?我說過一個示例/例子,它會讓OP很好地開始。其次,再次檢查以確認是否可以在迭代中刪除行。 – Rahul

0

這裏有輔助函數列(在這裏我假設所有的字符串都是字符串類型,那麼它將工作) 對於其他類型你可以檢查datacolumn類型,然後可以進行相關性檢查。

public DataTable DeleteEmptyRows(DataTable dt) 
      { 
       DataTable formattedTable = dt.Copy(); 
       List<DataRow> drList = new List<DataRow>(); 
       foreach (DataRow dr in formattedTable.Rows) 
       { 
        int count = dr.ItemArray.Length; 
        int nullcounter=0; 
        for (int i = 0; i < dr.ItemArray.Length; i++) 
        { 
         if (dr.ItemArray[i] == null || string.IsNullOrEmpty(Convert.ToString(dr.ItemArray[i]))) 
         { 
          nullcounter++; 
         } 
        } 

        if (nullcounter == count) 
        { 
         drList.Add(dr); 
        } 
       } 

       for (int i = 0; i < drList.Count; i++) 
       { 
        formattedTable.Rows.Remove(drList[i]); 
       } 
       formattedTable.AcceptChanges(); 

       return formattedTable; 

      } 
2

如果任何人碰到這個文章絆倒,這是我想出了一個解決方案:

// REMOVE ALL EMPTY ROWS 
dt_Parsed.Rows.Cast<DataRow>().ToList().FindAll(Row => 
    { return String.IsNullOrEmpty(String.Join("", Row.ItemArray)); }).ForEach(Row => 
     { dt_Parsed.Rows.Remove(Row); }); 
+0

Or:'dt.Rows.Cast ().ToList()。FindAll(row => string.IsNullOrEmpty(string.Join(「」,row.ItemArray)))。ForEach(row => {dt.Rows (w =>!w.ItemArray.All(a => a is null || string.IsNullOrWhiteSpace(a as);};};' –

+0

or: 'dt.Rows.Cast ().Where string ?? a.ToString())))' – Sharif

0

你可以嘗試循環在DataSet中的數據表用這種方法:

public void Clear_DataTableEmptyRows(DataTable dataTableControl) 
    { 

     for (int i = dataTableControl.Rows.Count - 1; i >= 0; i--) 
     { 
      DataRow currentRow = dataTableControl.Rows[i]; 

      foreach (var colValue in currentRow.ItemArray) 
      { 
       if (!string.IsNullOrEmpty(colValue.ToString())) 
        break; 

       dataTableControl.Rows[i].Delete(); 
       break; 
      } 
     } 

    }