2011-12-06 18 views
0

私はDataTable.Select()メソッドをいくつかの条件に基づいてファイリングしています。Vb.NetでDataTable.Select()メソッドを使用中にエラーが発生しました

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

私は同様の方法で別の場所でデータを並べ替えました。しかし、1つの場所だけがエラーになります。 この例外が発生する理由を知る手助けがありますか?また、他の場所に例外がない理由を知ってもらえますか?データテーブルの値は、ストアドプロシージャから入力します。

Min (2) must be less than or equal to max (-1) in a Range object.は例外です。

EDIT - 最初の答えの後 -

私は例外ではありませんたびに、私はシナリオを識別することができないということだけでいくつかの時間を取得しています。 :(

追加 - 最初の答えの後 - ソリューションのための

感謝:)

注: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

の.Sortと.RowFilterを使用することができますがありdtRowのy行 – 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を再増殖することなく、あなたは、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 
関連する問題