Ошибка при использовании метода DataTable.Select () в Vb.Net - PullRequest
0 голосов
/ 06 декабря 2011

Я использую метод DataTable.Select() для подачи в зависимости от некоторых условий.

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

Я использовал аналогичный способ сортировки данных в разных местах. Но только в одном месте я получаю ошибку. Может ли кто-нибудь помочь мне выяснить, почему происходит это исключение? Также помогите мне узнать, почему нет исключения в других местах? Значения datatable заполняются из хранимой процедуры.

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 ]

2 голосов
/ 06 декабря 2011

Вы не указываете тип данных столбца, по которому фильтруете, и если это строка, вам нужно добавить одинарные кавычки вокруг параметра в выражении фильтра:

dtRows = m_dtTable.Select(String.Format("IdentifierID='{0}'", dtRow("QuestionID").ToString()))
0 голосов
/ 25 мая 2014

альтернативно, если вы хотите отсортировать + фильтр через DGV, без необходимости повторного заполнения DT и DGV, вы можете использовать .Sort и .RowFilter объекта 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
...