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)