// Chiamato da bottone indietro del pager
 protected void btnPrevious_Click(object sender, EventArgs e)
 {
     if (GV_ListaOre.PageIndex > 0)
     {
         GV_ListaOre.PageIndex--;
         CostruiciGriglia();
         GV_ListaOre.DataBind();
     }
 }
 // Chiamato da bottone avanti del pager
 protected void btnNext_Click(object sender, EventArgs e)
 {
     if (GV_ListaOre.PageIndex < (GV_ListaOre.PageCount - 1))
     {
         GV_ListaOre.PageIndex++;
         CostruiciGriglia();
         GV_ListaOre.DataBind();
     }
 }
    // Chiamato da DropDownList del pager
    protected void Paging_SelectedIndexChanged(object sender, EventArgs e)
    {
        GridViewRow  pagerRow = GV_ListaOre.BottomPagerRow;
        DropDownList pageList = (DropDownList)pagerRow.Cells[0].FindControl("PageDropDownList");

        GV_ListaOre.PageIndex = pageList.SelectedIndex;

        CostruiciGriglia();
        GV_ListaOre.DataBind();
    }
    // Esporta tabella in excel
    protected void BtnExport_Click(object sender, System.EventArgs e)
    {
        Response.ClearContent();
        Response.Buffer = true;
        Response.AddHeader("content-disposition", string.Format("attachment; filename={0}", "TRexport.xls"));
        Response.ContentType = "application/ms-excel";
        StringWriter   sw  = new StringWriter();
        HtmlTextWriter htw = new HtmlTextWriter(sw);

        GV_ListaOre.AllowPaging = false;
        CostruiciGriglia();

        GV_ListaOre.RenderControl(htw);
        Response.Write(sw.ToString());
        Response.End();
    }
    // Costruisce la griglia
    protected void  CostruiciGriglia()
    {
        string sWhere  = "";
        string sSelect = "";

        string sMese = Request.QueryString["mese"].ToString();
        string sAnno = Request.QueryString["anno"].ToString();

        string sDataInizio = ASPcompatility.FormatDateDb("1/" + sMese + "/" + sAnno, false);
        string sDataFine   = ASPcompatility.FormatDateDb(System.DateTime.DaysInMonth(Convert.ToInt16(sAnno), Convert.ToInt16(sMese)) + "/" + sMese + "/" + sAnno, false);

        // Inizializza tabella DATAGRID -> campi DEVONO corrispondere a quelli della dataGrid
        DataTable dt = new DataTable();

        dt.Columns.Add("Nome");
        dt.Columns.Add("Società");
        dt.Columns.Add("Data");
        dt.Columns.Add("Ore caricate");
        dt.Columns.Add("Ore Contratto");
        dt.Columns.Add("Straordinario");

        // Seleziona le persone tenendo conto della società immessa come filtro
        if (DL_societa.SelectedValue != "all")
        {
            sWhere = "c.company_id = " + DL_societa.SelectedValue.ToString() + " AND ";
        }

        sSelect = "select b.Name as Nome, c.Name as Societa, a.Date as data, sum(a.Hours) as ore, b.ContractHours as OreContratto, sum(a.Hours) - b.ContractHours as straordinario from Hours as a " +
                  " left join Persons as b on b.Persons_id = a.Persons_id " +
                  " left join Company as c on c.Company_id = b.Company_id " +
                  " left join Projects as d on d.Projects_id = a.Projects_id " +
                  " where " + sWhere + " a.date >= " + sDataInizio + " and a.date <= " + sDataFine + " GROUP BY a.date, b.Name, c.name, b.ContractHours ORDER BY b.Name, a.date";

        // Esegue Select e popola DataTable
        DataTable dtHours = Database.GetData(sSelect, this.Page);

        foreach (DataRow rdr in dtHours.Rows)
        {
            if (rdr["Nome"] == DBNull.Value)
            {
                continue;
            }

            DataRow dr = dt.NewRow();
            dr["Nome"]          = rdr["Nome"];
            dr["Società"]       = rdr["Societa"];
            dr["Data"]          = ((DateTime)rdr["Data"]).ToString("d");
            dr["Ore caricate"]  = Convert.ToDecimal(rdr["ore"]).ToString("0.00");
            dr["Ore Contratto"] = Convert.ToDecimal(rdr["OreContratto"]).ToString("0.00");
            dr["Straordinario"] = Convert.ToDecimal(rdr["straordinario"]).ToString("0.00");

            dt.Rows.Add(dr);
        }

        // sort
        dt.DefaultView.Sort = "Nome";
        dt.DefaultView.ToTable();

        // Caricamento DataGrid
        GV_ListaOre.DataSource = dt;
        GV_ListaOre.DataBind();
    }