小弟是Winform新手,在开发过程中发现DataGridView中,下拉框点两下才能显示下拉框的内容,有办法实现直接一次click就能显示下拉框的内容吗?
不知道表达是否清楚!

解决方案 »

  1.   

    改事件MouseClick为MouseDoubleClick呢?
    就是把单击相应事件改为双击相应
      

  2.   

    DataGridView属性 EditMode 为 EditOnEnter 
    EditingControlShowing += new DataGridViewEditingControlShowingEventHandler(dgv_EditingControlShowing);
      

  3.   


    你是在DataGridView中加入了ComBoBox下拉列表吗?
      

  4.   

    DataGridView属性 EditMode 为 EditOnEnter后是初步达到效果。
    那想请教EditingControlShowing += new DataGridViewEditingControlShowingEventHandler(dgv_EditingControlShowing);这句话是干嘛用的,
    dgv_EditingControlShowing方法里干什么事呢?
    现在如果点第一行的下拉框后,紧接着点第二行的下拉框,第一次不会显示(把第一行的下拉框收起来),然后再点一次才有效
      

  5.   

    我觉得你是用了ComboBox控件你尝试把现在的ComboBox控件改为DataGridViewComboBoxColumnDataGridViewComboBoxColumn 就是DataGridView中的ComboBox列 
    跟DataGridView中的单元格一个意思,只是不同控件表现形式而已
      

  6.   

    刚用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等属性。
      

  7.   

    是的,是DataGridView自带的DataGridViewComboBoxColumn
      

  8.   

    我现在用的就是DataGridViewComboBoxColumn列啊,而且能正常显示了,只不过是操作上不便的问题。
      

  9.   

    是的,是的,就是这个意思,然后刚按照2楼的意思,把EditMode属性设为 EditOnEnter后,
    是可以了,但现在如果点第一行的下拉框后,紧接着点第二行的下拉框,点第一次不会显示下拉框(会把第一行的下拉框收起来),然后再点一次才有效