Visualizzazione dei risultati da 1 a 9 su 9
  1. #1

    [VB.NET 4.0] Sort GridView

    Ciao,

    ho realizzato una GridView contente dati prelevati da un DB MySql.
    Per ogni colonna ho abilitato l'ordinamento.
    A mio malgrado ho settato nel db il formato della data come Varchar, quindi quando clicco su ordina, mi ordina solo in base al giorno (poichè considera la stringa numerica).

    Poiché risulta al quanto oneroso cambiare il formato varchar in date, per svariate ragioni, come posso far prendere alla gridView il campo come data anziché stringa?

    Questo il mio codice:
    codice:
    Protected Sub GridView1_Sorting(sender As Object, e As System.Web.UI.WebControls.GridViewSortEventArgs) Handles GridView1.Sorting
            Dim sortExpression As String = e.SortExpression
    
            Dim direction As String = String.Empty
            If SortDirection = SortDirection.Ascending Then
                SortDirection = SortDirection.Descending
                direction = " DESC"
            Else
                SortDirection = SortDirection.Ascending
                direction = " ASC"
            End If
    
            Dim table As DataTable = GridView1.DataSource
            table.DefaultView.Sort = sortExpression & direction
            GridView1.DataSource = table
            GridView1.DataBind()
    
        End Sub
    
        Public Property SortDirection() As SortDirection
            Get
                If ViewState("SortDirection") Is Nothing Then
                    ViewState("SortDirection") = SortDirection.Ascending
                End If
                Return DirectCast(ViewState("SortDirection"), SortDirection)
            End Get
            Set(ByVal value As SortDirection)
                ViewState("SortDirection") = value
            End Set
        End Property
    grazie
    Giudica i tuoi successi dagli sforzi che hai dovuto compiere per superarli

  2. #2
    Utente di HTML.it L'avatar di pietro09
    Registrato dal
    Jan 2002
    Messaggi
    10,116
    modifica l'sql, per esempio:

    SELECT *, str_to_date(data_stringa, '%d/%m/%Y') as d FROM test.table1
    Pietro

  3. #3
    potresti anche lasciare la data in varchar, ma registrala nel formato YYYYMMDD anziché DDMMYYYY

  4. #4
    pietro09 ci avevo pensato, infatti feci una prova, ma l'ordinamento sembra che non se lo prenda.
    Carico la tabella come mi hai suggerito tu, ma quando clicco su ordina data considera sempre la stringa

    optime cosa intendi? dove dovrei fare questa modifica? sempre nell'sql mostrando ad es: 2013/04/22?
    Giudica i tuoi successi dagli sforzi che hai dovuto compiere per superarli

  5. #5
    Utente di HTML.it L'avatar di pietro09
    Registrato dal
    Jan 2002
    Messaggi
    10,116
    Ho fatto una prova.
    Ho il campo data_stringa con questi dati

    1/4/2013
    2/3/2013
    3/2/2013
    4/1/2013


    il campo str_to_date(data_stringa, '%d/%m/%Y') as d, se lo ordino dà:
    4/1/2013
    3/2/2013
    2/3/2013
    1/4/2013


    sia se provo con asp.net con un GridView, sia se lancio la query da MySQL Workbench

    perciò, vedi te
    Pietro

  6. #6
    Forse non mi sono spiegato prima

    Io al Load della pagina faccio la query col STR_TO_DATE per popolare la GridView.
    Per l'ordinamento, invece, non scrivo direttamente io la nuova query, ma uso la funzionalità automatica di asp.net, ovvero gridview_Sorting (ho postato il codice prima) che in teoria provvede da solo no?
    Giudica i tuoi successi dagli sforzi che hai dovuto compiere per superarli

  7. #7
    Utente di HTML.it L'avatar di pietro09
    Registrato dal
    Jan 2002
    Messaggi
    10,116
    che si può dire.
    Anche io ho usato un GridView e vedo che va.

    l'sql che uso è:

    codice:
        Protected Function Query() As String
            Dim sql As String = String.Format("SELECT *, str_to_date(data_stringa, '%d/%m/%Y') as d from table1 where 1=1 and {0}", Me.ClausolaWhere())
    
            'aggiunge la clausola sort se esiste
            Dim sort As Sort = Me.Ordinamento
            If sort IsNot Nothing AndAlso sort.SortExpression IsNot String.Empty Then
                sql &= " ORDER BY " & sort.ToString
            End If
            Return sql
        End Function
    ps. io andrei in debug; prenderei l'sql trovato e farei una prova col Workbench
    Pietro

  8. #8
    Utente di HTML.it L'avatar di pietro09
    Registrato dal
    Jan 2002
    Messaggi
    10,116
    Nell'esempio di sotto, uso un SqlDataSource e non scrivo una riga di codice; e anche questo va.

    codice:
    <asp:GridView ID="GridView1" runat="server" AllowPaging="True" PagerSettings-Mode="NumericFirstLast" EnableViewState="False" AllowSorting="True" EnablePersistedSelection="True" AutoGenerateColumns="False" DataKeyNames="id" DataSourceID="SqlDataSource1" AutoGenerateSelectButton="True" SortedAscendingCellStyle-BackColor="#FFFF99" SortedDescendingCellStyle-BackColor="#00FF99">
    
    	<PagerSettings Mode="NumericFirstLast"></PagerSettings>
    
    	<SelectedRowStyle BackColor="#DDDFBD" />
    	<Columns>
    		<asp:BoundField DataField="id" HeaderText="id" ReadOnly="True" SortExpression="id" />
    		<asp:BoundField DataField="stringa" HeaderText="stringa" SortExpression="stringa" />
    		<asp:BoundField DataField="numero" HeaderText="numero" SortExpression="numero" />
    		<asp:BoundField DataField="data" HeaderText="data" SortExpression="data" />
    		<asp:BoundField DataField="data_stringa" HeaderText="data_stringa" SortExpression="data_stringa" />
    		<asp:BoundField DataField="data_data" HeaderText="data_data" SortExpression="data_data" />
    	</Columns>
    </asp:GridView>
    <asp:SqlDataSource ID="SqlDataSource1" runat="server" ConnectionString="server=localhost;User Id=test;password=0000;Persist Security Info=True;database=test" ProviderName="MySql.Data.MySqlClient" SelectCommand="SELECT *, str_to_date(data_stringa, '%d/%m/%Y') as data_data from table1"></asp:SqlDataSource>
    Pietro

  9. #9
    Ok, grazie per le prove
    ci sbatto un po' la testa altrimenti me la costruisco io la query per l'ordinamento
    Giudica i tuoi successi dagli sforzi che hai dovuto compiere per superarli

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.