protected void BindGrid(DDTMefObject ddt = null)
        {
            List <DDTMef> items = ddt == null?DDTMefDAO.GetAll(500) : DDTMefDAO.GetDdt(ddt);

            grdListaDDTMef.DataSource = items;
            grdListaDDTMef.DataBind();

            // Imposto i campi di riepilogo
            txtMedia.Text         = (items.Sum(s => s.PrezzoUnitario) / (items.Count() == 0 ? 1 : items.Count())).ToString("0.00") + " €";
            txtTotDDT.Text        = items.Sum(s => s.Importo).ToString("N2") + " €";
            txtImponibileDDT.Text = items.Sum(s => (s.Importo * 100) / (100 + s.Iva)).ToString("N2") + " €";
            txtIvaDDT.Text        = items.Sum(s => s.Importo - (100 * s.Importo / (100 + s.Iva))).ToString("N2") + " €";
        }
        //public static List<string> GetJson()
        //{
        //    List<string> ret = new List<string>();
        //    StringBuilder sql = new StringBuilder();
        //    sql.AppendLine($"SELECT *");
        //    sql.AppendLine($"FROM TblDDTMef");
        //    sql.AppendLine($"ORDER BY Anno, Data, N_DDT, CodArt");
        //    sql.AppendLine($"FOR JSON PATH");
        //    try
        //    {
        //        using (SqlConnection cn = GetConnection())
        //        {
        //            ret = cn.Query<string>(sql.ToString()).ToList();
        //        }
        //    }
        //    catch (Exception ex)
        //    {
        //        throw new Exception("Errore durante il recupero dei DDT in formato JSON", ex);
        //    }
        //    return ret;
        //}

        public static List <DDTMef> GetDdt(DDTMefObject ddt)
        {
            List <DDTMef> ret          = new List <DDTMef>();
            StringBuilder sql          = new StringBuilder();
            StringBuilder queryFilters = new StringBuilder();

            // Filtri Generici
            queryFilters.AppendLine($"Qta LIKE '%{ddt.Qta}%' AND N_DDT LIKE '%{ddt.NDdt}%'");
            queryFilters.AppendLine($"AND CodArt LIKE '%{ddt.CodArt1}%' AND CodArt LIKE '%{ddt.CodArt2}%' AND CodArt LIKE '%{ddt.CodArt3}%'");
            queryFilters.AppendLine($"AND DescriCodArt LIKE '%{ddt.DescriCodArt1}%' AND DescriCodArt LIKE '%{ddt.DescriCodArt2}%' AND DescriCodArt LIKE '%{ddt.DescriCodArt3}%'");

            sql.AppendLine($"SELECT IdDDTMef, Anno, Data, N_DDT, CodArt,");
            sql.AppendLine($"DescriCodArt, Qta, Importo, Acquirente, PrezzoUnitario, AnnoN_DDT");
            sql.AppendLine($"FROM TblDDTMef");

            // Controllo i casi in cui entrambi gli anni o le date siano state valorizzate
            // Oppure quanto tutti quanti sono vuoti
            // Altrimenti faccio una where generica per tutti gli altri casi
            if (ddt.AnnoInizio != "" && ddt.AnnoFine != "")
            {
                sql.AppendLine($"WHERE (ANNO BETWEEN @AnnoInizio AND @AnnoFine) AND {queryFilters}");
            }
            else if (ddt.DataInizio != "" && ddt.DataFine != "")
            {
                sql.AppendLine($"WHERE (Data BETWEEN CONVERT(Date,@DataInizio) AND CONVERT(Date,@DataFine)) AND {queryFilters}");
            }
            else if (ddt.AnnoInizio == "" && ddt.AnnoFine == "" && ddt.DataInizio == "" && ddt.DataFine == "")
            {
                sql.AppendLine($"WHERE {queryFilters}");
            }
            else
            {
                sql.AppendLine($"WHERE ((ANNO = @AnnoInizio OR Anno = @AnnoFine) OR (Data = CONVERT(Date, @DataInizio) OR Data = CONVERT(Date, @DataFine))) AND {queryFilters}");
            }
            sql.AppendLine($"ORDER BY Anno, Data, N_DDT, CodArt");
            try
            {
                using (SqlConnection cn = GetConnection())
                {
                    ret = cn.Query <DDTMef>(sql.ToString(), new { ddt.AnnoInizio, ddt.AnnoFine, ddt.DataInizio, ddt.DataFine }).ToList();
                }
            }
            catch (Exception ex)
            {
                throw new Exception("Errore durante la ricerca dei DDT Mef", ex);
            }
            return(ret);
        }