WinForm下的DataGridView中添加ComoBox控件

首先 在DataGridView中为想要设置为下拉列表的列ColumnType属性设置为DataGridViewComboBoxColumn  这样该列单元格就会成为下拉列表的列

如果是连接数据库了,那么再在下面的DataPropertyName属性中写上已经连接好的库中表里的字段,最后再为ComboBox的Items中加入和数据库中数据相关的选项,这样就完成了下拉列表的功能。效果如下

    

     你只需要添加一列类型为DataGridViewComboBoxColumn的列,然后添加数据源即可。但是我们看到这种方式的下拉列表看起来并不是十分的美观,至少我个人是这么觉得的。

 

不过上述方法做出来的效果貌似并不美观,于是便有另一种方法

// 将下拉列表加入到DataGridView的控件集合内,否则下拉列表不会显示在你点击的单元格上 
dataGridView1.Controls.Add(comboBox1);

      然后监听DataGridView的CurrentCellChanged事件,执行如下的动作:

View Code
 1    private   void  dataGridView1_CurrentCellChanged( object  sender, EventArgs e)
 2          {
 3              DataGridViewColumn column  =  dataGridView1.CurrentCell.OwningColumn;
 4               // 如果是要显示下拉列表的列的话
 5               if  (column.Name.Equals( " Column2 " ))
 6              {
 7                   int  columnIndex  =  dataGridView1.CurrentCell.ColumnIndex;
 8                   int  rowIndex  =  dataGridView1.CurrentCell.RowIndex;
 9                  Rectangle rect  =  dataGridView1.GetCellDisplayRectangle(columnIndex, rowIndex,  false );
10                  comboBox1.Left  =  rect.Left;
11                  comboBox1.Top  =  rect.Top;
12                  comboBox1.Width  =  rect.Width;
13                  comboBox1.Height  =  rect.Height;
14                 //将单元格的内容显示为下拉列表的当前项
15                   string  consultingRoom  =  dataGridView1.Rows[rowIndex].Cells[columnIndex].Value.ToString();
16                   int  index  =  comboBox1.Items.IndexOf(consultingRoom);
17 
18                  comboBox1.SelectedIndex  =  index;
19                  comboBox1.Visible  =   true ;
20              }
21               else
22              {
23                  comboBox1.Visible  =   false ;
24              }
25          }

       然后重绘下拉列表的每一项,如果不重绘的话,看不到下拉列表的每一项的内容,但是神奇的是可以选择(因为下拉列表此时是有内容的,只不过是没有显示出来)

View Code
1  private   void  comboBox1_DrawItem( object  sender, DrawItemEventArgs e)
2          {
3              e.DrawBackground();
4              e.Graphics.DrawString(comboBox1.Items[e.Index].ToString(), e.Font, Brushes.Black,
5                  e.Bounds, StringFormat.GenericDefault);
6          }

      最后在下拉列表选择项变化的时候,更改DataGridView相应的单元格的内容

View Code
1  private   void  comboBox1_SelectedIndexChanged( object  sender, EventArgs e)
2          {
3               if  (dataGridView1.CurrentCell  !=   null )
4                  dataGridView1.CurrentCell.Value  =  comboBox1.Items[comboBox1.SelectedIndex];
5          }


 

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值