Как проверить, какая ячейка нажата в datagridview

В первом столбце моего datagridview у меня есть флажки, и я хочу запускать событие каждый раз при изменении статуса флажка. Я думал об использовании события cellcontentclick, отбрасывая объект-отправитель на datagridviewcell и проверяя его индексом столбца. Но я обнаружил, что объект отправителя является объектом datagridview. Итак, как выполнить желаемую операцию?

1
nl ja de
как вы привязывали данные к вашему DataGridView ? bindingSource , DataTable или Unbound data?
добавлено автор spajce, источник
Это Winforms, wpf или Asp.net
добавлено автор Mark Hall, источник

3 ответы

Существует много методов

Один из способов:
Вы можете взять скрытое поле или viewstate на странице, в которой вы можете сохранить идентификатор строки, когда клик произошел с помощью javascript, а затем в коде позади получите это значение скрытого поля.

Other one :
You can use CommandName & CommandArgument and in code behind use datagridview_ItemCommand

1
добавлено

Чтобы изменить значение CheckBoxCell , вы должны использовать это событие CellValueChanged . Отправитель в событиях всегда будет элементом управления, который поднял событие. Чтобы получить дополнительную информацию о том, что вам нужно, посмотрите EventArgs .

Вернуться к обработке CheckBoxCell выполните следующие действия:

private void dgv_CellValueChanged(object sender, DataGridViewCellEventArgs e)
{
     var dgv = sender as DataGridView;
     var check = dgv[e.ColumnIndex, e.RowIndex].Value as bool?;

     if (check.HasValue)
     {
         if (check) 
         {
             //checked
         }
         else
         {
             //unchecked
         }
     }
}

Надеюсь это поможет :)

1
добавлено
private void dgvStandingOrder_CellContentClick(object sender, DataGridViewCellEventArgs e)
            {
                if (dgvStandingOrder.Columns[e.ColumnIndex].Name == "IsSelected" && dgvStandingOrder.CurrentCell is DataGridViewCheckBoxCell)
                {
                    bool isChecked = (bool)dgvStandingOrder[e.ColumnIndex, e.RowIndex].EditedFormattedValue;
                    if (isChecked == false)
                    {
                        dgvStandingOrder.Rows[e.RowIndex].Cells["Status"].Value = "";
                    }
                    dgvStandingOrder.EndEdit();
                }
            }

            private void dgvStandingOrder_CellEndEdit(object sender, DataGridViewCellEventArgs e)
            {

                dgvStandingOrder.CommitEdit(DataGridViewDataErrorContexts.Commit);
            }

            private void dgvStandingOrder_CurrentCellDirtyStateChanged(object sender, EventArgs e)
            {
                if (dgvStandingOrder.CurrentCell is DataGridViewCheckBoxCell)
                {
                    dgvStandingOrder.CommitEdit(DataGridViewDataErrorContexts.Commit);
                }   
            }
0
добавлено
Microsoft Stack Jobs
Microsoft Stack Jobs
1 788 участник(ов)

Work & freelance only Microsoft Stack. Feed https://t.me/Microsoftstackjobsfeed Чат про F#: @Fsharp_chat Чат про C#: @CSharpChat Чат про Xamarin: @xamarin_russia Чат общения:@dotnettalks

Microsoft Developer Community Chat
Microsoft Developer Community Chat
584 участник(ов)

Чат для разработчиков и системных администраторов Microsoft Developer Community. __________ Новостной канал: @msdevru __________ Баним за: оскорбления, мат, рекламу, флуд, флейм, спам, NSFW контент, а также большое количество оффтоп тем. @banofbot