datagridview 单元格 combox样式

  1. datagridview控件单元格自带combox样式,即添加列时,类型选为:DataGridViewComboBoxColumn,并可在列的Items中增加下拉项。或通过语句实现:
((DataGridViewComboBoxColumn)dataGridView1.Columns[1]).Items.AddRange
 (new object[] { "", "1", "2", "3", "4" });

***第一个值为空,意思是可以不做选择,这样在自增行时,也不会因为没有选择-没有对应combox的item而报错。***无论是在设计窗口设计dgv的列还是用代码写出来,这都属于先设计后赋值吧,这种情况一整列的下拉框内容都是一样的。
之前只知道把控件拖进设计窗口,直接程序写的话就没有头绪,今天猛然间意识到,我可以先把控件拖进设计窗口,然后看designer中是怎么写的,这样不就很清楚了吗!!!自己之前真是太笨了,哈哈
2. 目前我们的程序中都是dgv直接绑定数据源,dgv呢,就随着数据源变化,没有做单独的设计,当需要增加combox样式时,为了使变动尽可能最小,所以想到可以直接创建一个combox控件,然后覆盖原有的单元格。可以把combox的绘制放在dgv的CurrentCellChanged、MouseEnter等事件里,设置combox的位置,以及Items。

 ComboBox combText = new ComboBox();
  this.Controls.Add(combText);
  combText.BringToFront();//需要把它放在最前,不然可能会被dgv挡住
 private void dataGridView1_CurrentCellChanged(object sender, EventArgs e)
        {
            try
            {
                Rectangle rect = dataGridView1.GetCellDisplayRectangle(dataGridView1.CurrentCell.ColumnIndex, dataGridView1.CurrentCell.RowIndex, false);
                string cvalue = dataGridView1.CurrentCell.Value.ToString();
                combText.Location = this.PointToClient(dataGridView1.PointToScreen(new Point(rect.Left, rect.Top)));
                combText.Width = rect.Width;
                combText.Height = rect.Height;
                combText.DataSource = InitCombox(cvalue);
                combText.SelectedItem = cvalue;
                combText.Visible = true;
            }
            catch (Exception ex) { }
        }

写在最后,第二种方法,combox并不能很好的覆盖单元格(不知道为啥)。 第一种方法也有类似问题,发现点击展开箭头后(做选择或不做选择),若该单元格还处于选中状态,则单元格下方也会有个小缝隙。
方法2
方法1
方法1

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值