在Vb.Net中使用DataTable.Select()方法时出错

时间:2011-12-06 06:56:28

标签: asp.net sql visual-studio-2008 .net-3.5 datatable

我根据某些条件使用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”)))'

此处没有异常或发生错误。因此,如果我选择您的解决方案,我需要通过在我使用过滤器方法的解决方案中的所有位置添加'来更改过滤器表达式。

2 个答案:

答案 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