MERGE GRIDVIEW
Alguém ja conseguiu dar Merge no GridView em campos iguais? Se já como foi feito por favor? Eu trabalho com Asp.net Vb.
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
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
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?
[Ô]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?
Faça o merge da sua fonte de dados e não dos dados renderizados no grid...
E como faço vc pode me ajudar?
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?
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?
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