读书人

datagridview 中是否能加 combobox?怎

发布时间: 2012-02-25 10:01:49 作者: rapoo

datagridview 中是否能加 combobox?如何设置
我的access数据库中有 部门表 bumen 内有列id ,name ,bz
信息表 zcinfo 内有列 id, class ,smallclass,type,add,username,conditio,bm(整个就是bumen表的外健id),date,bz
datagridview绑定了zcinfo 如何让datagridview中显示的bm列以combobox显示?

[解决办法]
这个我做过 呵呵

一下是我参考的代码,楼主不会日语,我可以给你翻译

VB.NET code
Private dataGridViewComboBox As DataGridViewComboBoxEditingControl = Nothing'EditingControlShowingイベントハンドラPrivate Sub DataGridView1_EditingControlShowing(ByVal sender As Object, _        ByVal e As DataGridViewEditingControlShowingEventArgs) _        Handles DataGridView1.EditingControlShowing    '表示されているコントロルがDataGridViewComboBoxEditingControlかべる    If TypeOf e.Control Is DataGridViewComboBoxEditingControl Then        Dim dgv As DataGridView = CType(sender, DataGridView)        '当する列かべる        If dgv.CurrentCell.OwningColumn.Name = "ComboBox" Then            '集のために表示されているコントロルを取得            Me.dataGridViewComboBox = _                CType(e.Control, DataGridViewComboBoxEditingControl)            'SelectedIndexChangedイベントハンドラを追加            AddHandler Me.dataGridViewComboBox.SelectedIndexChanged, _                AddressOf dataGridViewComboBox_SelectedIndexChanged        End If    End IfEnd Sub'CellEndEditイベントハンドラPrivate Sub DataGridView1_CellEndEdit(ByVal sender As Object, _        ByVal e As DataGridViewCellEventArgs) _        Handles DataGridView1.CellEndEdit    'SelectedIndexChangedイベントハンドラを削除    If Not (Me.dataGridViewComboBox Is Nothing) Then        RemoveHandler Me.dataGridViewComboBox.SelectedIndexChanged, _            AddressOf dataGridViewComboBox_SelectedIndexChanged        Me.dataGridViewComboBox = Nothing    End IfEnd Sub'DataGridViewに表示されているコンボボックスの'SelectedIndexChangedイベントハンドラPrivate Sub dataGridViewComboBox_SelectedIndexChanged(ByVal sender As Object, _        ByVal e As EventArgs)    'されたアイテムを表示    Dim cb As DataGridViewComboBoxEditingControl = _        CType(sender, DataGridViewComboBoxEditingControl)    Console.WriteLine(cb.SelectedItem)End Sub
[解决办法]
Dim pdgvCboCell As DataGridViewComboBoxCell = New DataGridViewComboBoxCell
pdgvCboCell.Items.Add("1")
pdgvCboCell.Items.Add("2")
Me.dataGridView.Item(0,0 ) = pdgvCboCell
Me.dataGridView.Item(0,0).Value = "2"

这就是将dataGridView里的(0,0)单元格改变成Combox控件。

也可以把一列设为COMBOX控件
Dim pdgv as DataGridViewComboBoxColumn = new dataGridViewComboBoxColums

