Ciao ho un problema con il Sort Manuale del gridview
mio scopo è creare una header personalizzata che tramite delle frecce (piccole immagini)indicano se il sort è crescente o descescente.
ho trovato un esempio in rete che ho cercato di adattare alle mie necessità ma con notevoli difficoltà
Problemi. la routine richiamata da gridview
]OnSorting="GridView1_Sorting" non attiva il codice al click sulle colonne ( si attiva il postback ma senza che la sub viene attivata). Mi sono accorto che il problema è legato alla Sub gv_rowcreated. (se disattivo quest'ultima la Sub GridView1_Sorting si attiva al click )
cosa sbaglio?
grazie
invio una frazione del gridview interessato al problema
+ codice per il sort
<asp:GridView ID="gvShowRecord"
runat="server"
CellPadding="4"
ForeColor="#333333"
GridLines="None"
AllowPaging="True"
AutoGenerateColumns="False"
AllowSorting="True"
DataKeyNames="PN_CODE"
OnRowCreated="gv_rowcreated"
OnSorting="GridView1_Sorting"
DataSourceID="AccessDataSource2"
Height="78px"
HeaderStyle-Wrap="False"
ShowFooter="True" EnableViewState="True">
qui ricavo la testata della colonna e gli inserisco l'immagine
Sub gv_rowcreated(ByVal sender As Object, ByVal e As GridViewRowEventArgs)
If e.Row.RowType = DataControlRowType.Header Then
Dim nomecolonna As String
Dim numCell As Integer
numCell = e.Row.Cells.Count
For I = 0 To numCell - 1
Dim linkbuttonordinamento As LinkButton
linkbuttonordinamento = e.Row.Cells(I).Controls(0)
nomecolonna = linkbuttonordinamento.Text
Dim ImageButtonOrdinamento As New ImageButton
ImageButtonOrdinamento.CommandName = linkbuttonordinamento.CommandName
Dim commandArgument As String = linkbuttonordinamento.CommandArgument
ImageButtonOrdinamento.CommandArgument = commandArgument
ImageButtonOrdinamento.ToolTip = "Ordina per " + nomecolonna
ImageButtonOrdinamento.Width = 15
' ########## stabilisco l'immagine da visualizzare
ImageButtonOrdinamento.ImageUrl = "~/images/frsun.gif"
If ViewState("SortExpression") IsNot Nothing Dim sortExpression As String = ViewState("SortExpression").ToString
If linkbuttonordinamento.CommandArgument = sortExpression Then
If ViewState("SortDirection").ToString = "DESC" Then
ImageButtonOrdinamento.ImageUrl = "~/images/frgiu.gif"
Else
ImageButtonOrdinamento.ImageUrl = "~/images/frsu.gif"
End If
End If
End If
' ########## Creo il controllo Label
Dim labelNomeColonna As New Label
Dim tableOrd As New Table()
Dim tableRowOrd As New TableRow()
Dim tableCell0 = New TableCell()
Dim tableCell1 As New TableCell
labelNomeColonna.Text = nomecolonna + " "
labelNomeColonna.Height = 9
tableCell0.Controls.Add(labelNomeColonna)
tableRowOrd.Cells.Add(tableCell0)
tableCell1.Controls.Add(ImageButtonOrdinamento)
tableRowOrd.Cells.Add(tableCell1)
tableOrd.Rows.Add(tableRowOrd)
' ########## cancello il controllo linkbutton dalla cella
e.Row.Cells(I).Controls.Remove(linkbuttonordinamento)
' ########## Aggiungo il nuovo controllo
e.Row.Cells(I).Controls.Add(tableOrd)
Next
End If
End Sub
questa che segue è la funzione incriminata
il codice viene attivato solo se disattivo la funzione gv_rowcreated
altrimenti sembra che viene ignorata.
Sub GridView1_Sorting(ByVal sender As Object, ByVal e As GridViewSortEventArgs)
Dim Sorte As String = ""
Dim Sortd As String = ""
If ViewState("SortEspression") IsNot Nothing Then
Sorte = ViewState("SortExpression").ToString
Sortd = ViewState("SortDirection").ToString
If Sorte = e.SortExpression.ToString Then
Beep()
ViewState("SortDirection") = ChangeDirection(Sortd)
Else
ViewState("SortExpression") = e.SortExpression
ViewState("SortDirection") = "ASC"
End If
Else
ViewState("SortExpression") = e.SortExpression
ViewState("SortDirection") = "ASC"
End If
End Sub
questa funzione è richiamata da GridView1_Sorting per cambiare la direzione del sorting
Function ChangeDirection(ByVal oldDirection As String) As String
Dim newDirection As String = ""
Select Case oldDirection
Case "ASC"
newDirection = "DESC"
Case Else
newDirection = "ASC"
End Select
Return newDirection
End Function