我根据某些条件使用DataTable.Select()
方法来处理文件。
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 :(得分:2)
您没有指定要过滤的列的数据类型,如果它是一个字符串,那么您需要在过滤器表达式中的参数周围添加单引号:
dtRows = m_dtTable.Select(String.Format("IdentifierID='{0}'", dtRow("QuestionID").ToString()))
答案 1 :(得分:0)
或者,如果你想通过DGV排序+过滤,而不需要重新填充DT和DGV,你可以使用DataView的.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