最近写的程序中需要在DataGridView中使用下拉选择的功能,首选方案是列的ColumnType属性

使用EditingControlShowing事件,

if (e.Control is ComboBox)
{
  int iColumn = dgvWorkerList.CurrentCell.ColumnIndex;
  switch (iColumn)
   {
     case 2://列
    {

      Gender.DisplayStyle = DataGridViewComboBoxDisplayStyle.DropDownButton;//原来设置的是Nothing

      List<string> list = new List<string>();
      list.Add("男");
      list.Add("女");

      Gender.DataSource = list;

      (e.Control as ComboBox).SelectedIndexChanged += new EventHandler(ComboBox_SelectedIndexChanged);

    }

  }

}

由原来的文本转为下拉框、绑定数据功能完全没有问题。唯一的问题是

黑色呀,尝试了强制刷新,无效,怀疑绑定数据问题,测试后觉得不是,因为直接在Items加内容,不使用绑定,结果一样。

郁闷很久,依然没有解决。

改方式吧,借鉴了

gldamao 的BLOG

巧用ComboBox控件实现datagridView下拉菜单功能

方法,小修改,实现效果。感谢gldamao。

放一个combox在窗体,Load中

this.cmbGender.Visible = false;
this.cmbGender.Width = 0;
this.dgvWorkerList.Controls.Add(this.cmbGender);

使用CurrentCellChanged事件中判断

private void dgvWorkerList_CurrentCellChanged(object sender, EventArgs e)
{
  try
  {
    int iIndex = this.dgvWorkerList.CurrentCell.ColumnIndex;

    switch (iIndex)
    {
      case 2:
      {
        this.cmbGender.Visible = false;
        this.cmbGender.Width = 0;
        this.cmbGender.Left = this.dgvWorkerList.GetCellDisplayRectangle(this.dgvWorkerList.CurrentCell.ColumnIndex,         this.dgvWorkerList.CurrentCell.RowIndex, true).Left;
        this.cmbGender.Top = this.dgvWorkerList.GetCellDisplayRectangle(this.dgvWorkerList.CurrentCell.ColumnIndex,         this.dgvWorkerList.CurrentCell.RowIndex, true).Top;
        this.cmbGender.Width = this.dgvWorkerList.GetCellDisplayRectangle(this.dgvWorkerList.CurrentCell.ColumnIndex,         this.dgvWorkerList.CurrentCell.RowIndex, true).Width;
        string content = Convert.ToString(this.dgvWorkerList.CurrentCell.Value);
        this.cmbGender.Text = content;
        this.cmbGender.Visible = true;

        List<string> list = new List<string>();
        list.Add("男");
        list.Add("女");

        this.cmbGender.DataSource = list;
      }
      break;

    }

  }

}

选列时出现combox添加内容

这里说下,之前用的绑定的方式加入内容,在选择时候发现无法获得选中的内容于是修改

for (int i = 0; i < list.Count; i++)
{
  this.cmbGender.Items.Add(“男”);
}

之后

private void cmbGender_SelectionChangeCommitted(object sender, EventArgs e)
{
  this.dgvWorkerList.CurrentCell.Value = ((System.Windows.Forms.ComboBox)sender).SelectedItem.ToString();
  this.cmbGender.Visible = false;//这里稍作修改,选中内容后直接隐藏了combox 
  this.cmbGender.Width = 0;
}

效果很好。

只是原来的下拉黑色的问题没有解决,欢迎有办法的大神留言、指教。

