如何使用C#在DataGridView中的DataGridViewComboBoxColumn项上强加多选 [英] How to impose multiselection on DataGridViewComboBoxColumn item in DataGridView using C#

查看:53
本文介绍了如何使用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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