Winform的DataGridView中,下拉框点两下才能显示 小弟是Winform新手,在开发过程中发现DataGridView中,下拉框点两下才能显示下拉框的内容,有办法实现直接一次click就能显示下拉框的内容吗?不知道表达是否清楚! 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 改事件MouseClick为MouseDoubleClick呢?就是把单击相应事件改为双击相应 DataGridView属性 EditMode 为 EditOnEnter EditingControlShowing += new DataGridViewEditingControlShowingEventHandler(dgv_EditingControlShowing); 你是在DataGridView中加入了ComBoBox下拉列表吗? DataGridView属性 EditMode 为 EditOnEnter后是初步达到效果。那想请教EditingControlShowing += new DataGridViewEditingControlShowingEventHandler(dgv_EditingControlShowing);这句话是干嘛用的,dgv_EditingControlShowing方法里干什么事呢?现在如果点第一行的下拉框后,紧接着点第二行的下拉框,第一次不会显示(把第一行的下拉框收起来),然后再点一次才有效 我觉得你是用了ComboBox控件你尝试把现在的ComboBox控件改为DataGridViewComboBoxColumnDataGridViewComboBoxColumn 就是DataGridView中的ComboBox列 跟DataGridView中的单元格一个意思,只是不同控件表现形式而已 刚用DataGridViewComboBoxColumn做了个例子测试了一下,单击弹出下拉框请参考:using System;using System.Collections.Generic;using System.ComponentModel;using System.Data;using System.Data.SqlClient;using System.Drawing;using System.Text;using System.Windows.Forms;namespace Sys{ public partial class Form3 : Form { public Form3() { InitializeComponent(); } private void Form3_Load(object sender, EventArgs e) { dataGridView1.AllowUserToAddRows = false; dataGridView1.AutoGenerateColumns = false; using (SqlConnection sqlconn = new SqlConnection("server=.;uid=sa;pwd=sa;database=xx")) { string sql1 = @"select userid,fullname,a.[description],b.ugroupid from users a left outer join usergroup b on a.grade=b.ugroupid"; string sql2 = "select distinct ugroupid,[description] from usergroup"; DataGridViewComboBoxColumn dgvComboBoxColumn = dataGridView1.Columns["grade"] as DataGridViewComboBoxColumn; dgvComboBoxColumn.DataPropertyName = "ugroupid"; dgvComboBoxColumn.DataSource = GetTable(sql2).DefaultView;//必须在设置dataGridView1的DataSource的属性前设置 dgvComboBoxColumn.DisplayMember = "description"; dgvComboBoxColumn.ValueMember = "ugroupid"; dataGridView1.DataSource = GetTable(sql1).DefaultView;//一定要在dgvComboBoxColumn的DataSource后设置 } } private DataTable GetTable(string sql) { using (SqlConnection sqlconn = new SqlConnection("server=.;uid=sa;pwd=yuling1310;database=smls")) { DataTable dt = new DataTable(); SqlDataAdapter sqlda = new SqlDataAdapter(sql, sqlconn); sqlda.Fill(dt); return dt; } } }}注意事项:.注意其ValueMember的DataType与DataPropertyName对应的列的DataType要相同,他不会为你做类型转换的。2.编程设置显示样式时注意一定要在设置DataSource之前设置DataGridViewComboBoxColumn的DataSource等属性。 是的,是DataGridView自带的DataGridViewComboBoxColumn 我现在用的就是DataGridViewComboBoxColumn列啊,而且能正常显示了,只不过是操作上不便的问题。 是的,是的,就是这个意思,然后刚按照2楼的意思,把EditMode属性设为 EditOnEnter后,是可以了,但现在如果点第一行的下拉框后,紧接着点第二行的下拉框,点第一次不会显示下拉框(会把第一行的下拉框收起来),然后再点一次才有效 连接不上远程SQL2005,真是欲哭无泪啊!! DataGridView 列排序? 回复有分 水晶报表,换行问题~~~~~~~~~~~~~~~~~~~ vshirleyzhxl接分 monthcalendar与combobox配合使用时的问题 C#中能够实现将任意方法作为参数传入一个指定方法吗? 在C#中我怎样判断一个文件当前是否正被别的进程使用? DataTable 过滤问题。。 关于c# 查询access 数据库返回指定字段问题 求正则表达式 如何在winform上放一个浮动窗口 如何使用C#发送多封邮件?
就是把单击相应事件改为双击相应
EditingControlShowing += new DataGridViewEditingControlShowingEventHandler(dgv_EditingControlShowing);
你是在DataGridView中加入了ComBoBox下拉列表吗?
那想请教EditingControlShowing += new DataGridViewEditingControlShowingEventHandler(dgv_EditingControlShowing);这句话是干嘛用的,
dgv_EditingControlShowing方法里干什么事呢?
现在如果点第一行的下拉框后,紧接着点第二行的下拉框,第一次不会显示(把第一行的下拉框收起来),然后再点一次才有效
跟DataGridView中的单元格一个意思,只是不同控件表现形式而已
请参考:using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Data.SqlClient;
using System.Drawing;
using System.Text;
using System.Windows.Forms;namespace Sys
{
public partial class Form3 : Form
{
public Form3()
{
InitializeComponent();
} private void Form3_Load(object sender, EventArgs e)
{
dataGridView1.AllowUserToAddRows = false;
dataGridView1.AutoGenerateColumns = false; using (SqlConnection sqlconn = new SqlConnection("server=.;uid=sa;pwd=sa;database=xx"))
{
string sql1 = @"select userid,fullname,a.[description],b.ugroupid
from users a left outer join usergroup b
on a.grade=b.ugroupid";
string sql2 = "select distinct ugroupid,[description] from usergroup"; DataGridViewComboBoxColumn dgvComboBoxColumn = dataGridView1.Columns["grade"] as DataGridViewComboBoxColumn;
dgvComboBoxColumn.DataPropertyName = "ugroupid";
dgvComboBoxColumn.DataSource = GetTable(sql2).DefaultView;//必须在设置dataGridView1的DataSource的属性前设置
dgvComboBoxColumn.DisplayMember = "description";
dgvComboBoxColumn.ValueMember = "ugroupid"; dataGridView1.DataSource = GetTable(sql1).DefaultView;//一定要在dgvComboBoxColumn的DataSource后设置
}
} private DataTable GetTable(string sql)
{
using (SqlConnection sqlconn = new SqlConnection("server=.;uid=sa;pwd=yuling1310;database=smls"))
{
DataTable dt = new DataTable();
SqlDataAdapter sqlda = new SqlDataAdapter(sql, sqlconn);
sqlda.Fill(dt);
return dt;
}
}
}
}
注意事项:
.注意其ValueMember的DataType与DataPropertyName对应的列的DataType要相同,他不会为你做类型转换的。
2.编程设置显示样式时注意一定要在设置DataSource之前设置DataGridViewComboBoxColumn的DataSource等属性。
是可以了,但现在如果点第一行的下拉框后,紧接着点第二行的下拉框,点第一次不会显示下拉框(会把第一行的下拉框收起来),然后再点一次才有效