2009-08-16 8 views
1

私のDataGridViewの現在の行のインデックスを取得します。問題は、現在の行が新しい行の場合、CurrentRowは新しい行ではない最後の行に設定されることです。現在の行であり、現在の行が必ずしも選択されているわけではないという行が選択されているため、選択する行を確認できません。DataGridView CurrentRowは新しい行を除外します

新しい行のインデックスを取得できますが、新しい行が現在の行かどうかをどのように知ることができますか?

+0

こんにちは、 私はあなたが何を意味するかを理解していますが、あなたがそれwhith行うにwhant何をすべきかcurrentRowの使用する必要がありますなぜ私は見ていないいくつかの方法では? よろしくご協力ありがとうございます。 Iordan – IordanTanev

+0

ユーザーがボタンをクリックすると、現在の行のセルに値を入力します。その行が新しい行である場合は、この行を作成し、そのセルに値を入力する必要があります。 – Ruud

答えて

3

Iは、次のコードを介してCellClickイベントにフック:その条件が真である場合、ユーザは新しい行を '選択'

private void uiEntries_CellClick(object sender, DataGridViewCellEventArgs e) 
{ 
    Console.WriteLine(e.RowIndex == uiEntries.NewRowIndex); 
} 

。その情報に基づいて、新しい行が実際にはコレクションに存在しないため、実際に何かを行う前に、実際に新しいレコードを挿入する必要があります(たとえば、..Rows.Add()メソッドを使用)。新しい行を表すためのプレースホルダとしてのみ存在します。

+0

これはうまくいくと思います。私はできるだけ早くそれを試してみます。 – Ruud

+0

解決策には1つの欠陥があります。ユーザーがクリックしないでキーボードを使用して現在のセルを変更すると、これは機能しません。 CurrentCellChangedイベントは機能しますが、これはセルを送信しません。 – Ruud

+0

次に、キーストロークをキャプチャして、「動き」に対応する必要があるかどうかを確認する必要があります。たとえば、最後の行の次の「下向き矢印」の場合は、ユーザーが行を追加しようとしていることを示しています(おそらく?)。その後、上記と同じ手順(新しいレコードの挿入など)を実行できます。 –

0

このプロパティの値は問題を解決できますか?

dataGridView1.CurrentCell.RowIndex

+0

いいえ、同じ問題です、私はすでにそれを試しました。 – Ruud

0

私は、CellEnterイベントを使用して、CurrentCell.RowIndexをフォーム変数に保存します。別のボタンをクリックすると、必要な新しい行インデックスではなく、最後の既存の行インデックスでこのイベントが発生し、フォーカスがそのケースを無視するかどうかをテストします。

これにより、CellClickイベントの場合と同様に、カーソルを新しい行に移動する可能性のあるすべてのキー操作とマウス操作を確認する必要がなくなります。

コードの自動変換VBから:

private int ActualCurrentRowIndex; 

private void DataGridView1_CellEnter(object sender, System.Windows.Forms.DataGridViewCellEventArgs e) 
{ 
    if (DataGridView1.Focused) { 
     ActualCurrentRowIndex = DataGridView1.CurrentCell.RowIndex; 
    } 
} 
関連する問題