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

Я использую раскрывающийся список в элементе управления 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);
                   }
               }
           }
        }

1 Ответ

4 голосов
/ 25 декабря 2010

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

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

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


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

...