2012-10-22 77 views
10

私はC#でWinFormを使用しています。 DataGridViewの列の1つはDataGridViewLinkColumnです。各列でクリックイベントを処理するにはどうすればよいですか?DataGridViewLinkColumnのクリックイベントを処理する方法

このコードが動作していないよう:例えば

private void UserDataTable_CellContentClick(object sender, DataGridViewCellEventArgs e) 
     { 
      //Code here 
     } 

、私は10行を持っている場合、私はコラム「DataGridViewLinkColumn」に対応し、各行の内容をクリックしたときに、私が扱うことができるはずですそれ。以下に示すように

おかげであなたはCellClickイベントハンドラを使用していないのはなぜ

答えて

10

は、あなたは、e.ColumnIndexを使用することにより、各行の対応する列、e.RowIndexを参照することができます。

private void dataGridView1_CellClick(object sender, 
    DataGridViewCellEventArgs e) 
{ 
    // here you can have column reference by using e.ColumnIndex 
    DataGridViewImageCell cell = (DataGridViewImageCell) 
     dataGridView1.Rows[e.RowIndex].Cells[e.ColumnIndex]; 

    // ... do something ... 
} 
+0

ありがとうございます。私も同様のアプローチを考えていました。しかし、私は 'DataGridViewLinkColumn'をクリックイベントを処理できるかどうか疑問に思っていました。 – Kiran

+0

これは_cell_クリックを処理します。理想的には、私は_link_クリックに添付したいと考えています。 (すべてのリンクセルを反復することなく、どうやって、私はまだ自分自身を見つけようとしているのですか?) – chessofnerd

+2

提案された解決策は_link_クリックで起動し、_cell_Clickで起動しません。これは、セルのクリックイベントが何をすべきかと非常に矛盾しているようですが、ちょっと、私たちの99%がとにかく欲しかったのです! (そして、貧しい人々の魂への私の謝罪は、本当に_cell_クリックでイベントが欲しい...)http://social.msdn.microsoft。com/Forums/windows/en-US/61443472-72b5-4202-a4c0-54cca77e13eb/datagridviewlinkcolumn-how-to-catchイベントクリックイベント – chessofnerd

2

実は、私はキランを信じますCellContentClickを使用して正しいとしました。これを使用すると、セルの空のスペースがクリックされたときに実際のコンテンツがクリックされたときにのみ起動されます。したがって、DataGridViewLinkColumnがある場合、リンクがクリックされると起動します。 DataGridViewTextBoxColumnがある場合は、セル内のテキストをクリックすると起動します。空のスペースがクリックされた場合は起動しません。また、セルが空の場合は、そのセルについてはまったく起動しません。

CellClickイベントは、空のセルも含めて、セルの一部がクリックされるたびに発生します。 @chessofnerd、私はなぜそれがあなたのために働いていないのか分かりませんが、私はこれを確かめるためにテストしました、少なくとも私にとっては、期待どおりに動作しています。

キランは、あなたの最初の場所であなたのCellContentClickがうまくいかなかったのかと思っています。最初に気になるのは、gridviewのCellContentClickプロパティに新しいDataGridViewCellEventHandlerを追加することです。例えば、私のGridViewのがgridVendorInfo題された場合、私は最初に次のコードを使用する必要があります:

this.gridVendorInfo.CellContentClick += new System.Windows.Forms.DataGridViewCellEventHandler(this.gridVendorInfo_CellContentClick); 

そして今、私は実際にそれをキャッチするために私のコードでその正確な方法を持っている必要があるだろう:

private void gridVendorInfo_CellContentClick(object sender, DataGridViewCellEventArgs e) 
     { 
      string vendorName = ""; 
      if (e.ColumnIndex == 0) 
      { 
       vendorName = gridVendorInfo.Rows[e.RowIndex].Cells[e.ColumnIndex].Value.ToString(); 
      } 
     } 

グリッドビューのCellContentClickイベントに新しいイベントハンドラを割り当てずに、まったく同じスペルのメソッドを追加すると、そのイベントハンドラは起動しません。うまくいけば助けて!あなたのフォームに行くだけで、あなたのgridviewをクリックし、プロパティウィンドウのイベントタブに行き、CellContentClickを見つけて、その右側のスペースをダブルクリックするほうがずっと簡単です。 VSはメソッドを作成し、新しいイベントハンドラをグリッドに割り当てるためのすべての作業を行います。次に、メソッドに入り、コードとブレークポイントを追加して発火しているかどうかを確認するだけです。