2016-03-27 12 views
0

私はwinformにDataGridView(DGV)コントロールを持っています。 DGVには4つの列があります。最初の2列はCombobox型で、残りの2列はTextbox型です。任意のセルでEnterキーを押すと、次のセルに移動します。最後のセルがEnterキーを押している間に新しい行が作成され、フォーカスは、2番目の行の最初の列に移動します。そして、私はそれが常にそのように動作するようにしたい。私の問題は、 'Enable Editing' = trueを設定すると始まります。最初の列、不要な新規行が作成されます。この時点で新しい行を作成する必要はありません。これを避ける方法をアドバイスしてください。DataGridViewで不必要な行の作成を中止します。

private void dataGridView1_KeyDown(object sender, KeyEventArgs e) 
{ 
    if (e.KeyData == Keys.Enter) 
    { 
     int col = dataGridView1.CurrentCell.ColumnIndex; 
     int row = dataGridView1.CurrentCell.RowIndex; 

     if (col < dataGridView1.ColumnCount - 1) 
     { 
      col++; 
     } 
     else 
     { 
      col = 0; 
      row++; 
     } 

     if (row == dataGridView1.RowCount) 
      dataGridView1.Rows.Add(); 

     dataGridView1.CurrentCell = dataGridView1[col, row]; 
     e.Handled = true; 
    } 
} 
+0

_「最初の列のコンボボックスから項目を選択すると、不要な新しい行が作成されます。」_新しい行を作成しているコードを投稿した関数はありますか?その場合は、ブレークポイントを使用して呼び出しスタックをチェックして、何がトリガーされているのかを確認します。 –

+0

実際にはそうではありません。上のコードは、Enterキーを押すと列から列にカーソルを移動し、最後の列は有効な新しい行を作成します –

+0

はい、新しい行が作成されます。したがって、新しい行を作成していない場合は、別の場所を探す必要があります。 –

答えて

2

DataGridViewコントロールで、AllowUserToAddRowsプロパティをFalseに設定します。これは、独自のカスタムイベントモデルを使用してプログラムで行を追加することを止めません。これは単に問題が発生している可能性のある自動生成行を無効にします。

+0

私はプロパティウィンドウで上記のプロパティを見ることができません。 :( –

+0

申し訳ございません、このプロパティはAllowUserToAddRows ... https://msdn.microsoft.com/en-us/library/system.windows.forms.datagridview.allowusertoaddrows%28v=vs.110%29.aspx – Jace

+0

I私の答えを更新しました – Jace

関連する問題