2013-07-04 303 views
2

我有一個包含7800行的DataTable,每行包含3列,如果第二列爲空,可能會有Null值我刪除整行問題是,即使當我刪除數據表仍然包含行號的願望相同量的行是7800從dataTable中刪除包含空值的行

的代碼:

string query = "Select STORE_NAME, STORE_LATITUDE, STORE_LONGTITUDE " 
    +" From stores inner join contact_information on stores.STORE_ID=contact_information.CONTACT_ID " 
    +" where CONTACT_TYPE_ID=1 " 
     +" AND CONTACT_COUNTRY_ID="+Country 
     +" AND CONTACT_CASA_ID="+Casa 
      +" AND CONTACT_TOWN_ID="+Town; 
    DataTable dt = new SQLHelper(SQLHelper.ConnectionStrings.KernelConnectionString).getQueryResult(query); 
    dt = removeNullColumnFromDataTable(dt); 

功能:

public static DataTable removeNullColumnFromDataTable(DataTable dt) 
    { 
    for (int i = dt.Rows.Count - 1; i >= 0; i--) 
     { 
     if (dt.Rows[i][1].ToString() == null) 
      dt.Rows[i].Delete(); 
     } 
    return dt; 
    } 
+0

'dt.Rows [i] [1]。 ToString()==「」)'不起作用。 「」與null不同。 – Tim

+0

我把它改爲null但它仍然相同 – Sora

回答

6
public static void RemoveNullColumnFromDataTable(DataTable dt) 
{ 
    for (int i = dt.Rows.Count - 1; i >= 0; i--) 
    { 
     if (dt.Rows[i][1] == DBNull.Value) 
      dt.Rows[i].Delete(); 
    } 
    dt.AcceptChanges(); 
} 
+0

它刪除行但DataTable計數仍然相同 – Sora

+0

是的,我弄清楚了:)謝謝你 – Sora

+0

我添加了'dt.AcceptChanges();':) –

1

你可以改變第一行本(用於SQL Server):

string query = "Select STORE_NAME, isnull(STORE_LATITUDE,'') as STORE_LATITUDE, STORE_LONGTITUDE " 

,只是檢查空字符串(如果字段類型爲CHAR,VARCHAR ...等)

dt.Rows[i][1].ToString() == "" 

或使用isnull(STORE_LATITUDE,0)並檢查零dt.Rows [i] [1] .ToString()==「0」如果字段類型是數字

+0

sql服務器更改零值爲零,所以我有點卡住了相同的問題 – Sora

+0

dt.Rows [i] [1] .ToString()==「」 – sqladmin

+0

等待 - 什麼類型的STORE_LATITUDE字段? – sqladmin