Почему отображение раскрывающегося списка требует два щелчка в DataGridView?
-
13-10-2019 - |
Вопрос
Я использую раскрывающий список в 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
Блоки в вашем коде! Исправить это.