evento temporizzato(forse con un timer?)

dannyboy

Nuovo Utente
8 Lug 2009
1
0
0
Codice:
public partial class _Default : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {
      
            DataTable dt = new DataTable();
            String connectionString = "Data Source=localhost;Initial Catalog=xx;User Id=xx;Password=xx;";
            SqlConnection cn = new SqlConnection(connectionString);
            SqlDataReader myReader = null;
            XmlDocument doc = new System.Xml.XmlDocument();
            String testoquery = "";
            XmlNodeList nodi;
            doc.Load("C:/.../App_Data/queries.xml");
            nodi = doc.GetElementsByTagName("query");
            int righe = 0;

            foreach (XmlNode nodo in nodi)
            {
                if (nodo.FirstChild.InnerText == "pagina4prestazioni")
                    testoquery = nodo.FirstChild.NextSibling.InnerText;
            }
            try
            {
                SqlCommand cmd = new SqlCommand(testoquery, cn);
                cn.Open();
                myReader = cmd.ExecuteReader();
                dt.Load(myReader);

                int i = 0;
                foreach (DataRow row in dt.Rows)
                {
                    righe++;
                }//ho il numero di righe(quindi di eventi)che si sono verificati

                String[] eventi = new String[righe];

                foreach (DataRow row in dt.Rows)
                {
                    eventi[i] = row["U_desc"].ToString();
                    i++;
                }//ho un array eventi conenente i nomi di tutti gli eventi
                for (int j = 2; j <= righe-1; j++)//parto da 2 perchè i primi 2 valori sono righe vuote
                {
                    String p = eventi[j].ToString();
                    Label2.Text = p;
                    gvdati.DataSource = elaboraQuery02(eventi, j);
                    gvdati.DataBind();
                    gvdati01.DataSource = elaboraQuery01(eventi, j);
                    gvdati01.DataBind();
                    gvdati02.DataSource = elaboraQuery(eventi, j);
                    gvdati02.DataBind();
                    if (j == (righe - 1))
                        j = 1;
                    System.Threading.Thread.Sleep(5000);
                }
              
            }

            catch (SqlException)
            {

            }
            finally
            {
                cn.Close();
                myReader.Close();
            }
    }
    //------------------------------metodi per la pasqua-------------------------------
    public DateTime GetPasqua(int anno)
    {
        int giorno, mese;
        int a, b, c, d, e, f, n, h, i, k, l, m;

        a = anno % 19;
        b = anno / 100;
        c = anno % 100;
        d = b / 4;
        e = b % 4;
        f = (b + 8) / 25;
        n = (b - f + 1) / 3;
        h = (19 * a + b - d - n + 15) % 30;
        i = c / 4;
        k = c % 4;
        l = (32 + 2 * e + 2 * i - h - k) % 7;
        m = (a + 11 * h + 22 * l) / 451;
        giorno = ((h + l - 7 * m + 114) % 31) + 1;
        mese = (h + l - 7 * m + 114) / 31;

        return (new DateTime(anno, mese, giorno));
    }
    public Boolean isPasqua(DateTime d)
    {
        DateTime pasqua = GetPasqua(d.Year);
        //calcolo settimana di pasqua
        //se pasqua viene il 4 aprile devo far si che il 29 marzo mi metta settimana di pasqua!
        if (pasqua.Day < 7 & d.AddMonths(1).Month == pasqua.Month & d.AddDays(7).Day > pasqua.Day & d.AddDays(7).Month == pasqua.Month)
            return true;
        if (d.Day < (pasqua.Day) & (d.Day + 7) > (pasqua.Day) & d.Month == pasqua.Month)
            return true;
        return false;
    }
    //*********************************************************************************

    public DataTable elaboraQuery(String[] eventi, int j)
    {
        DataTable dt = new DataTable();
        String connectionString = "Data Source=localhost;Initial Catalog=xx;User Id=xx;Password=xx;";
        SqlConnection cn = new SqlConnection(connectionString);
        SqlDataReader myReader = null;
        XmlDocument doc = new System.Xml.XmlDocument();
        String testoquery = "";
        XmlNodeList nodi;
        doc.Load("C:/.../App_Data/queries.xml");
        nodi = doc.GetElementsByTagName("query");
        String pippo = eventi[j].ToString();

        foreach (XmlNode nodo in nodi)
        {
            if (nodo.FirstChild.InnerText == "pagina4annocorrente")
                testoquery = nodo.FirstChild.NextSibling.InnerText;
        }
        DateTime a = DateTime.Now;
        if (Convert.ToInt32(a.DayOfWeek) == 2) a.AddDays(-1);
        if (Convert.ToInt32(a.DayOfWeek) == 3) a.AddDays(-2);
        if (Convert.ToInt32(a.DayOfWeek) == 4) a.AddDays(-3);
        if (Convert.ToInt32(a.DayOfWeek) == 5) a.AddDays(-4);
        if (Convert.ToInt32(a.DayOfWeek) == 6) a.AddDays(-5);
        if (Convert.ToInt32(a.DayOfWeek) == 7) a.AddDays(-6);
        DateTime b = DateTime.Now.AddYears(-1);
        if (Convert.ToInt32(b.DayOfWeek) == 2) b.AddDays(-1);
        if (Convert.ToInt32(b.DayOfWeek) == 3) b.AddDays(-2);
        if (Convert.ToInt32(b.DayOfWeek) == 4) b.AddDays(-3);
        if (Convert.ToInt32(b.DayOfWeek) == 5) b.AddDays(-4);
        if (Convert.ToInt32(b.DayOfWeek) == 6) b.AddDays(-5);
        if (Convert.ToInt32(b.DayOfWeek) == 7) b.AddDays(-6);
        DateTime c = DateTime.Now.AddYears(-2);
        if (Convert.ToInt32(c.DayOfWeek) == 2) c.AddDays(-1);
        if (Convert.ToInt32(c.DayOfWeek) == 3) c.AddDays(-2);
        if (Convert.ToInt32(c.DayOfWeek) == 4) c.AddDays(-3);
        if (Convert.ToInt32(c.DayOfWeek) == 5) c.AddDays(-4);
        if (Convert.ToInt32(c.DayOfWeek) == 6) c.AddDays(-5);
        if (Convert.ToInt32(c.DayOfWeek) == 7) c.AddDays(-6);
        if (isPasqua(a))
        {
            b = GetPasqua(b.Year);
            b.AddDays(-6);
            c = GetPasqua(c.Year);
            c.AddDays(-6);
        }
        if (isPasqua(b))
        {
            a = GetPasqua(a.Year);
            a.AddDays(-6);
            c = GetPasqua(c.Year);
            c.AddDays(-6);
        }
        if (isPasqua(c))
        {
            b = GetPasqua(b.Year);
            b.AddDays(-6);
            a = GetPasqua(a.Year);
            a.AddDays(-6);
        }
        try
        {
            SqlCommand cmd = new SqlCommand(testoquery, cn);
            cmd.Parameters.AddWithValue("@dataInizio", a);
            cmd.Parameters.AddWithValue("@dataFine", a.AddDays(6));
            cmd.Parameters.AddWithValue("@eventi", pippo);

            cn.Open();
            myReader = cmd.ExecuteReader();
            dt.Load(myReader);
            myReader.Close();

        }

        catch (SqlException)
        {

        }
        finally
        {
            cn.Close();
        }
        return dt;
    }
    public DataTable elaboraQuery01(String[] eventi, int j)
    {
      preciso ed identico ad elaboraQuery solo che prende i dati per lo scorso anno  
    }
    public DataTable elaboraQuery02(String[] eventi, int j)
    {
        preciso ed identico ad elaboraQuery solo che prende i dati di 2 anni fa        
    }
}

