简体   繁体   中英

Error while using DataTable.Select() Method in Vb.Net

I am using DataTable.Select() method to filer based on some conditions.

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

I used the similar way to sort the data in different places . But only one place i am getting error. Can any help me to find why this exception is occurs? Also help me to know why there is no exception in other places ? The values of datatable is filled from a stored procedure.

Min (2) must be less than or equal to max (-1) in a Range object. is exception I am getting.

EDIT -- After the First Answer --

I am getting exception not every time, but only some time that I cannot identify the scenario. :(

ADDED -- After the First Answer --

Thanks for the solution. :)

Note : m_DependantQuestionsDataTable and m_dtTable are same by its schema.

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

This is the type of particular column. There is also another column which is also similar type and there is no error occurs when I use it with the similar method.

colQuestionID.DataType = Type.GetType("System.String") colQuestionID.ColumnName = "QuestionID" is the column and I am using like this. ' Dim strFilterExpression As String = "questionID={0}" m_DependantQuestionsDataTable.Select(String.Format(strFilterExpression, dRow("QuestionID")))'

Here there is no exception or error is occurring . So if I am choosing your solution I need to change the Filter Expression by adding ' in all place in my solution where I am using Filter Method.

您没有指定要过滤的列的数据类型,如果它是一个字符串,那么您需要在过滤器表达式中的参数周围添加单引号:

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

alternatively, if you want to sort+ filter via the DGV, without need to repopulate the DT and DGV, you can use .Sort and .RowFilter of the DataView

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

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM