Unire in una GridView le celle in un'unica grande cella

Da Gambas-it.org - Wikipedia.

Per unire in una unica cella due o più celle di più righe, si utilizzerà la Proprietà ".RowSpan" delle celle. Per unire, invece, in una unica cella due o più celle di due o più colonne, si utilizzerà la Proprietà ".ColumnSpan" delle celle.

Unire le celle di due o più righe

Nell'esempio pratico, che segue, abbiamo una GridView formata da tre righe e tre colonne. Uniremo in un'unica cella le celle delle tre righe con riferimento alla seconda colonna. Ossia le seconde celle di ciascuna riga saranno unite a formare in un'unica grande cella verticale. Quindi la seconda colonna della GridView sarà formata da un'unica cella.
Inoltre inseriremo nell'unica grande cella un testo in basso al centro.

Public Sub Form_Open()

 With GridView1
   .Rows.Count = 3
   .Columns.Count = 3
 End With

 With GridView1[0, 1]
   .RowSpan = 3
   .Alignment = Align.Bottom
   .Text = "testo"
 End With

End

Unire un gruppo di celle di una riga individuando con il puntatore del mouse la prima e l'ultima cella del gruppo

In quest'altro esempio le celle, da unire, di una riga saranno individuate, cliccando sulla prima cella da unire e, (mantenendo premuto il tasto del mouse) dopo esserci spostati con il puntatore del mouse sull'ultima cella da unire, rilasciando su quest'ultima cella il tasto del mouse:

Private cl As Short


Public Sub Form_Open()

 With GridView1
   .Columns.Count = 3
   .Rows.Count = 4 
 End With

End


Public Sub GridView1_Click()

 cl = GridView1.Column

End


Public Sub GridView1_MouseUp()

' Consente di ottenere l'unione delle celle su una medesima riga sia se ci si sposta con il mouse verso il basso, sia verso l'alto:
 If cl > GridView1.Column Then
   GridView1[GridView1.Row, GridView1.Column].ColumnSpan = cl - GridView1.Column + 1
 Else
   GridView1[GridView1.Row, cl].ColumnSpan = GridView1.Column - cl + 1
 Endif 

End

Unire le celle di una riga contestualmente allo spostamento del puntatore del mouse su di esse

In questo caso si cliccherà con il mouse sulla prima cella da unire; poi mantenendo premuto e spostando il puntatore del mouse lungo la riga, si avrà la fusione delle celle che si attraversano con il puntatore.

Private cl As Short


Public Sub Form_Open()

 With GridView1
   .Rows.Count = 3
   .Columns.Count = 3
 End With

End


Public Sub GridView1_Click()

 GridView1.Current.Background = Color.Red

 cl = GridView1.Column

End


Public Sub GridView1_MouseMove()

 If Not Object.IsValid(GridView1.Current) Then Return

 If cl < GridView1.Column Then
   GridView1[GridView1.Row, cl].ColumnSpan = GridView1.Column - cl + 1
 Else 
   GridView1[GridView1.Row, GridView1.Column].ColumnSpan = cl - GridView1.Column + 1
 Endif

' Colora di rosso il gruppo di celle unificato:
 GridView1.Current.Background = Color.Red

End


Unire le celle di due o più colonne

Nell'esempio pratico, che segue, abbiamo una GridView formata da tre righe e tre colonne.
Uniremo in un'unica cella le celle delle tre colonne con riferimento alla prima riga. Inoltre inseriremo nell'unica grande cella un testo al centro.

Public Sub Form_Open()

 With GridView1
   .Rows.Count = 3
   .Columns.Count = 3
 End With

 With GridView1[0, 0]
   .ColumnSpan = 3
   .Alignment = Align.Center
   .Text = "testo"
 End With

End

Unire un gruppo di celle di una colonna individuando con il puntatore del mouse la prima e l'ultima cella del gruppo

In quest'altro esempio le celle, da unire, di una colonna da unire saranno individuate, cliccando sulla prima cella da unire e, (mantenendo premuto il tasto del mouse) dopo esserci spostati con il puntatore del mouse sull'ultima cella da unire, rilasciando su quest'ultima cella il tasto del mouse:

Private rw As Short


Public Sub Form_Open()

 With GridView1
   .Columns.Count = 3
   .Rows.Count = 10
 End With

End


Public Sub GridView1_Click()

 rw = GridView1.Row

End


Public Sub GridView1_MouseUp()

' Consente di ottenere l'unione delle celle su una medesima colonna sia se ci si sposta con il mouse verso il basso, sia verso l'alto:
 With GridView1
   If .Row < rw Then 
     GridView1[.Row, .Column].RowSpan = rw - .Row + 1
   Else 
     GridView1[rw .Column].RowSpan = .Row - rw + 1
   Endif 
 End With

End

Unire le celle di una colonna contestualmente allo spostamento del puntatore del mouse su di esse

In questo caso si cliccherà con il mouse sulla prima cella da unire; poi mantenendo premuto e spostando il puntatore del mouse lungo la colonna, si avrà la fusione delle celle che si attraversano con il puntatore.

Private rw As Short


Public Sub Form_Open()

 With GridView1
   .Rows.Count = 3
   .Columns.Count = 3
 End With

End


Public Sub GridView1_Click()

 GridView1.Current.Background = Color.Red

 rw = GridView1.Row

End


Public Sub GridView1_MouseMove()

 If Not Object.IsValid(GridView1.Current) Then Return

 If rw < GridView1.Column Then
   GridView1[rw, GridView1.Column].ColumnSpan = GridView1.Row - rw + 1
 Else 
   GridView1[GridView1.Row, GridView1.Column].ColumnSpan = rw - GridView1.Row + 1
 Endif

' Colora di rosso il gruppo di celle unificato:
 GridView1.Current.Background = Color.Red

End


Unire più aree di celle già unite

Se, unendo le celle, sono stati realizzati due o più gruppi di celle unificate e si intende unire tra loro tali gruppi unificati, bisognerà partire con il puntatore del mouse dall'area cella, che era stata la prima del gruppo da cui si parte, fino all'area della cella che era stata l'ultima del gruppo che si vuole ora unire al gruppo di partenza.

_


Separare nuovamente le celle precedentemente unite

Con i medesimi codici, sopra descritti, è possibile separare nuovamente le celle che erano state unite.

Se in una cella sono state unificate le celle di più righe (usando la Proprietà ".RowSpan"), per unire due celle va cliccato sulla parte (della cella unificata) superiore alla nuova cella che si intende ricreare.
Similmente, se in una cella sono state unificate le celle di più colonne (usando la Proprietà ".ColumnSpan"), per unire due celle va cliccato sulla parte (della cella unificata) a sinistra della nuova cella che si intende ricreare.