2010-06-06 15 views
0

我需要在DataView中做一個測試來檢查至少有一行是否包含一個空值的單元。你認爲做這件事的最好方法是什麼?檢查數據視圖中至少有一行是否包含空值的有效方法?

在此先感謝。

+0

最好的辦法是在數據庫中執行檢查......並讓它執行它擅長的功能。 – 2010-06-06 12:20:00

+0

@Mitch:我們不知道DataView來自哪裏。 – SLaks 2010-06-06 12:21:43

+0

基本上我有一些複選框綁定到這個DataView和我有一個「isDefault」列(布爾)來說,如果每個複選框必須被檢查或沒有關於它的isDefault值。我的問題是,如果DataView的值爲Null,我想自動將複選框的值設置爲false,否則如果嘗試將Null綁定到複選框,我會得到一個錯誤。 – benj007 2010-06-06 12:37:14

回答

1

沒有測量,我猜測答案是一個嵌套循環。

+0

類似於: foreach(DataRow dr在TheDataView中) {if dr [「Column」] == Null ...}? – benj007 2010-06-06 12:23:00

+0

然後遍歷每一列。 – SLaks 2010-06-06 13:42:31

2

正如SLaks提到的那樣,您將需要遍歷每行中的行和項目。你可以這樣使用LINQ做到這一點:

bool hasNull = view.Table.Rows.OfType<DataRow>() 
    .Any(r => r.ItemArray.Any(o => o == DBNull.Value)); 

或者你可以寫在循環自己,是這樣的:雖然LINQ的版本是一個很大的緊湊

private bool HasEmptyItem(DataView view) 
{ 
    foreach (DataRow row in view.Table.Rows) 
    { 
     foreach (DataColumn col in view.Table.Columns) 
     { 
      if (row[col] == DBNull.Value) 
       return true; 
     } 
    } 
    return false; 
} 

,它仍然在持續循環行和列,所以請選擇。

更新: 根據意見,以下是根據你想做什麼更好的樣品。這只是循環遍歷行,並檢查給列是否爲空(確保使用DBNull.ValueDataTable),如果是這樣,只需將其設置爲false以防止出現問題。只要將IS_DEFAULT_COL更改爲正確的索引即可。

const int IS_DEFAULT_COL = 1; 
foreach (DataRow row in view.Table.Rows) 
{ 
    if (row[IS_DEFAULT_COL] == DBNull.Value) 
     row[IS_DEFAULT_COL] = false; 
} 
+0

非常感謝wsanville! 我正在考慮這個常規循環,但是您的LinQ解決方案似乎更加有趣和緊湊:) 您能否告訴我您對我的初始問題以及我在上面最後一條評論中解釋過的問題的看法?因爲也許我可以直接在綁定過程中解決這個問題,而不是試圖測試數據視圖。 – benj007 2010-06-06 12:42:53

+0

謝謝, 我記得我嘗試了一些在我的綁定的東西說「如果它是空的,然後用false綁定」,有一個選項,當你做checkbox.databindings.add(........)我想想,但這似乎沒有工作,我仍然有一個錯誤。 – benj007 2010-06-06 13:17:28

+0

不要調用'ItemArray';它不必要地分配一個數組。 – SLaks 2010-06-06 13:42:50

相關問題