2010-11-30 28 views
0

入力にフォーカスを当てて、フォーム内のDataGridViewに追加する各新しい行に編集イベントを発生させようとしています。DataGridViewの新しい行の最初の表示セルを選択します。

これは私がユーザーにこれを達成しようとしているコードです。

Private Sub grd_GoldAdders_RowsAdded(ByVal sender As Object, ByVal e As System.Windows.Forms.DataGridViewRowsAddedEventArgs) Handles grd_GoldAdders.RowsAdded 
     Dim grid As DataGridView = DirectCast(sender, DataGridView) 

     grid.ClearSelection() 

     If grid.Rows(e.RowIndex).Cells("grid_flag").FormattedValue = Constants.[New] Then 

      For Each cell As DataGridViewCell In grid.Rows(e.RowIndex).Cells 
       If Not cell.Visible Then Continue For 
       grid.CurrentCell = cell 
       grid.BeginEdit(False) 
       Exit For 
      Next 

     End If 

    End Sub 

"grid_flag"は、行のカスタム状態を格納するために使用される隠しセルです。

行を追加する前に、これは我々がフォームに表示されるものです。 Before we add a new row.

これは私たちが実際に新しい行を試してみて、追加したときに我々が見たものである。 Row Add button clicked.

お知らせ両方のこと列0,0と新しい行の最初に表示される列が選択されますが、列0,0にはフォーカスがあります。私は0,0を選択したりフォーカスを当てたりしたくない。私はまた、これは私が私の[追加]ボタンをクリックした後のものを見てみたい方法です...行インジケータがあまりにも行0で指していることを、ここで

を参照してください。 Desired outcome from clicking the Add button.

私が間違っているつもりですどこ誰もが知っていますコードは?私はこの1日を解決しようとしている日の大部分を探しました。

答えて

0

代わりのCurrentCellを設定するためにあなたのDataGridViewのRowAddedイベントを使用して、あなたは(あなたの[追加]ボタンのClickイベントに、私は仮定)あなたのDGVに新しいレコードを追加しているところはどこでも、次のコードを追加します。

''# Add the new record to your Data source/DGV. 

For Each row As DataGridViewRow In grd_GoldAdders.Rows 
    If row.Cells("grid_flag").FormattedValue = Constants.[New] Then 
     grd_GoldAdders.CurrentCell = row.Cells("AssySiteColumn") ''# I'm calling the first column in your DGV 'AssySiteColumn'. 
     grd_GoldAdders.BeginEdit(False) 
     Exit For 
    End If 
Next 

このコードはDGV内のすべての行をループし、最初の行の最初のセルをConstants.[New]フラグ値でCurrentCellとして指定します。

+0

グリッド内の最後の行(数値的)が追加された最後の行(時間順)でない場合があるため、行がソートされても機能しません。 – Mike

+0

@Mikeこれは本当です - 私はこのケースを処理するために私の答えを編集しました。必要なことをするための他の方法もありますが、それらを探索するには詳細を提供する必要があります。 –

関連する問題