关于datagridview里使用combox的总结的更多相关文章

  1. 解决数据库datatime数据在DataGridView里不显示秒的解决

    在数据库中正确显示有分有秒,到dataset里的时候也有,但绑定到DataGridView里的时候就没有秒,解决办法: dataGridView1.Columns["record_time& ...

  2. C# WinForm程序向datagridview里添加数据

    在C#开发的winform程序中,datagridview是一个经常使用到的控件.它可以以类似excel表格的形式规范的展示或操作数据,我也经常使用这个控件.使用这个控件首先要掌握的就是如何向其中插入 ...

  3. datagridview里面有combox避免双击两次的写法

    双击两次变成单击一次的写法: void dataGridView_CellEnter(object sender, DataGridViewCellEventArgs e) { //实现单击一次显示下 ...

  4. C#里,如何模拟DataGridView里的一个Cell的Click事件。

    //假设dgv是一个DataGridView. //我要点击第3行的第二个cell. //当然,要有一个点击事件.假设dgv_CellClick是那个点击事件. dgv_CellClick(dgv,  ...

  5. datagridview里面的checkbox全选和取消全选

    全选 设置全选button,选中所有的checkbox private void selectAll_Click(object sender, EventArgs e) { //遍历datagridv ...

  6. DataGridView里CheckBox实现全选控制

    1. checkbox点击事件 private void myStyleDataGridView1_CellClick(object sender, DataGridViewCellEventArgs ...

  7. c# 如何给 dataGridView里添加一个自增长列(列名为序号)

    System.Data.DataTable table = new DataTable();                System.Data.DataColumn column = new Da ...

  8. DataGridView删除多行选中数据

    思路是找到最先选择和最后选择到的行 ,弄一个for循环,根据这些行的索引值在执行数据的删除. 我这里用了EF.             DialogResult result = MessageBox ...

  9. WinForm编程数据视图之DataGridView浅析

    学习C#语言的朋友们肯定或多或少地接触到了WinForm编程,在C#语言的可视化IDE中(如VS.NET中)使用设计器可以让我们轻松地完成窗体.按钮.标签.图片框等等控件的组合,我们可以轻易地做出界面 ...

随机推荐

  1. Codeforces 696 D. Legen...

    Description 每个字符串有些价值,问生成长度为 \(l\) 的字符串最多能获得多少价值,总字符数不超过 \(200\), \(l\leqslant 10^{14}\) . Sol AC自动机 ...

  2. Python基本数据类型

    一.整数 int(整形) 在32位机器上,整数的位数为32位,取值范围为-2**31~2**1-1,即-2147483648-2147483647 在64位系统上,整数的位数为64位,取值范围为-2* ...

  3. ACM/ICPC 之 最小割转网络流(POJ3469)

    重点:构图 //最小割转网络流 //邻接表+Dinic //Time:5797Ms Memory:6192K #include<iostream> #include<cstring& ...

  4. plist文件的读写

    参考资料 http://blog.csdn.net/totogo2010/article/details/7634185

  5. gbk和gb2312的区别

    //GB2312是中国规定的汉字编码,也可以说是简体中文的字符集编码;GBK 是 GB2312的扩展 ,除了兼容GB2312外,它还能显示繁体中文,还有日文的假名 //总体说来,GBK包括所有的汉字, ...

  6. javascript 核心语言笔记- 2 语法结构

    字符集 JavasSript 程序是用 Unicode 字符集 编写的,Unicode 是 ASCII 和 Latin-1 的超集,支持几乎所有在用的语言.ECMAScript 3 要求 JavaSc ...

  7. xampp环境搭建+bugfree

    一.xampp安装 1.下载xampp安装文件,下载地址:http://pan.baidu.com/s/1eSp5wVw 2.上传到Linux服务器,执行赋权并安装(我安装在/opt目录下) 3.安装 ...

  8. Laravel Homestead安装笔记

    引言: 最近开始学习laravel框架,了解到有个laravel homestead的box,开发起来非常方便快捷,于是就准备开始配置homestead虚拟开发环境了 什么是Homestead 要想学 ...

  9. MongoDB的用户管理(6)

    注意: A)在mongodb中,有一个admin数据库, 牵涉到服务器配置层面的操作,需要先切换到admin数据. 即 use admin , -->相当于进入超级用户管理模式. B)mongo ...

  10. Android源码目录结构详解(转载)

    转自:http://blog.csdn.net/xiangjai/article/details/9012387 在学习Android的过程中,学习写应用还好,一开始不用管太多代码,直接调用函数就可以 ...