Как обрабатывать событие clickGridViewLinkColumn

У меня есть WinForm в С#. Один из столбцов DataGridView имеет тип DataGridViewLinkColumn. Как обрабатывать событие click для каждого столбца?

Этот код не работает:

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

Например, если у меня есть 10 строк, всякий раз, когда я нажимаю содержимое каждой строки, соответствующей столбцу "DataGridViewLinkColumn", я должен иметь возможность обрабатывать его.

Спасибо

Ответ 1

Почему бы вам не использовать обработчик событий CellClick, вы можете обратиться к соответствующему столбцу каждой строки, e.RowIndex, используя e.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 ...
}

Ответ 2

Собственно, я считаю, что у Кирана было это правильно, используя CellContentClick. Когда вы используете это, оно не срабатывает при щелчке по пустому ячеек, только когда его фактический контент нажат. Поэтому, если у вас есть DataGridViewLinkColumn, он срабатывает при нажатии ссылки. Если у вас есть DataGridViewTextBoxColumn, он будет срабатывать при нажатии на текст в ячейке. Он не будет срабатывать, если щелкнуть пустое пространство, или если ячейка пуста, она не будет срабатывать вообще для этой ячейки.

Событие CellClick срабатывает всякий раз, когда нажимается какая-либо часть ячейки, включая пустую. @chessofnerd, я не уверен, почему это не сработало для вас, но я проверил это, чтобы убедиться, и, по крайней мере, для меня он работает точно так, как ожидалось.

Киран, это заставляет меня задаться вопросом, почему ваш CellContentClick не работал в первую очередь. Первое, что приходит на ум, - убедиться, что вы добавляете новый DataGridViewCellEventHandler в свойство CellContentClick gridview. Например, если мое 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 новый обработчик событий и добавьте метод точно так же, он не будет срабатывать. Надеюсь, это поможет! Намного проще просто перейти к вашей форме, щелкнуть мышью на gridview, перейти на вкладку "События" в окне "Свойства", найти "CellContentClick" и дважды щелкнуть по области справа от нее. VS выполнит всю работу для вас по созданию метода и назначению нового обработчика событий для gridvew. Затем вам нужно просто войти в метод и добавить код и точку останова, чтобы увидеть, стреляет ли он, и это должно быть.