2016-11-11 34 views
0

私のソフトウェアに間違いがあります。私のフォームには、MS_accessデータベースに接続されたDataGridViewが含まれています。Datagridview SelectedRowsインデックスエラー|アクセスとVB.NET

私はDataGridViewの行をクリックすると、私はこのエラーを取得:

Index was out of range. Must be non-negative and less than the size of the collection.
Parameter name: index

は私のコード:

Try 
    If (DataGridView1.Rows.Count <= 0) Then Return 
    FlatTextBox1.Text = String.Empty 
    FlatTextBox2.Text = String.Empty 
    FlatTextBox3.Text = String.Empty 
    RichTextBox1.Text = String.Empty 
    Dim indx As String = DataGridView1(1, DataGridView1.SelectedRows(0).Index).Value.ToString 
    Dim dt As DataTable = New DBConnect().selectdata(String.Format("SELECT famille3.Article, famille3.quantité, famille3.prixch, famille3.prixvn, famille3.dateex, famille3.description FROM famille3 where famille3.ID = {0} ", indx)) 
    If dt.Rows.Count > 0 Then 
     FlatTextBox1.Text = dt.Rows(0)(0).ToString 
     FlatTextBox2.Text = dt.Rows(0)(1).ToString 
     FlatTextBox3.Text = dt.Rows(0)(2).ToString 
     FlatTextBox9.Text = dt.Rows(0)(3).ToString 
     FlatTextBox10.Text = (dt.Rows(0)(3).ToString - dt.Rows(0)(2).ToString) * dt.Rows(0)(1).ToString 
     FlatTextBox11.Text = dt.Rows(0)(4).ToString 
     RichTextBox1.Text = dt.Rows(0)(5).ToString 
    End If 
    dt.Dispose() 
    dt = Nothing 
Catch ex As Exception 
    MessageBox.Show(ex.Message) 
End Try 

私は、スタックが、ここでどのように

Dim indx As String = DataGridView1(1, DataGridView1.SelectedRows(0).Index).Value.ToString 

だと思います私はそれを解決することはできますか?あなたがタイプDataGridViewCellEventArgsのパラメータを受信するDataGridViewのCellClickイベントで

+0

あなたが持っているどのように多くの列? – Imad

+0

私は3つの列を持っています(1目に見えないものと2目に見えるもの) –

+0

インデックスゼロを使ってSelectedRowsを持たないと、このエラーが発生します。 – Steve

答えて

1

。このパラメータには、クリックされたセルのColumnIndexRowIndexが含まれます。だから、クリックされた行の1列の値を取得することは、私が最初の列の値にConvert.ToInt32が適用されている注意事項

Sub DataGridView1_CellClick(sender as Object,e As DataGridViewCellEventArgs) 
    Dim indx As Integer = Convert.ToInt32(DataGridView1(1, e.RowIndex).Value) 
    ..... 

として本当に簡単です。私はあなたのレコードを見つけるための数値の主キーだと考えています。 VB.NETでは、文字列を数値(VB6互換)に自由に変換することができますが、一般的にこれは悪い習慣とみなされます。プロジェクトのプロパティを確認し、代わりに Option Strict Onと設定すると、コードを改善する必要があります。私は与えることを感じる

もう一つのアドバイスは、そのようにクエリを記述しないことです。このメソッドは、SQL文字列の連結と呼ばれ、それがSql Injectionのルートです。 (現在のケースでは大きなリスクがありませんが、より良い良い習慣を取り、常にパラメータ化クエリを使用する)

+0

これは私にそれを打つ – djv

+0

ありがとう!私の問題を解決してくれてありがとうegain –

+0

@steve次の行 '...どこfamille3.ID = {0}"、indx )) 'int 32のどちらかの方法でかなり混乱します。 – djv

関連する問題