我有一个datagridview,其中一个单元格的类型为DatagridviewComboBoxCell
。对于此单元格,我将数据源与其关联,并提及DisplayMember
和ValueMember
属性。
现在加载网格时,我能够看到带有下拉列表的单元格以及所有需要的项目。但是,当我选择特定项目并移至其他单元格时,此ComboBoxcell
会显示ValueMember
而不是DisplayMember
。
E.g。 Combobox在其中列出了几个月,如January, February...December
。因此,DisplayMember为January,February...December
,ValueMember
为月份编号,如1,2,3...12
。因此,当我选择说January
并移至任何其他单元格时,ComboBoxCell
会在1
的情况下显示月份数,即January
。
我希望单元格在通用术语中显示January
或DisplayMember
而不是ValueMember
。
请让我知道如何实现这一目标。请注意,我不想将整个列用作DataGridViewComboBoxColumn
。
以下是代码:
Using Conn = New SqlConnection(ConnString)
dt = New DataTable
Dim da As New SqlDataAdapter("SELECT DateName(M,'1900-' + CONVERT(VARCHAR, X.iMonth) + '-01') sMonth, X.iMonth " & _
" FROM (SELECT TOP 12 ROW_NUMBER() OVER(ORDER BY name) iMonth from sys.objects) X", Conn)
da.Fill(dt)
End Using
For Each dr As DataGridViewRow In DataGridView1.Rows
Dim ComboCell As New DataGridViewComboBoxCell
DataGridView1("sNotes", dr.Index) = ComboCell
ComboCell.DataSource = dt
ComboCell.DisplayMember = "sMonth"
ComboCell.ValueMember = "iMonth"
Next
答案 0 :(得分:0)
该代码只是从数据库中检索月份名称和月份编号,并用它们填充ComboCells。每次离开ComboCell时都会执行它是没有意义的。尝试仅在Load
事件期间执行该操作。
请注意,代码是动态编写的,未经过测试。
Private Sub Form1_Load(ByVal sender As Object, _
ByVal e As System.EventArgs) Handles MyBase.Load
[...]
Using Conn = New SqlConnection(ConnString)
dt = New DataTable
Dim da As New SqlDataAdapter("SELECT DateName(M,'1900-' + CONVERT(VARCHAR, X.iMonth) + '-01') sMonth, X.iMonth " & _
" FROM (SELECT TOP 12 ROW_NUMBER() OVER(ORDER BY name) iMonth from sys.objects) X", Conn)
da.Fill(dt)
End Using
For Each dr As DataGridViewRow In DataGridView1.Rows
Dim ComboCell As New DataGridViewComboBoxCell
DataGridView1("sNotes", dr.Index) = ComboCell
ComboCell.DataSource = dt
ComboCell.DisplayMember = "sMonth"
ComboCell.ValueMember = "iMonth"
Next
[...]
End Sub
要检索月份编号(ValueMember
),请不要担心,当您从显示的月份名称(DisplayMember
)中选择一个月时,它将在内部被选中
您唯一需要的是遍历所有ComboCell并检索其选定的值。
Dim monthValues as Integer()
Dim i As Integer = 0
For Each dr As DataGridViewRow In DataGridView1.Rows
monthValues(i) = dr.Cells("sNotes").SelectedValue;
i += 1
Next