C # .NET DataGridView включить клик ячейки только для определенных столбцов

У меня мало опыта в C # .NET, и вот что я получил до сих пор:

Я создал DataGridView, который связан с ObjectDataSource (общий список, то есть).

Хотя я могу эффективно использовать событие CellClick объекта DataGridView и соответствующий ему интерфейс делегата (DataGridViewCellEventHandler), чтобы хорошо выполнять свою бизнес-логику, я все еще не доволен общей логикой.

Основным недостатком вышеупомянутого подхода является то, что для некоторых определенных столбцов нет необходимости связывать событие CellClick с ним. Они просто отображают информацию, а не пытаются прослушивать некоторые события CellClick.

Я пытался достичь этого в течение достаточно долгого времени. Я пытался отключить такие столбцы от возможности щелкать, но не повезло ...

Есть ли хороший способ обойти эту проблему?

Я действительно не хочу проверять, каков фактический columnIndex в моих функциях обработчика делегата, и затем действовать соответственно. По сути, если CellClick не будет запущен в первую очередь, то это было бы отличным решением.

Спасибо заранее!

13.10.2009 13:07:48
2 ОТВЕТА
РЕШЕНИЕ

@ Ян, не совсем верно ..... Если ты действительно не хочешь делать фильтрацию, то я не думаю, что это большая сделка, если честно. Вы всегда можете создать свой собственный DataGridView и переопределить событие OnCellClick. Чтобы сделать его еще проще, вы можете установить столбцы, для которых вы не хотите вызывать событие, во время разработки быть ReadOnly и проверить это условие перед вызовом события.

Пример:

public class MyDataGridView : DataGridView
{
     public MyDataGridView()
     {
     }

     protected override void OnCellClick(DataGridViewCellEventArgs e)
     {
          if (!Columns[e.ColumnIndex].ReadOnly)
          {
               base.OnCellClick(e);
          }
     }
}
4
13.10.2009 14:11:37
Большое спасибо, Джеймс! Это решит мою проблему чистым и эффективным способом, любите это!
Michael Mao 13.10.2009 23:20:39

Я действительно не хочу проверять, каков фактический columnIndex в моих функциях обработчика делегата, и затем действовать соответственно.

К сожалению, у вас нет выбора, так как DataGridViewон не выставляет события на своих DataGridViewColumnобъектах. Почему это поведение проблематично для вас?

0
13.10.2009 13:18:31
Это верно, я не могу сделать так, чтобы ячейки в конкретном DataGridViewColumn не отвечали на события CellClick ... Бизнес-логика фокусируется на определенных ячейках в определенных столбцах, я чувствую, что неэффективно проверять и отфильтровывать те "нерелевантные" события CellClick, вызванные CellClicks из других мест. Скажем, у меня есть столбцы A, B и C. Меня интересуют только столбцы B и C, я хочу игнорировать события CellClick, запускаемые из ячеек столбца A. То , что я делаю сейчас , прежде чем работать на что - то серьезное, я проверить , был ли это событие приходит из столбца A. Если это так, я просто игнорировать его, что я чувствую себя не может быть хорошо ...
Michael Mao 13.10.2009 13:24:27