datagridview 中是否能加 combobox?如何设置

chinayeren 2008-04-02 08:28:51
我的access数据库中有 部门表 bumen 内有列id ,name ,bz
信息表 zcinfo 内有列 id, class ,smallclass,type,add,username,conditio,bm(整个就是bumen表的外健id),date,bz
datagridview绑定了zcinfo 如何让datagridview中显示的bm列以combobox显示?
...全文
713 20 打赏 收藏 转发到动态 举报
写回复
用AI写文章
20 条回复
切换为时间正序
请发表友善的回复…
发表回复
binghejinjun 2009-05-01
  • 打赏
  • 举报
回复
hoohoo!
tyouvivi 2008-04-17
  • 打赏
  • 举报
回复
跟这个差不多
把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)
georgeben 2008-04-17
  • 打赏
  • 举报
回复


'打开窗体代码窗口,在代码窗口中声明一个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 THEN
'第四行?
'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




bowlingljf 2008-04-07
  • 打赏
  • 举报
回复
TO yunyun837:当光标处于性别那一列时,没有看到combo控件出现,请问是什么原因?
yunyun837 2008-04-07
  • 打赏
  • 举报
回复
哦,那个本来是我连数据用的,考虑到不方便就给你弄了个临时的DataTable,呵呵,你把他给注释了就可以了
zy227 2008-04-04
  • 打赏
  • 举报
回复
裏面可能還封裝了一些對數據庫操作的事務

zy227 2008-04-04
  • 打赏
  • 举报
回复
DATAOPRATION 自定義的類

是用來與數據庫交互用的

説白了連接數據庫
bowlingljf 2008-04-04
  • 打赏
  • 举报
回复
TO yunyun837 :
我试运行了你的代码,提示DATAOPRATION没有定义,请问这是一个什么类型?
'获取连接
DATAOPRATION.getConnection()
_NET2004 2008-04-03
  • 打赏
  • 举报
回复
收藏,我正学习
_NET2004 2008-04-03
  • 打赏
  • 举报
回复
收藏,我正学习
chinayeren 2008-04-02
  • 打赏
  • 举报
回复
学过几天日文 不过看不懂,能否换成中文注释?
yudi010 2008-04-02
  • 打赏
  • 举报
回复
这个我做过 呵呵

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

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 If
End 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 If
End 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
chinayeren 2008-04-02
  • 打赏
  • 举报
回复
那位帅哥靓女帮忙解决下阿
把bumen表内的id 和name 拿出来 装到 datagridview绑定的zcinfo里的bm列?然后默认选中为数据id对应的name
chinayeren 2008-04-02
  • 打赏
  • 举报
回复
我的意思是zcinfo里的bm列是个数字我想让它显示在bumen和id列对应的name列的值 在combox内显示并且
lizhengnan 2008-04-02
  • 打赏
  • 举报
回复
可以,只要把这个列的类型设为DataGridViewComboBoxColumn就可以了.
chinayeren 2008-04-02
  • 打赏
  • 举报
回复
果然牛人好多阿~~~
不过还不时很明白 够啃几个小时的了~~~
yunyun837 2008-04-02
  • 打赏
  • 举报
回复
不让性别列的所有都是下拉框,这样不够美观,但鼠标点上的时候就会变成下拉框,并可以选择你想要的值!
yunyun837 2008-04-02
  • 打赏
  • 举报
回复
这个给你参考一下。

'打开窗体代码窗口,在代码窗口中声明一个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

由于代码太多,不知道是否拷全,如果有缺失的可以告诉我,给你补上,呵呵
langzi830428 2008-04-02
  • 打赏
  • 举报
回复
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
chinayeren 2008-04-02
  • 打赏
  • 举报
回复
还没解决呢别沉啊

16,718

社区成员

发帖
与我相关
我的任务
社区描述
VB技术相关讨论,主要为经典vb,即VB6.0
社区管理员
  • VB.NET
  • 水哥阿乐
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