2011-12-06 35 views
0

()方法,我用DataTable.Select()方法基於某些條件過濾器。錯誤而使用DataTable.Select在Vb.Net

dtRows = m_dtTable.Select(String.Format("IdentifierID={0}", dtRow 
("QuestionID").ToString)) 

我用類似的方法在不同的地方對數據進行排序。但只有一個地方我得到錯誤。 任何能幫助我找到爲什麼這個例外是發生?也幫助我知道爲什麼在其他地方沒有例外?數據表的值由存儲過程填充。

Min (2) must be less than or equal to max (-1) in a Range object.是例外,我得到。

編輯 - 第一次的答案後 - 每次

我越來越不例外,但只有一些時間,我不能識別的情況。 :(

增加了 - 第一次的答案後 -

感謝您的解決方案:)

注:m_DependantQuestionsDataTable和m_dtTable是由它的模式相同。

colIdentifierID.DataType = Type.GetType("System.String") colIdentifierID.ColumnName = "IdentifierID"

這是特定列的類型。還有另一列也是類似的類型,當我用類似的方法使用它時沒有發生錯誤。

colQuestionID.DataType = Type.GetType("System.String") colQuestionID.ColumnName = "QuestionID"是列,我使用這樣的。 'Dim strFilterExpression As String =「questionID = {0}」m_DependantQuestionsDataTable.Select(String.Format(strFilterExpression,dRow(「QuestionID」)))'

這裏沒有發生任何異常或錯誤。所以,如果我選擇你的解決方案,我需要的,我現在用的過濾方法在我的解決方案在所有的地方加入'更換過濾器的表達。

+0

有一個y row in dtRow – Nighil

+0

是的,有記錄 – Coderr

回答

2

不指定你篩選的列的數據類型,如果它是一個字符串,那麼你就需要在你的過濾器表達式周圍添加參數單引號:

dtRows = m_dtTable.Select(String.Format("IdentifierID='{0}'", dtRow("QuestionID").ToString())) 
+0

'colIdentifierID.DataType = Type.GetType(「System.String」) colIdentifierID.ColumnName =「IdentifierID」' – Coderr

+0

@ Jay謝謝您的修復。你會檢查編輯的問題嗎? – Coderr

+0

@Harie如果列的基礎數據類型爲字符串,我總是使用單引號;如果你不這樣做,我會感到有點驚訝。 DataTable表達式計算器有可能讓您通過沒有單引號的方式獲得,但最好是明確地說明這樣的事情。 –

0

或者如果要排序通過DGV +過濾器,而不需要重新填充DT和DGV,你可以使用的.sort和.RowFilter的數據視圖的

http://msdn.microsoft.com/en-ca/library/system.data.dataview.rowfilter.aspx

Private _DS As New DataSet 
Private _DT As New DataTable 
Private _DV As New DataView 
Private _DGV As New DataGridView 
Private _isFiltering As Boolean = False 

Private Sub filterView() 
    If _isFiltering Then Return 
    _isFiltering = True 
    Dim _SF As String = "price ASC" 
    'Dim _RF As String = tableStructure.Columns(0).Name & " < 20" ' just an example 
    Dim _RF As String = "price < 20" 
    _DGV.ClearSelection() 
    _DT.DefaultView.Sort = _SF 
    _DT.DefaultView.RowFilter = _RF 
    _isFiltering = False 
End Sub