2011-12-06 2 views
0

Я использую метод DataTable.Select() для фильтрации на основе некоторых условий.Ошибка при использовании метода DataTable.Select() в Vb.Net

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. исключение я получаю.

EDIT - После того, как первый ответ -

Я получаю исключение не каждый раз, но только какое-то время, что я не могу идентифицировать сценарий. :(

ADDED - После того, как первый ответ -

Спасибо за решение :)

. Примечание: 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 Если основным типом данных столбца является String, я всегда буду использовать одиночные кавычки; Я немного удивлен, что это сработает, если вы не сделаете этого. Возможно, что оценщик выражения DataTable позволит вам обойтись без одиночных кавычек, но всегда лучше быть явным с такими вещами. –

0

альтернативно , если вы хотите отсортировать + фильтр через 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 
Смежные вопросы