teisipäev, 19. märts 2013

SqlDataSource FilterParameters dünaamiline seadmine


SqlDataSource on abiks võimalus  andmebaasist päringute tegemiseks  eriti siis, kui vaja mõni veebivorm kokku lohistada. Lisaks võimaldab FilterParameters panna peale täiendava filtri andmebaasist saadud tulemustele.

Näiteks kui on vaja andmebaasist saadud infot filtreerida algus- ja lõppkuupäeva järgi siis
määrad SqlDataSource FilterParameters parameetrid
<FilterParameters>
        <asp:Parameter Type="DateTime" Name="Algus" />
        <asp:Parameter Type="DateTime" Name="Lopp" />
    </FilterParameters>
 ja koodis sätid peale FilterExpressioni

this.SqlDataSourceArved.FilterParameters["Algus"].DefaultValue=Convert.ToDateTime(this.valitudaasta+"-01-01").ToShortDateString();            this.SqlDataSourceArved.FilterParameters["Lopp"].DefaultValue=Convert.ToDateTime(this.valitudaasta+"-01-01").AddYears(1).AddDays(-1).ToShortDateString();
string fil = "account_date >= #{0}# AND account_date <= #{1}#"; //kuupäev käib # vahele
this.SqlDataSourceArved.FilterExpression = fil;

ja seejärel GridView-le DataBind() ehk teeme päringu andmebaasi ja mis sealt andmebaasist kätte saame, sinna paneme täiendava filtri otsa. Sobib sageli GridView vormidele vürtsi lisamiseks, et andmed paremini hoomatavad oleksid


Kui aga vaja mitu hüpikmenüüd GridView-le lisada, ehk filtreerida muutuva arvu FilterParameters parameetrite järgi tuleb teha käsitööd, näiteks niimoodi, kus alguses tõmbad kõik FilterParameter parameetrid maha ja lisad seejärel ükshaaval juurde


string fil = "";
this.SqlDataSourceArved.FilterParameters.Clear();  //olemasolevad parameetrid minema
if (this.valitudKorrus != "") //filtreerib korruse järgi
{
            this.SqlDataSourceArved.FilterParameters.Add( new Parameter("serviceId",TypeCode.String,this.valitudKorrus));
            fil = "services_ID = '{0}'";  //string tüübi korral parameeter märkida '{0}'
}
if (this.valitudLeping != "") //filtreerib ka lepingu järgi
{
            this.SqlDataSourceArved.FilterParameters.Add(new Parameter("contractId", TypeCode.UInt32, this.valitudLeping));
            if (fil == "")
            {
                fil = "contracts_ID = {0}";
            }
            else
            {
                fil += " AND contracts_ID = {1}";
            }
}       
this.SqlDataSourceArved.FilterExpression = fil;

tulemuseks kodukootud hüpikmenüüdega GridView

Teada tuleb,et filtri püsivuse säilitamiseks tuleb FilterExpression seada ka GridView Sorting eventis. Siis säilib filter ka tabeli tulpade sorteerimise järel