[解决办法]
这个给你参考一下。
VB.NET code
 '打开窗体代码窗口,在代码窗口中声明一个ComboBox的控件    '// 定义下拉列表框    Private cmb_Temp As New ComboBox    Private Sub Form2_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load        '获取连接        DATAOPRATION.getConnection()        ' 绑定性别下拉列表框        BindSex()        '绑定数据表        BindData()        ' 设置下拉列表框不可见        cmb_Temp.Visible = False        ' 添加下拉列表框事件        AddHandler cmb_Temp.SelectedIndexChanged, AddressOf cmb_Temp_SelectedIndexChanged        ' 将下拉列表框加入到DataGridView控件中        Me.dgv_User.Controls.Add(cmb_Temp)    End Sub    Public Sub BindSex()        Dim dtSex As New DataTable        dtSex.Columns.Add("Value")        dtSex.Columns.Add("Name")        Dim drSex As DataRow        drSex = dtSex.NewRow()        drSex("Value") = "0"        drSex("Name") = "男"        dtSex.Rows.Add(drSex)        drSex = dtSex.NewRow()        drSex("Value") = "1"        drSex("Name") = "女"        dtSex.Rows.Add(drSex)        cmb_Temp.ValueMember = "Value"        cmb_Temp.DisplayMember = "Name"        cmb_Temp.DataSource = dtSex        cmb_Temp.DropDownStyle = ComboBoxStyle.DropDownList    End Sub    '通常情况下我们都是从数据库中获取数据表(或者数据集),然后绑定到DataGridView中的,这里我们为了避免连接数据库,手中构造一个数据库表,代码如下:    Private Sub BindData()        Dim dtData As New DataTable        dtData.Columns.Add("ID")        dtData.Columns.Add("Name")        dtData.Columns.Add("Sex")        Dim drData As DataRow        drData = dtData.NewRow()        drData("ID") = 1        drData("Name") = "张三"        drData("Sex") = "1"        dtData.Rows.Add(drData)        drData = dtData.NewRow()        drData("ID") = 2        drData("Name") = "李四"        drData("Sex") = "1"        dtData.Rows.Add(drData)        drData = dtData.NewRow()        drData("ID") = 3        drData("Name") = "王五"        drData("Sex") = "1"        dtData.Rows.Add(drData)        drData = dtData.NewRow()        drData("ID") = 4        drData("Name") = "小芳"        drData("Sex") = "0"        dtData.Rows.Add(drData)        drData = dtData.NewRow()        drData("ID") = 5        drData("Name") = "小娟"        drData("Sex") = "0"        dtData.Rows.Add(drData)        drData = dtData.NewRow()        drData("ID") = 6        drData("Name") = "赵六"        drData("Sex") = "1"        dtData.Rows.Add(drData)               dgv_User.DataSource = Nothing        Me.dgv_User.DataSource = dtData    End Sub    '当用户选择的单元格移动到性别这一列时,我们要显示下拉列表框,添加如下事件    Private Sub dgv_User_CurrentCellChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles dgv_User.CurrentCellChanged        Try            If Not Me.dgv_User.CurrentCell Is Nothing AndAlso Me.dgv_User.CurrentCell.ColumnIndex = 4 Then                Dim rect As Rectangle = dgv_User.GetCellDisplayRectangle(dgv_User.CurrentCell.ColumnIndex, dgv_User.CurrentCell.RowIndex, False)                Dim sexValue As String = dgv_User.CurrentCell.Value.ToString()                If sexValue = "0" Then                    cmb_Temp.Text = "男"                Else                    cmb_Temp.Text = "女"                    cmb_Temp.Left = rect.Left                    cmb_Temp.Top = rect.Top                    cmb_Temp.Width = rect.Width                    cmb_Temp.Height = rect.Height                    cmb_Temp.Visible = True                End If            Else                cmb_Temp.Visible = False            End If        Catch ex As Exception        End Try    End Sub    '当用户选择下拉列表框时改变DataGridView单元格的内容    Private Sub cmb_Temp_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs)        If CType(sender, ComboBox).Text = "男" Then            dgv_User.CurrentCell.Value = "男"            dgv_User.CurrentCell.Tag = "0"        Else            dgv_User.CurrentCell.Value = "女"            dgv_User.CurrentCell.Tag = "1"        End If    End Sub    '当滚动DataGridView或者改变DataGridView列宽时将下拉列表框设为不可见()    Private Sub dgv_User_Scroll(ByVal sender As Object, ByVal e As System.Windows.Forms.ScrollEventArgs) Handles dgv_User.Scroll        Me.cmb_Temp.Visible = False    End Sub    Private Sub dgv_User_ColumnWidthChanged(ByVal sender As Object, ByVal e As System.Windows.Forms.DataGridViewColumnEventArgs) Handles dgv_User.ColumnWidthChanged        Me.cmb_Temp.Visible = False    End Sub    '绑定数据表后将性别列中的每一单元格的Value和Tag属性(Tag为值文本, Value为显示文本)    Private Sub dgv_User_DataBindingComplete(ByVal sender As Object, ByVal e As System.Windows.Forms.DataGridViewBindingCompleteEventArgs) Handles dgv_User.DataBindingComplete        Try            For i As Integer = 0 To Me.dgv_User.Rows.Count - 1                If (Not dgv_User.Rows(i).Cells(4).Value Is Nothing) AndAlso dgv_User.Rows(i).Cells(4).ColumnIndex = 4 Then                    dgv_User.Rows(i).Cells(4).Tag = dgv_User.Rows(i).Cells(4).Value.ToString()                    If dgv_User.Rows(i).Cells(4).Value.ToString() = "0" Then                        dgv_User.Rows(i).Cells(4).Value = "男"                    ElseIf dgv_User.Rows(i).Cells(4).Value.ToString() = "1" Then                        dgv_User.Rows(i).Cells(4).Value = "女"                    End If                End If            Next        Catch ex As Exception        End Try    End Sub 


[解决办法]
跟这个差不多
把weekTable 改成bm内容就行了

Dim weekTable As New DataTable("WeekTable")
weekTable.Columns.Add("Display", GetType(String))
weekTable.Columns.Add("Value", GetType(Integer))
weekTable.Rows.Add("A", 0)
weekTable.Rows.Add("B", 1)
weekTable.Rows.Add("C", 2)
weekTable.Rows.Add("D", 3)
weekTable.Rows.Add("E", 4)
weekTable.Rows.Add("F", 5)
weekTable.Rows.Add("G", 6)

Dim column As New DataGridViewComboBoxColumn()
column.Name = "ComboBox"
column.DataPropertyName = "WWW"
column.DataSource = weekTable
column.ValueMember = "Value"
column.DisplayMember = "Display"
DataGridView1.Columns.Add(column)

读书人网 >VB Dotnet

热点推荐