Ho creato una serie di filtri per le colonne di una tabella.
Funziona eh.
Ma vorrei chiedervi se, prima di tutto, il metodo per la costruzione del filtro è sicura secondo voi.
Se esiste una soluzione più efficiente.
E se esiste qualcosa di automatico, senza cliccare sul pulsante "Filtra", che ad ogni inserimento di carattere o ad ogni cambio dei vari menù mi filtri automaticamente la tabella.
<div class="form-group col-md-2">
<label class="control-label" for="SrcCliente">Cliente</label>
<asp:TextBox ID="SrcCliente" runat="server" CssClass="form-control" OnTextChanged="FiltraGrid" CausesValidation="false" AutoPostBack="true">
</asp:Textbox>
</div>
<div class="form-group col-md-1">
<label class="control-label" for="SrcProv">Prov</label>
<asp:DropDownList AppendDataBoundItems="true" ID="SrcProv" runat="server" CssClass="form-control" DataSourceID="SqlDataSource3" DataTextField="Prov" DataValueField="Prov">
<asp:ListItem Value="-1" Selected="True">Tutti</asp:ListItem>
</asp:DropDownList>
<asp:SqlDataSource runat="server" ID="SqlDataSource3" ConnectionString='<%$ ConnectionStrings:ConnectionString %>' SelectCommand="SELECT DISTINCT Prov FROM Annuale Order by Prov"></asp:SqlDataSource>
</div>
<div class="form-group col-md-3">
<label class="control-label" for="SrcServizio">Servizio</label>
<asp:DropDownList AppendDataBoundItems="true" ID="SrcServizio" runat="server" CssClass="form-control" DataSourceID="SqlDataSource4" DataTextField="Servizio" DataValueField="Id">
<asp:ListItem Value="-1" Selected="True">Tutti</asp:ListItem>
</asp:DropDownList>
<asp:SqlDataSource runat="server" ID="SqlDataSource4" ConnectionString='<%$ ConnectionStrings:ConnectionString %>' SelectCommand="SELECT [Id], [servizio] FROM [servizio]"></asp:SqlDataSource>
</div>
<div class="form-group col-md-2">
<label class="control-label" for="SrcOperatore">Operatore</label>
<asp:DropDownList AppendDataBoundItems="true" ID="SrcOperatore" runat="server" CssClass="form-control" DataSourceID="SqlDataSource5" DataTextField="Nome" DataValueField="Id">
<asp:ListItem Value="-1" Selected="True">Tutti</asp:ListItem>
</asp:DropDownList>
<asp:SqlDataSource runat="server" ID="SqlDataSource5" ConnectionString='<%$ ConnectionStrings:ConnectionString %>' SelectCommand="SELECT [Id], [Nome] FROM [operatori]"></asp:SqlDataSource>
</div>
<div class="form-group col-md-2">
<label class="control-label" for="SrcScadedal">Scadenza dal</label>
<div class='input-group date' >
<asp:TextBox ID="SrcScadedal" runat="server" CssClass="form-control" placeholder="gg/mm/aaaa" ></asp:TextBox>
<span class="input-group-addon">
<span class="fa fa-calendar"></span>
</span>
</div>
</div>
<div class="form-group col-md-2">
<label class="control-label" for="SrcScadeal">Scadenza al</label>
<div class='input-group date' >
<asp:TextBox ID="SrcScadeal" runat="server" CssClass="form-control" placeholder="gg/mm/aaaa" ></asp:TextBox>
<span class="input-group-addon">
<span class="fa fa-calendar"></span>
</span>
</div>
</div>
<asp:Button ID="Button2" runat="server" CausesValidation="false" Text=" Aggiungi" class="fa btn btn-primary btn-sm fa" OnClick="FiltraGrid" />
</div>
il metodo FiltraGrid:
protected void FiltraGrid(object sender, EventArgs e)
{
string com = SrcCliente.Text.ToString().Trim();
string prov = SrcProv.Text.ToString().Trim();
string ser = SrcServizio.Text.ToString().Trim();
string nom = SrcOperatore.Text.ToString().Trim();
string constr = System.Web.Configuration.WebConfigurationManager.ConnectionStrings["ConnectionString"].ConnectionString;
string sql = "SELECT Annuale.Id, Annuale.Cliente, Annuale.Prov, servizio.servizio, operatori.Nome, Annuale.Datascadenza, Annuale.linkweb" +
" FROM Annuale" +
" inner join operatori on Annuale.id_operatore = operatori.id" +
" inner join servizio on servizio.id = Annuale.id_servizio"+
" where 1=1 ";
if (!String.IsNullOrEmpty(com))
{
sql += " AND annuale.Cliente LIKE @Cliente+'%'";
}
if (prov != "-1")
{
sql += " AND annuale.Prov LIKE @Prov";
}
if (ser != "-1")
{
sql += " AND Annuale.id_servizio LIKE @Servizio";
}
if (nom != "-1")
{
sql += " AND Annuale.id_operatore LIKE @Operatore";
}
if (!String.IsNullOrEmpty(SrcScadedal.Text.ToString().Trim()))
{
sql += " AND Annuale.Datascadenza >= @Datada";
}
if (!String.IsNullOrEmpty(SrcScadeal.Text.ToString().Trim()))
{
sql += " AND Annuale.Datascadenza <= @Dataa";
}
SqlConnection connection = new SqlConnection(constr);
SqlCommand cmd = new SqlCommand(sql, connection);
cmd.Parameters.AddWithValue("@Cliente", com);
cmd.Parameters.AddWithValue("@Prov", prov);
cmd.Parameters.AddWithValue("@Servizio", ser);
cmd.Parameters.AddWithValue("@Operatore", nom);
if (!String.IsNullOrEmpty(SrcScadedal.Text.ToString().Trim()))
{
cmd.Parameters.AddWithValue("@Datada", DateTime.Parse(SrcScadedal.Text));
}
if (!String.IsNullOrEmpty(SrcScadeal.Text.ToString().Trim()))
{
cmd.Parameters.AddWithValue("@Dataa", DateTime.Parse(SrcScadeal.Text));
}
cmd.CommandType = CommandType.Text;
connection.Open();
GridView1.DataSource = this.GetData(cmd);
GridView1.DataBind();
}