C# 为什么显示下拉列表需要在DataGridView中单击两次?

C# 为什么显示下拉列表需要在DataGridView中单击两次?,c#,.net,winforms,datagridview,datagridviewcombobox,C#,.net,Winforms,Datagridview,Datagridviewcombobox,我在DataGridView控件中使用了一个下拉列表,但问题是,我第一次单击下拉列表时,需要两次单击才能下拉列表并显示,但之后效果很好 private void ViewActiveJobs_CellClick(object sender, DataGridViewCellEventArgs e) { if (e.RowIndex>=0) { jobCardId = int.Parse(Vie

我在
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);
                   }
               }
           }
        }

这是预期的行为。需要第一次单击来设置组合框的焦点。控件具有焦点后,第二次单击将显示下拉列表

这回答了你的问题吗?或者您是否觉得有必要覆盖默认行为?在回答“是”之前,请考虑键盘用户和使用箭头键在<代码> DATAGIDVIEW中从单元格到单元格的导航。

如果答案仍然是肯定的,请查看此相关问题。本质上,您需要确保将
DataGridView
控件的属性设置为“editonener”,然后实际上“按”事件处理程序中的F4键以下拉组合框



作为旁白:您的代码中不应该有空的
Catch
块!修复此问题。

这是预期的行为。第一次单击是将焦点设置到组合框所必需的。控件具有焦点后,第二次单击将显示下拉列表

这回答了你的问题吗?或者您是否觉得有必要覆盖默认行为?在回答“是”之前,请考虑键盘用户和使用箭头键在<代码> DATAGIDVIEW中从单元格到单元格的导航。

如果答案仍然是肯定的,请查看此相关问题。本质上,您需要确保将
DataGridView
控件的属性设置为“editonener”,然后实际上“按”事件处理程序中的F4键以下拉组合框


作为旁白:您的代码中不应该有空的
Catch
块!解决这个问题