Почему отображение раскрывающегося списка требует два щелчка в DataGridView?

StackOverflow https://stackoverflow.com/questions/4529809

Вопрос

Я использую раскрывающий список в DataGridView Управление, но проблема в том, что в первый раз я нажимаю на раскрывающую очередь, требуется два щелчка, чтобы сбросить список и показать, но впоследствии он работает нормально.

 private void ViewActiveJobs_CellClick(object sender, DataGridViewCellEventArgs e)
        {
            if (e.RowIndex>=0)
            {
                jobCardId = int.Parse(ViewActiveJobs.Rows[ViewActiveJobs.CurrentCell.RowIndex].Cells["Job Card Number"].Value.ToString());
                RegNo = ViewActiveJobs.Rows[ViewActiveJobs.CurrentCell.RowIndex].Cells["Registeration Number"].Value.ToString();
                SelectedRow = e.RowIndex;                
            }
        }

        private void ViewActiveJobs_EditingControlShowing(object sender, DataGridViewEditingControlShowingEventArgs e)
        {
            try
            {
                ComboBox cbox = (ComboBox)e.Control;
                cbox.SelectedIndexChanged -= new EventHandler(comboBOX_SelectedIndexChanged);
                cbox.SelectedIndexChanged += new EventHandler(comboBOX_SelectedIndexChanged);
            }
            catch(Exception)
            {
            }
        }
        private void comboBOX_SelectedIndexChanged(object sender, EventArgs e)
        {
            ComboBox combo = sender as ComboBox;
            string str = combo.SelectedIndex.ToString();
           if (combo.SelectedIndex ==1)
                pdf = new MakePDF(jobCardId,RegNo);
           if (combo.SelectedIndex == 2)
           {
               PdfJobCard = new MakePDFJobCard(jobCardId);
           }
            if (combo.SelectedIndex == 3)
           {
               if (MessageBox.Show("Are you Sure you want to Close Job Card ?", "Are you Sure",
                        MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.Yes)
               {
                   cmd = new SqlCommand();
                   cmd.Connection = con;

                   cmd.Parameters.Add("@jCard", SqlDbType.VarChar).Value = jobCardId;
                   cmd.Parameters.Add("@stat", SqlDbType.VarChar).Value = "Closed";
                   cmd.CommandText = "UPDATE JobCard SET status = @stat WHERE Id = @jCard";

                   try
                   {
                       cmd.ExecuteNonQuery();
                       ViewActiveJobs.Visible = false;
                       ViewActiveJobs.AllowUserToAddRows = true;
                       ViewActiveJobs.Rows.RemoveAt(SelectedRow);
                       //ViewActiveJobs.Visible = true;
                   }
                   catch (Exception c)
                   {
                       MessageBox.Show(c.Message);
                   }
               }
           }
        }
Это было полезно?

Решение

Это ожидаемое поведение. Первый щелчок необходим, чтобы установить фокус на поле со комбо. Второй щелчок показывает раскрывающийся список, как только управление сосредоточено.

Это отвечает на ваш вопрос? Или вы чувствуете, что необходимо переопределить поведение по умолчанию? Прежде чем ответить «да», рассмотрим пользователей клавиатуры и тех, кто навигация от ячейки к клеткам в вашем DataGridView Используя клавиши со стрелками.

Если ответ все еще да, посмотрите мой ответ к этому связанному вопросу. По сути, вы должны убедиться, что EditMode имущество вашей DataGridView управление устанавливается на «Editonenterer», а затем практически «нажмите» F4 ключ в EditingControlShowing Обработчик событий сбросит комбо -коробку.


Как в сторону: Вам следует нет иметь пустые Catch Блоки в вашем коде! Исправить это.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top