Pergunta

Portanto, meu objetivo é que, uma vez que um usuário clique no item da lista suspensa, a célula ligará automaticamente para endedit (). O mais estranho é que o código abaixo funcionará nos 2nd-N Comboboxescells, que eu desistirei e selecionará valores, mas nunca o primeiro. Há algo que estou perdendo aqui ??

        protected override void OnCellClick(DataGridViewCellEventArgs e)
        {
            base.OnCellClick(e);

            DataGridViewComboBoxEditingControl control = this.EditingControl as DataGridViewComboBoxEditingControl;
            if (control != null)
            {
                   control.DropDownClosed += new EventHandler(control_DropDownClosed);
            }
        }

            void control_DropDownClosed(object sender, EventArgs e)
            {
                this.EndEdit();
                DataGridViewComboBoxEditingControl control = sender as DataGridViewComboBoxEditingControl;
                control.DropDownClosed -= new EventHandler(control_DropDownClosed);
            }

Deve acrescentar aqui que estou herdando do DataGridView se isso não for óbvio

Foi útil?

Solução

Quando algo como "O mais estranho é que o código abaixo funcionará nos 2nd-n Comboxescells de que eu desistirei e selecionará valores, mas nunca o primeiro"Acontece, geralmente porque o evento acontece antes que algo que você precisa seja feito.

Enquanto o seu exemplo, eu diria que a primeira vez, quando você clicar,

DataGridViewComboBoxEditingControl control = this.EditingControl as DataGridViewComboBoxEditingControl;

da-te control == null.

Talvez você deva mudar o evento escolhido para fazer suas coisas de Click para SelectedIndexChanged ou SelectedValueChanged ?

Espero que isto ajude,

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top