ok dopo aver buttato li righe e righe di codice(lo so sembra tanta roba ma se guardate bene è molto ripetitivo) vi spiego quello che faccio e che vorrei ottenere...premetto che le query funzionano tutte e danno il loro risultato. In pratica prendo la settimana corrente degli anni 2009/08/07 controllando se è la settimana di pasqua, chiamo il metodo elaboraquery che altro non fa che restituire un datatable contenente il nome dell evento, quante volte si è svolto quel preciso evento nella settimana e quante persone vi hanno partecipato(questo lo ripeto per ogni anno). il vero problema qual è? io vorrei che nella pagina che mi si carica vi sia una label contenente il nome dell evento (tipo...fiera della polenta anche se con questo caldo non è il massimo...) e poi le 3 datatable bindate con 3 diverse gridview che mostrino i risultati delle 3 diverse interrogazioni...a questo punto dopo x secondi vorrei che la label mostrasse l evento successivo e le 3 gridview aggiornate coi nuovi valori e così via per tutti i valori dell array "eventi" e ,una volta arrivati all ultimo valore dell array, ricominciare dal primo eciclare così all infinito fino a che non chiudo la pagina web. Avevo pensato questa cosa
Codice:
for (int j = 2; j <= righe-1; j++)//parto da 2 perchè i primi 2 valori sono righe vuote
{
String p = eventi[j].ToString();
Label2.Text = p;
gvdati.DataSource = elaboraQuery02(eventi, j);
gvdati.DataBind();
gvdati01.DataSource = elaboraQuery01(eventi, j);
gvdati01.DataBind();
gvdati02.DataSource = elaboraQuery(eventi, j);
gvdati02.DataBind();
if (j == (righe - 1))
j = 1;
System.Threading.Thread.Sleep(5000);
}

