15

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

このコードは機能していないようです:

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

たとえば、10 行ある場合、列 " DataGridViewLinkColumn" に対応する各行のコンテンツをクリックするたびに、それを処理できるはずです。

ありがとう

4

2 に答える 2

12

以下に示すように、を使用して、CellClick各行の対応する列を参照できます。e.RowIndexe.ColumnIndex

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 ...
}
于 2012-10-22T12:26:31.453 に答える
6

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

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

CellContentClickキラン、そもそもなぜあなたが働いていなかったのだろうと思います。最初に頭に浮かぶのはDataGridViewCellEventHandler、グリッドビューの CellContentClick プロパティに新しいものを追加していることを確認することです。たとえば、グリッドビューのタイトルが 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 イベントに新しいイベント ハンドラーを割り当てず、まったく同じスペルのメソッドを追加しないと、起動しません。うまくいけば、それは役に立ちます!フォームに移動し、グリッドビューをクリックして、[プロパティ] ウィンドウの [イベント] タブに移動し、CellContentClick を見つけて、その右側のスペースをダブルクリックする方がはるかに簡単です。VS は、メソッドを作成し、新しいイベント ハンドラーを gridvew に割り当てるすべての作業を行います。次に、メソッドに移動し、いくつかのコードとブレークポイントを追加して、メソッドが起動しているかどうかを確認する必要があります。

于 2016-02-24T16:52:35.400 に答える