2017-08-22 15 views
1

DataSourceを使用してDataGridViewに利用可能なクレジットカードを記入し、最後にダミーのクレジットカードを追加して新しいクレジットカードを使用します。DataGridViewで行を選択したときにインデックスが範囲外だったC#

private void ListCards() 
    {    
     cards.Add(new CreditCard 
     { 
      Token = "new", 
      LastFour = "New Card" 
     });   
    } 

私は「新しい」行を選択し、次の作品にそれを渡すために行くとき、私はIndex was out of range. Must be non-negative and less than the size of the collection.

private void Ok_btn_Click(object sender, EventArgs e) 
    { 
     int selectedRowIndex = CreditCards_grdvw.SelectedCells[0].RowIndex; 
     tkn = Convert.ToString(CreditCards_grdvw.SelectedRows[selectedRowIndex].Cells[0]); 
     this.DialogResult = DialogResult.OK; 
     Close(); 

    } 

を取得し、私は行数がSelectedRowIndexよりも大きいことを保証するためにチェックしましたが、私は依然としてエラーが発生しています。また、最初にcardsにレコードが1つあり、ダミーの「新しい」レコードを追加すると、Visual Studioの直下のウィンドウ?CreditCards_grdvw.SelectedRows[0].Cells[0].Valueを使用して、「新しい」バックに戻ります。ダミーカードではなく、実際のカードをインデックス0にする必要があります。

私は同じ機能を得るために別のボタンを追加することができたが、私はそうしたくないと思っています。どんな助けでも大歓迎です。

+1

セルを「選択」してもよろしいですか? – ainwood

答えて

0

これが問題ですか?

selectedRowIndexを取得するには、SelectedCellsコレクションの最初のオブジェクトを参照します。ただし、次の行では、SelectedRowsコレクションを参照しようとします。これで修正されますか?

private void Ok_btn_Click(object sender, EventArgs e) 
{ 
    int selectedRowIndex = CreditCards_grdvw.SelectedCells[0].RowIndex; 
    tkn = Convert.ToString(CreditCards_grdvw.Rows[selectedRowIndex].Cells[0]); //Reference the Rows[] collection, not SelectedRows[]. 
    this.DialogResult = DialogResult.OK; 
    Close(); 

} 
+0

ありがとうございました。なぜ私はそれを理解できなかったのか分かりません。 –

関連する問題