为啥显示下拉列表需要在 DataGridView 中单击两次?
Posted
技术标签:
【中文标题】为啥显示下拉列表需要在 DataGridView 中单击两次?【英文标题】:Why does showing the drop-down list require two clicks in a DataGridView?为什么显示下拉列表需要在 DataGridView 中单击两次? 【发布时间】:2010-12-25 08:58:58 【问题描述】:我在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】:这是预期的行为。第一次点击是设置焦点到组合框所必需的。一旦控件获得焦点,第二次单击将显示下拉列表。
这是否回答了您的问题?还是您觉得有必要覆盖默认行为?在回答“是”之前,请考虑键盘用户以及使用箭头键在 DataGridView
中逐个单元格导航的用户。
如果答案仍然是肯定的,请参阅my answer 这个相关问题。本质上,您需要确保将DataGridView
控件的EditMode
property 设置为“EditOnEnter”,然后虚拟地“按下”EditingControlShowing
事件处理程序中的 F4 键以删除向下组合框。
顺便说一句:你应该不在你的代码中有空的Catch
块!修复它。
【讨论】:
以上是关于为啥显示下拉列表需要在 DataGridView 中单击两次?的主要内容,如果未能解决你的问题,请参考以下文章