Visualizzazione dei risultati da 1 a 5 su 5
  1. #1
    Utente di HTML.it L'avatar di VaLvOnAuTa
    Registrato dal
    Jun 2002
    Messaggi
    2,003

    [C#] Formattare campo di una DataGrid

    Allora, il problema è questo.
    Ho una datagrid che mi mostra (attraverso una opportuna query ad un database access) le statistiche della durata complessiva delle telefonate di ogni operatore dell'azienda.
    La durata complessiva viene estratta dal database in secondi totali (non è possibile fare altrimenti). Vorrei che nella datagrid venisse visualizzato nel formato hh:ii:ss
    Ora come faccio a modificare il formato del valore?
    Cercando in giro su internet ho trovato che devo definire un metodo sull'evento OnDataBinding della grid.
    Ecco, quindi ora ho
    codice:
    <asp:DataGrid
       runat="server" 
       id="DataGrid2"
       DataSourceID="ObjectDataSourceTime"
       OnDataBinding="ConvertSecsToTime" />
    E nel codice ho la funzione
    codice:
    public void ConvertSecsToTime(object sender, EventArgs e)
    {
        // codice per la sostituzione del valore
    }
    C'è qualche anima pia che possa aiutarmi a sostituire il commento con del codice (o almeno spiegarmi cosa dovrei fare)?

    Grazie

  2. #2
    Moderatore di ASP.net L'avatar di djciko
    Registrato dal
    Nov 2002
    Messaggi
    6,887
    Comincia a mettere (lo scrivo in VB) :

    codice:
    If e.Item.ItemType = ListItemType.Item Or e.Item.ItemType = ListItemType.AlternatingItem Then
            e.item.cells(indice_cella_che_parte_da_zero).text = Converti(e.Item.DataItem("nome_campo_in_secondi"))
    End if

    per la conversione in -Converti- fai un po' di calcoli et voilà
    sorry ma in c# non vorrei scrivere cavolate..

  3. #3
    Utente di HTML.it L'avatar di pietro09
    Registrato dal
    Jan 2002
    Messaggi
    10,116
    questo è solo un esempio, da tradurre in pratica
    codice:
    <%@ Page Language="C#" %>
    
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    
    <script runat="server">
    
        protected void LinkButton1_Click(object sender, EventArgs e)
        {
            double secondi = double.Parse(this.TextBox1.Text);
            long ticks = (long)(secondi * 1e7);
    
            DateTime dt = new DateTime(ticks);
    
            this.lbl1.Text = dt.ToString("HH\\:mm\\:ss");
            
        }
    </script>
    
    <html xmlns="http://www.w3.org/1999/xhtml" >
    <head runat="server">
        <title>Pagina senza titolo</title>
    </head>
    <body>
        <form id="form1" runat="server">
        <div>
            Secondi totali:
            <asp:TextBox ID="TextBox1" runat="server">0</asp:TextBox>
            <asp:Label id="lbl1" runat="server"></asp:Label>
            
            
    
            <asp:LinkButton ID="LinkButton1" runat="server" OnClick="LinkButton1_Click">formatta</asp:LinkButton></div>
        </form>
    </body>
    </html>
    in pratica mi converto i secondi totali in un oggetto DateTime e lo riconverto in stringa formattata HH:mm:ss

    Detto questo, io farei come suggerisce djciko: qualche calcolo ...
    ore = parte intera di secondi / 3600

    minuti = la parte intera del resto * 60

    secondi : idem

    etc. etc..





    Pietro

  4. #4
    Utente di HTML.it L'avatar di VaLvOnAuTa
    Registrato dal
    Jun 2002
    Messaggi
    2,003
    Risolto
    Innanzitutto non dovevo sfruttare l'evento "OnDataBinding" ma "OnItemDataBound" e la funzione viene pressappoco così:
    codice:
        public void ConvertSecsToTime(object sender, DataGridItemEventArgs e)
        {
            int tmp = 0;
            int t = 0;
            int h = 0;
            int m = 0;
            int s = 0;
            if (e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem) {
                tmp = Convert.ToInt32(e.Item.Cells[1].Text);
                h = tmp / 3600;
                t = tmp % 3600;
                m = t / 60;
                s = t % 60;
                e.Item.Cells[1].Text = string.Format("{0:D2}:", h) + string.Format("{0:D2}:", m) + string.Format("{0:D2}", s);
            }
        }
    Grazie per l'aiuto djciko

  5. #5
    Moderatore di ASP.net L'avatar di djciko
    Registrato dal
    Nov 2002
    Messaggi
    6,887
    Originariamente inviato da VaLvOnAuTa
    Risolto
    Grazie per l'aiuto djciko
    mi sembra "Non ci resta che piangere".... Con Benigni che fa tutto e la vecchina che dice sempre "Grazie Mario" (a Troisi)

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.