purtroppo non funziona..credo che il fatto sia che se uso thread.sleep l applicazione si mette semplicemente a dormire e basta senza far vedere i risultati. ho provato anche a scandire solo una volta l array senza ciclare ma il risultato non cambia. se invece ,al posto di j passo un numero a mia scelta e non metto thread.sleep, il tutto funziona alla perfezione...come potrei modificare il codice per far si che questa cosa dei 5 secondi possa funzionare?
Che debba usare un Timer? se si come? non so proprio dove mettere le mani :( beh se siete arrivati a leggere fino a qui senza odiarmi....non so proprio come ringraziarvi :D
ciao a tutti

P.S. uso c# e visual studio 2005(quindi framework 2.0)
 

Vins

Moderatore
Membro dello Staff
MOD
28 Lug 2009
238
19
0
Per utilizzare un timer puoi provare a modificare il codice della classe in questo modo:

int j = 2;

System.Windows.Forms.Timer timer1;
this.timer1.Enabled = true;
timer1.Interval = 5000;
this.timer1.Tick += new System.EventHandler(this.timer1_Tick);

private void timer1_Tick(object sender, EventArgs e)
{

String p = eventi[j].ToString();
Label2.Text = p;
gvdati.DataSource = elaboraQuery02(eventi, j);
gvdati.DataBind();
gvdati01.DataSource = elaboraQuery01(eventi, j);
gvdati01.DataBind();
gvdati02.DataSource = elaboraQuery(eventi, j);
gvdati02.DataBind();
if (j == (righe - 1))
j = 2;
else
j++;

timer1.Start();
}

In questo modo dovresti ottenere il comportamento corretto. Attenzione che nel Page_Load l'evento Tick la prima volta lo devi fare scattare tu, altrimenti scatterà la prima volta dopo 5 secondi anche all'inizio. Comunque puoi operare su timer1.Interval per ottenere il comportamento desiderato.
 
Discussioni simili
Autore Titolo Forum Risposte Data
C ID che si incrementa ad ogni evento Database 0
T Query per ricerca ritardo evento MS Access 7
elpirata [MYSQL] Schedulare evento per update del campo data su tabella MySQL 0
C creare evento mysql MySQL 2
Sermatth72 APACHE ERRORE 1 - AH00558: httpd.exe, e ID Evento 3299 Apache 3
A [Javascript] evento onresize Javascript 1
S [Javascript] Catturare l'evento click di un bottone Javascript 3
francabbestia [Javascript] Scattare una foto da webcam quando avviene un evento Javascript 1
A Evento onkeypress (Invio) PHP 10
A Evento onkeypress (Invio) HTML e CSS 2
G evento collided Sviluppo app per Android 1
B Evento blur chiamata file php jQuery 1
G Evento ".onClick" su oggetto di d3.js Javascript 0
K evento click - link a pagina.php con parametri HTML e CSS 3
F Caricare immagine da Mysql su evento click-radio Javascript 5
E evento... magari! problema PHP 2
F Gestione evento checkbox Javascript 5
M HTML5 datalist evento onchange HTML e CSS 1
K Problema evento onchange Javascript 1
V non mi funziona l' evento per riconoscere un pulsante da tastiera Javascript 0
W Evento Back con Jquery jQuery 1
S [RISOLTO]Carica pagina da evento onclick di una griglia Javascript 12
F Evento al secondo click su un ancora jQuery 21
P Cambiare evento da "click" in "premi tasto invio" jQuery 3
Sevenjeak [vb.net] evento MDIChildActived Visual Basic 0
GoshMaledetto problemino evento click jQuery 4
GoshMaledetto La funzione non viene richiamata all evento onChange Javascript 5
E Evento click su Coordinate jQuery 1
F gestire evento onclick Javascript 4
carter Link lampeggiante per trasmissione evento Classic ASP 0
P [VENDO] "trucchetto" per inviare tutti amici a evento o pagina Annunci servizi di Social Media Marketing 0
L Evento:MEMENTO AUDERE WEB A PESCARA SEO e Posizionamento 0
W domanda su evento al passare del mouse Javascript 2
A help, modificare evento per un singolo elemento Javascript 0
W [C#] Quale evento per DataGridViewCheckBoxCell ?? .NET Framework 1
E [JAVA] modificare Script per evento onmouseover Javascript 0
S NATO DA POCO MA Caspita! www.festaking.it organizzi on line ogni tipo di festa evento Presenta il tuo Sito 5
D MOTOOLS: come fare ad avere un evento che periste quando si sta dentro un elemento? Javascript 2
R evento onChange() Javascript 0
T [Java] Problema evento Java 1
A associare un evento a tanti fotogrammi Flash 1
F Evento Onchange Javascript 2
P Aggiungi evento di controllo campo testo Ajax 11
F l'evento onchange non funziona su FF Classic ASP 1
A Visualizzare Un Immagine Dopo Un Evento PHP 4
simoncino Cletarte - Evento artistico a Cleto (CS) Presenta il tuo Sito 1
N 8 > 23 Febbraio: Doppio Evento Live a Roma con Tony Braschi Altri Annunci 0
U 2007: 8 & 23 Febbraio - Doppio Evento a Roma Discussioni Varie 0
U 2007: 8 & 23 Febbraio - Doppio Evento a Roma Altri Annunci 0
vicky script "evento onChange di una select" Javascript 0

Discussioni simili