vb.net 教程 3-10 窗体编程 datagridview控件 16 实现文本单元格中显示下拉框并设置值

版权声明:本文为博主原创文章,转载请在显著位置标明本文出处以及作者网名,未经作者允许不得用于商业目的。

在实际工作中,为了防止用户乱填写数据,开发者往往需要给出固定的几个值,用户只能在那几个值里面选择,
在datagridview中可以通过设置DataGridViewComboBoxCell 来实现,但是一列的下拉框单元格,没有文本单元格视觉效果那么好,造成用户体验并不是很好。
在本节内容中,我们将实现当点击文本单元格开始编辑时,就出现下拉框,编辑完成后又恢复为文本单元格。
首先明确几个概念:
1、datagridview控件可以包含子控件,通过datagridview.Controls 属性访问即可,这样就可以将ComboBox控件包含进去,当然其它控件也可以。
2、当ComboBox加入后,需要确定它的大小和位置,通过DataGridView.GetCellDisplayRectangle 方法即可。
Public Function GetCellDisplayRectangle ( columnIndex As Integer, rowIndex As Integer, cutOverflow As Boolean ) As Rectangle
参数
columnIndex :单元格的列索引。 
rowIndex :单元格的行索引。
cutOverflow:如果只返回该单元格的显示部分,则为 true;如果返回整个单元格界限,则为 false。 
返回值
Rectangle:表示单元格显示区域的矩形,也就获得了该区域的位置和尺寸。
获得Rectangle后,设置ComboBox的大小和位置与Rectangle相同就可以了。
3、ComboBox显示的时候:当点击需要的单元格时(CellClick)或者单元格获得焦点时(CellEnter)。
4、ComboBox隐藏的时候:但从ComboBox选择了值就可以让它消失了。
具体代码如下:
1、声明一个窗体级的ComboBox变量cb,声明两个Integer保存点击的行列的索引。

    Dim cb As ComboBox
    Dim cellrowindex, cellcolindex As Integer

2、当窗体载入后,将固定的值增加到cb中,为了限制用户输入,使用的是ComboBoxStyle.DropDownList,同时增加下拉框的索引改变事件(SelectedIndexChanged)

    Private Sub Form5_Load(sender As Object, e As EventArgs) Handles MyBase.Load
        cb = New ComboBox
        cb.Items.Add("甲甲甲甲")
        cb.Items.Add("乙乙乙乙")
        cb.Items.Add("丙丙丙丙")
        cb.DropDownStyle = ComboBoxStyle.DropDownList
        cb.Visible = False
        dgv.Controls.Add(cb)
        AddHandler cb.SelectedIndexChanged, AddressOf cbChanged
    End Sub

3、添加下拉框的SelectedIndexChanged事件具体代码,当选好值后将值传给对应的单元格,然后隐藏下拉框

    Private Sub cbChanged(ByVal sender As Object, ByVal e As EventArgs)
        dgv(cellcolindex, cellrowindex).Value = cb.Text
        cb.Visible = False
    End Sub

4、当点击第一列的单元格时显示出下拉框,同样为了限制用户输出,设置了下拉框的文本为第一个值,并设置它的大小和位置。如果点击的单元格有值,那么下拉框的文本设置为该值。

    Private Sub dgv_CellClick(sender As Object, e As DataGridViewCellEventArgs) Handles dgv.CellClick
        If e.ColumnIndex <> 0 Then
            Exit Sub
        End If

        cellcolindex = e.ColumnIndex
        cellrowindex = e.RowIndex
        Dim cellvalue As String = dgv(e.ColumnIndex, e.RowIndex).Value

        Dim rect As Rectangle
        rect = dgv.GetCellDisplayRectangle(e.ColumnIndex, e.RowIndex, True)
        cb.Top = rect.Top
        cb.Left = rect.Left
        cb.Width = rect.Width
        cb.Height = rect.Height

        cb.Text = cellvalue

        cb.Visible = True

    End Sub

运行后,当点击第一列单元格时,下拉框就显示出来了:

 

选好之后,下拉框隐藏,但是单元格的值变成了下拉框的文本:

实际运行中,基本的功能已经实现,但是还有一些问题,在下一节《vb.net 教程 3-10 窗体编程 datagridview控件 17 实现文本单元格中显示下拉框并设置值(续)》中会讨论如何解决这些问题。

由于.net平台下C#和vb.Net很相似,本文也可以为C#爱好者提供参考。

学习更多vb.net知识,请参看vb.net 教程 目录

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值