MERGE GRIDVIEW

JCMSIS 27/09/2011 16:06:13
#385396
Alguém ja conseguiu dar Merge no GridView em campos iguais? Se já como foi feito por favor? Eu trabalho com Asp.net Vb.
MARCELOSN 27/09/2011 17:17:02
#385401
Boa tarde



Segue classe que faz a tarefa


==================================================================================================================
Dentro do vb.net chame a classe sendo a mesmo como PRERENDER para executar a tarefa onde antes de apresentar os dados o sistema fará a verificação para mesclar

Protected Sub NomeGridView_PreRender(ByVal sender As Object, ByVal e As System.EventArgs) Handles NomeGridView.PreRender
GridDecorator.MergeRows(NomeGridView)
End Sub

==================================================================================================================
Criando uma classe para todo o sistema onde podemos mesclar celular com valores iguais

Public Class GridDecorator
Public Shared Sub MergeRows(ByVal gridView As GridView)
Dim rowIndex As Integer = (gridView.Rows.Count - 2)
Do While (rowIndex >= 0)
Dim row As GridViewRow = gridView.Rows(rowIndex)
Dim previousRow As GridViewRow = gridView.Rows((rowIndex + 1))
Dim i As Integer = 0
Do While (i < row.Cells.Count)
If (row.Cells(i).Text = previousRow.Cells(i).Text) Then
row.Cells(i).RowSpan = (previousRow.Cells(i).RowSpan < 2)
previousRow.Cells(i).Visible = False
End If
i = (i + 1)
Loop
rowIndex = (rowIndex - 1)
Loop
End Sub
End Class



Espero ter ajudado

JCMSIS 27/09/2011 17:30:21
#385408
Ele apresentou o seguinte erro:
[Ô]Specified argument was out of the range of valid values.
Parameter name: value[Ô]

na linha:
row.Cells(i).RowSpan = (previousRow.Cells(i).RowSpan < 2)

Alguma sugestão?
KERPLUNK 27/09/2011 18:56:29
#385410
Faça o merge da sua fonte de dados e não dos dados renderizados no grid...
JCMSIS 28/09/2011 08:10:20
#385446
E como faço vc pode me ajudar?
JCMSIS 28/09/2011 08:18:26
#385447
Eu fiz dessa maneira:

Static RowSpan As Integer
Static PrevItem As String
Static FirstItemInIndex As Integer
If (e.Row.RowIndex = 0) Then
PrevItem = e.Row.Cells(0).Text
FirstItemInIndex = 0
RowSpan = 0
End If
If (e.Row.RowType = DataControlRowType.DataRow) Then
If (PrevItem = e.Row.Cells(0).Text) Then
If (e.Row.RowIndex <> FirstItemInIndex) Then
e.Row.Cells.RemoveAt(0)
End If
RowSpan += 1
Else
Dim FirstCell = GridView1.Rows(FirstItemInIndex).Cells(0)
FirstCell.RowSpan = RowSpan
FirstItemInIndex = e.Row.RowIndex
PrevItem = e.Row.Cells(0).Text
RowSpan = 1
End If
End If
If (e.Row.RowIndex = RowCount - 1) Then
Dim FirstCell = GridView1.Rows(FirstItemInIndex).Cells(0)
FirstCell.RowSpan = RowSpan
End If

Ele até funcionou só que para um unico registro ou seja só o primeiro repetido e não mostrou os outros poderia me ajudar por favor?
JCMSIS 28/09/2011 15:20:08
#385490
Consegui fazer o modelo acima funcionar só que só mostra o primeiro campo os demais não mostra como devo fazer para mostrar os outros?
Tópico encerrado , respostas não são mais permitidas