pühapäev, 8. aprill 2018

Andmeseti hoidmine peale päringut


Mõnikord siis baasi päring kestab kaua ja midagi pole teha, päring käib sekundeid ja kui soov pärast kasutada DataGridi tulpade sorteerimist siis pole aega oodata, teist korda baasist päringut teha ei ole mõtekas.

Lahendab olukorra nii, et päringustsaadud andmeseti paneb kas Sessioni või ViewState-e ja järgmistel operatsioonidel, näiteks tulpade sorteerimine kasutab salvestatud andmeseti tulemusi.

private DataTable dt
        {
            set { this.ViewState["dt"] = value; }
            get { return (DataTable)this.ViewState["dt"]; }
        }

Andmete lugemine DataSeti SqlDataReader-ist

SqlDataReader red = komm.ExecuteReader();
this.dt = new DataTable();
this.dt.Load(red);
this.GridViewVolad.DataSource = this.dt;
this.GridViewVolad.DataBind();

SqlDataSource-st, peale parameetritele väärtuste andmist

DataSourceSelectArguments args = new DataSourceSelectArguments();
DataView view = (DataView)SqlDataSourceYyrnikud.Select(args);
this.dt = view.ToTable();
this.GridView1.DataSource = this.dt;
this.GridView1.DataBind();

GridView sorteerimiseks on vajalikud meeles pidada sorteerimisjärjestus ja sortimisavaldus

        private string SortExpression
        {
            set { this.ViewState["SortExpression"] = value; }
            get
            {
                if (this.ViewState["SortExpression"] == null)
                {
                    this.ViewState["SortExpression"] = "ACCOUNT_ID";  //vaikimisi järjestus
                }
                return this.ViewState["SortExpression"].ToString();
            }
        }

        private string SortDirection
        {
            set { this.ViewState["SortDirection"] = value; }
            get
            {
                if (this.ViewState["SortDirection"] == null)
                {
                    this.ViewState["SortDirection"] = "";
                }
                return this.ViewState["SortDirection"].ToString();
            }
        }


        protected string GetSortingDirection()
        {
            if (this.SortDirection == "")
            {
                this.SortDirection = "DESC";
            }
            else if (this.SortDirection == "ASC")
            {
                this.SortDirection = "DESC";
            }
            else
                this.SortDirection = "ASC";

            return this.SortDirection;
        }

GridView-le aga tuleb lisada Sorting meetod

        protected void GridViewVolad_Sorting(object sender, GridViewSortEventArgs e)
        {
            DataView view = this.dt.DefaultView;
            view.Sort = String.Format("{0} {1}", e.SortExpression, GetSortingDirection());
            this.SortExpression = e.SortExpression;
            this.GridViewVolad.DataSource = dt;
            this.GridViewVolad.DataBind();
        }

Kui nüüd GridView tulpasid sorteerida võetakse andmed this.dt DataTable-st ja baasist küsima ei minda.