如何使用C#在DataGridView中的DataGridViewComboBoxColumn项上强加多选 [英] How to impose multiselection on DataGridViewComboBoxColumn item in DataGridView using C#
本文介绍了如何使用C#在DataGridView中的DataGridViewComboBoxColumn项上强加多选的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我的表单中有一个DataGridView,并将项目添加到DataGridViewComboBoxColumn,现在我需要从DataGridViewComboBoxCell中选择多个项目。
Hi,
I have a DataGridView in my form and added items to DataGridViewComboBoxColumn, now I have a requirement to select multiple items from the DataGridViewComboBoxCell.
DataGridViewComboBoxCell c = new DataGridViewComboBoxCell();
c.Items.Add("Red");
c.Items.Add("Green");
dgvDataIntegration.CurrentRow.Cells[3] = c;
dgvDataIntegration.CurrentRow.Cells[3].Value = c.Items[0];
您能否提出解决方案,我们该怎么做呢。
提前致谢。
Zulur
Can you suggest the solution, how can we do this.
Thanks in advance.
Zulur
推荐答案
DataGridViewComboBoxColumn没有内置功能来支持多项选择。
查看有关codeproject的文章
ASP.NET中的多选下拉列表
也请参考此链接:-)
如何:Windows窗体DataGridView单元中的主机控件
The DataGridViewComboBoxColumn has no built in feature to support multiple selections.
Check this article on codeproject
Multi select Dropdown list in ASP.NET
and refer this link too :-)
How to: Host Controls in Windows Forms DataGridView Cells
有些像这样,我现在正在处理它,但是当我有超过100,000行时很慢
'变量
#RegionVari able de controldeselección
Private _posicionInicialSeleccionada As Integer = -1
Private _posicionFinalSeleccionada As Integer = -1
#End Region
'分配
AddHandler CreditosFiscalesDataGridView .DataBindingComplete,AddressOf EjecucionFiscalHelper.Grid_DataBindingComplete_CentrarHeaders
'方法
Private Sub CreditosFiscalesDataGridView_CellContentClick(ByVal sender As Object,ByVal e As System.Windows。 Forms.DataGridViewCellEventArgs)处理CreditosFiscalesDataGridView.CellContentClick
Dim columnaActual As Integer = e.ColumnIndex
Dim rowActual As Integer = e.RowIndex
EjecucionFiscalHelper。 VerificarSeleccion(rowActual,columnaActual,CreditosFiscalesDataGridView,_posicionInicialSeleccionada,_posicionFinalSeleccionada)
End Sub
'和处理程序
Public Shared Sub VerificarSeleccion(ByVal rowActual As Integer,ByVal columnaActual As Integer,ByVal grid作为DataGridView,ByRef _posicionInicialSeleccionada As Integer,ByRef _posicionFinalSeleccionada As Integer)
Dim posicionFinalAnteriorSeleccionada As Integer = -1
如果grid.Columns(columnaActual).Name = ViewConstants.COLUMNA_SELECCION那么
如果不是My.Computer.Keyboard.ShiftKeyDown或_posicionInicialSeleccionada< 0然后
_posicionFinalSeleccionada = -1
_posicionInicialSeleccionada = rowActual
返回
结束如果
如果My.Computer.Keyboard.ShiftKeyDown那么
如果_posicionInicialSeleccionada< 0然后
_posicionInicialSeleccionada = rowActual
否则
如果_posicionFinalSeleccionada> = 0那么
posicionFinalAnteriorSeleccionada = _posicionFinalSeleccionada
结束如果
_posicionFinalSeleccionada = rowActual
结束如果
Dim posicionInicial As Integer = _posicionInicialSeleccionada
Dim posicionFinal As Integer = _posicionFinalSeleccionada
Dim direccionReversa As Boolean = False
如果_posicionInicialSeleccionada> _posicionFinalSeleccionada和_posicionFinalSeleccionada> -1然后
direccionReversa = True
结束如果
如果posicionFinalAnteriorSeleccionada< = posicionFinal and direccionReversa and posicionFinalAnteriorSeleccionada > -1然后
For Each row As DataGridViewRow in grid.Rows
如果row.Index> = posicionFinalAnteriorSeleccionada和row.Index< posicionFinal然后
row.Cells(ViewConstants.COLUMNA_SELECCION).Value = False
结束如果
下一页
返回
结束如果
如果direccionReversa那么
For Each row As DataGridViewRow in grid.Rows
如果row.Index> posicionFinal和row.Index< = posicionInicial然后
row.Cells(ViewConstants.COLUMNA_SELECCION).Value = True
结束如果
下一步
返回
结束如果
如果posicionFinal> = 0且posicionFinalAnteriorSeleccionada> -1然后
For Each row As DataGridViewRow in grid.Rows
如果row.Index> posicionFinal和row.Index< = posicionFinalAnteriorSeleccionada然后
row.Cells(ViewConstants.COLUMNA_SELECCION).Value = False
结束如果
下一步
结束如果
如果posicionFinal> = 0则
For Each row As DataGridViewRow in grid.Rows
如果row.Index> = posicionInicial和row.Index< = posicionFinal那么
row.Cells(ViewConstants.COLUMNA_SELECCION).Value = True
结束如果
下一页
返回
结束如果
结束If 'tecla shift
结束如果'columna seleccion
End Sub
some like this, i'm working on it at now but is slow when i have more than 100,000 rows
'the variables
#Region "Variables de control de selección"
Private _posicionInicialSeleccionada As Integer = -1
Private _posicionFinalSeleccionada As Integer = -1
#End Region
'the assigning
AddHandler CreditosFiscalesDataGridView.DataBindingComplete, AddressOf EjecucionFiscalHelper.Grid_DataBindingComplete_CentrarHeaders
'the method
Private Sub CreditosFiscalesDataGridView_CellContentClick(ByVal sender As Object, ByVal e As System.Windows.Forms.DataGridViewCellEventArgs) Handles CreditosFiscalesDataGridView.CellContentClick
Dim columnaActual As Integer = e.ColumnIndex
Dim rowActual As Integer = e.RowIndex
EjecucionFiscalHelper.VerificarSeleccion(rowActual, columnaActual, CreditosFiscalesDataGridView, _posicionInicialSeleccionada, _posicionFinalSeleccionada)
End Sub
'and the handler
Public Shared Sub VerificarSeleccion(ByVal rowActual As Integer, ByVal columnaActual As Integer, ByVal grid As DataGridView, ByRef _posicionInicialSeleccionada As Integer, ByRef _posicionFinalSeleccionada As Integer)
Dim posicionFinalAnteriorSeleccionada As Integer = -1
If grid.Columns(columnaActual).Name = ViewConstants.COLUMNA_SELECCION Then
If Not My.Computer.Keyboard.ShiftKeyDown Or _posicionInicialSeleccionada < 0 Then
_posicionFinalSeleccionada = -1
_posicionInicialSeleccionada = rowActual
Return
End If
If My.Computer.Keyboard.ShiftKeyDown Then
If _posicionInicialSeleccionada < 0 Then
_posicionInicialSeleccionada = rowActual
Else
If _posicionFinalSeleccionada >= 0 Then
posicionFinalAnteriorSeleccionada = _posicionFinalSeleccionada
End If
_posicionFinalSeleccionada = rowActual
End If
Dim posicionInicial As Integer = _posicionInicialSeleccionada
Dim posicionFinal As Integer = _posicionFinalSeleccionada
Dim direccionReversa As Boolean = False
If _posicionInicialSeleccionada > _posicionFinalSeleccionada And _posicionFinalSeleccionada > -1 Then
direccionReversa = True
End If
If posicionFinalAnteriorSeleccionada <= posicionFinal And direccionReversa And posicionFinalAnteriorSeleccionada > -1 Then
For Each row As DataGridViewRow In grid.Rows
If row.Index >= posicionFinalAnteriorSeleccionada And row.Index < posicionFinal Then
row.Cells(ViewConstants.COLUMNA_SELECCION).Value = False
End If
Next
Return
End If
If direccionReversa Then
For Each row As DataGridViewRow In grid.Rows
If row.Index > posicionFinal And row.Index <= posicionInicial Then
row.Cells(ViewConstants.COLUMNA_SELECCION).Value = True
End If
Next
Return
End If
If posicionFinal >= 0 And posicionFinalAnteriorSeleccionada > -1 Then
For Each row As DataGridViewRow In grid.Rows
If row.Index > posicionFinal And row.Index <= posicionFinalAnteriorSeleccionada Then
row.Cells(ViewConstants.COLUMNA_SELECCION).Value = False
End If
Next
End If
If posicionFinal >= 0 Then
For Each row As DataGridViewRow In grid.Rows
If row.Index >= posicionInicial And row.Index <= posicionFinal Then
row.Cells(ViewConstants.COLUMNA_SELECCION).Value = True
End If
Next
Return
End If
End If 'tecla shift
End If 'columna seleccion
End Sub
这篇关于如何使用C#在DataGridView中的DataGridViewComboBoxColumn项上强加多选的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文