Wrox Programmer Forums
|
ASP.NET 1.0 and 1.1 Basics ASP.NET discussion for users new to coding in ASP.NET 1.0 or 1.1. NOT for the older "classic" ASP 3 or the newer ASP.NET 2.0.
Welcome to the p2p.wrox.com Forums.

You are currently viewing the ASP.NET 1.0 and 1.1 Basics section of the Wrox Programmer to Programmer discussions. This is a community of software programmers and website developers including Wrox book authors and readers. New member registration was closed in 2019. New posts were shut off and the site was archived into this static format as of October 1, 2020. If you require technical support for a Wrox book please contact http://hub.wiley.com
 
Old March 17th, 2005, 01:09 AM
Registered User
 
Join Date: Mar 2005
Posts: 2
Thanks: 0
Thanked 0 Times in 0 Posts
Default DataGrid Paging Problem!

I am using a composite datagrid. The paging and sorting is working properly.
the first page shows correctly. when i click the second page it is ok. Then if i click the third page it is ok. but when i click the first or second page the state goes away and page event does not fire. the problem is when i try to navigate backward the pageindex event does not fire...

plz need help...

Code:
public abstract class SqlDataGrid : System.Web.UI.WebControls.WebControl,INamingContainer
    {


        #region Enumerations
        //
        // Public Enumarators
        //
        public enum ListTypes
        {
            PAGE,
            SCROLL
        }
        public enum Positions
        {
            TOP,
            BOTTOM,
            HIDE
        }
        public enum SortDirections
        {
            ASCENDING,
            DESCENDING
        }
        #endregion

        #region Variables

        private DataGrid MyDataGrid;

        // The genric Connection Interface variable
        private System.Data.IDbConnection _Connection;

        private Button            btnFilter;
        private TextBox            txtSearch;
        private DropDownList    ddlColumn;

        private string        _SqlStatement    = "";

        private ListTypes    _ListType        = ListTypes.PAGE;

        private bool        _SortHeader;
        private String        _SearchColumn;
        private String        _SearchValue    = "";
        private String        _SortColumn;
        private String        _SortOrder;

        private Positions        _Position;
        private SortDirections    _SortDirection;

        // These events are accessed from the user page 
        public event DataGridCommandEventHandler EditCommand;
        public event DataGridCommandEventHandler DeleteCommand;

        //private bool currentchecked = false;

        #endregion

        #region Constructor
        /// <summary>
        /// Constructor 
        /// </summary>
        public SqlDataGrid()
        {
            //MyDataGrid.CurrentPageIndex = 1;
            EnsureChildControls();
        }
        #endregion

        #region Properties

        [Browsable(false)]
        [Category("Display")]
        [Description("Get/set the String of The SQL Connection.")]        
        public Positions Position
        {
            get
            {
                return _Position; 
            }
            set
            {
                _Position = value; 
            }
        }

        [Browsable(true)]
        [Category("Display")]
        [Description("Get/set the Sort Direction of The SQL Connection.")]        
        public SortDirections SortDirection
        {
            get
            {
                return _SortDirection; 
            }
            set
            {
                _SortDirection = value; 
            }
        }

        [Browsable(true)]
        [Category("Display")]
        [Description("Get/set the String of The SQL Connection.")]        
        public String SqlStatement
        {
            get 
            {
                return _SqlStatement; 
            }
            set 
            { 
                _SqlStatement = value; 
            }
        }

        public System.Data.IDbConnection Connection
        {
            get
            { 
                return _Connection; 
            }
            set
            { 
                _Connection = value; 
            }
        }

        [Category("Display"),Browsable(true),Bindable(true)]
        public ListTypes ListType
        {
            get 
            { 
                return _ListType; 
            }
            set
            { 
                _ListType = value; 
            }
        }
 
        [Category("Display"),DefaultValue(true),Browsable(true),Bindable(true)]
        public bool SortHeader
        {
            get 
            { 
                return _SortHeader; 
            }
            set 
            { 
                _SortHeader = value; 
            }
        }


        [Category("Display"),Browsable(true),Bindable(true)]
        public String SortOrder
        {
            get 
            {
                return _SortOrder; 
            }
            set 
            { 
                _SortOrder = value; 
            }
        }

        [Category("Display"),Browsable(true),Bindable(true)]
        public String SortColumn
        {
            get 
            { 
                return _SortColumn; 
            }
            set 
            { 
                _SortColumn = value; 
            }
        }


        [Category("Display"),Browsable(true),Bindable(true)]
        public String SearchColumn
        {
            get 
            { 
                return _SearchColumn; 
            }
            set 
            { 
                _SearchColumn = value; 
            }
        }

        [Category("Display"),DefaultValue(""),Browsable(true),Bindable(true)]
        public String SearchValue
        {
            get 
            { 
                return _SearchValue; 
            }
            set 
            { 
                _SearchValue = value; 
            }
        }
        #endregion


        /// <summary>
        /// Must be overridden in the child class
        /// </summary>
        /// <returns>DataSet</returns>
        public virtual DataSet GetDataSet()
        {
            return new DataSet();
        }

        /// <summary>
        /// Overloaded GetDataSet to retrieve data based on sql statement
        /// </summary>
        /// <param name="sql"></param>
        /// <returns></returns>
        public virtual DataSet GetDataSet(string sql)
        {
            return new DataSet();
        }

        /// <summary>
        /// This fuction is used to create the datagrid scrolling 
        /// using the iScroll parameter
        /// </summary>
        /// <param name="isScroll"></param>
        private void CreateDataGridWithScroll(bool isScroll)
        {
            if(isScroll == true)
            {
                this.Controls.Add(new LiteralControl("<div STYLE=\"height: 200px; overflow: auto;\">"));
                this.Controls.Add(MyDataGrid);
                this.Controls.Add(new LiteralControl("</div>"));
            }
            else
            {
                this.Controls.Add(MyDataGrid);
            }
        }

        private void a_Checkme(object sender, EventArgs e)
        {
            //currentchecked = sender.ToString();
        }

        protected override void OnInit(EventArgs e)
        {


            //this.MyDataGrid.PageIndexChanged +=new DataGridPageChangedEventHandler(MyDataGrid_PageIndexChanged);
        }
        /// <summary>
        /// 
        /// Actual Rendering Starts here
        /// 
        /// </summary>
        /// <param name="writer"></param>
        protected override void Render(HtmlTextWriter writer) 
        {  
            Debug.WriteLine(MyDataGrid.CurrentPageIndex.ToString());
            Debug.WriteLine("RENDERED");
            EnsureChildControls();



            // Clear all Controls
            this.Controls.Clear(); 



            // Check to see if the sort is in asc or desc?
            if(this._SortDirection == SortDirections.ASCENDING)
            {
                ViewState["SortDirection"] = "ASC";
            }
            else
            {
                ViewState["SortDirection"] = "DESC";
            }

            // Check whether to show the search bar or not    
            if(this.SortHeader == false)
            {
                MyDataGrid.AllowSorting = false;
            }
            else
            {
                MyDataGrid.AllowSorting = true;
            }

            // Determine the Search Bar Position
            if (this._Position == Positions.TOP)
            {
                this.Controls.Add(txtSearch);
                this.Controls.Add(new LiteralControl(" "));
                this.Controls.Add(ddlColumn);
                this.Controls.Add(new LiteralControl(" "));
                this.Controls.Add(btnFilter); 

                if(this.ListType == ListTypes.SCROLL)
                {
                    CreateDataGridWithScroll(true);
                }
                else
                {
                    CreateDataGridWithScroll(false);
                }
            }
            else if (this._Position == Positions.BOTTOM)
            {
                if(this.ListType == ListTypes.SCROLL)
                {
                    CreateDataGridWithScroll(true);
                }
                else
                {
                    CreateDataGridWithScroll(false);
                }

                this.Controls.Add(txtSearch);
                this.Controls.Add(new LiteralControl(" "));
                this.Controls.Add(ddlColumn);
                this.Controls.Add(new LiteralControl(" "));
                this.Controls.Add(btnFilter); 
            }
            else
            {
                if(this.ListType == ListTypes.SCROLL)
                {
                    CreateDataGridWithScroll(true);
                }
                else
                {
                    CreateDataGridWithScroll(false);
                }
            }
            EnsureChildControls();

            base.RenderBeginTag(writer);  
            base.RenderContents(writer);  
            base.RenderEndTag(writer);  

        }


        private void CreateControls() 
        {  
            MyDataGrid    = new DataGrid();
              txtSearch    = new TextBox();
            ddlColumn    = new DropDownList();
            btnFilter    = new Button();  

            btnFilter.Text = "Filter";  
            btnFilter.CommandName = "Click";
              btnFilter.Click += new System.EventHandler (this.btnFilter_Click);  

            MyDataGrid.AutoGenerateColumns = false;

            // Formatting 
            MyDataGrid.PageSize = 10;
            MyDataGrid.AllowPaging = true;
            MyDataGrid.AllowSorting = true;


            MyDataGrid.ShowFooter = true;
            MyDataGrid.ShowHeader = true;
            MyDataGrid.Font.Name = "Verdana, Helvetica";
            MyDataGrid.Font.Size = FontUnit.XSmall;
            MyDataGrid.Width = 500;

            // Header Setting
            MyDataGrid.HeaderStyle.Height = 30;
            MyDataGrid.HeaderStyle.Font.Bold = true;
            MyDataGrid.HeaderStyle.Font.Size = FontUnit.XXSmall;
            MyDataGrid.HeaderStyle.BackColor = Color.Black;
            MyDataGrid.HeaderStyle.ForeColor = Color.White;
            MyDataGrid.HeaderStyle.HorizontalAlign = HorizontalAlign.Center;

            // Pagerstyle settings
            MyDataGrid.PagerStyle.Mode = PagerMode.NumericPages;
            MyDataGrid.PagerStyle.BackColor = Color.Gainsboro;
            MyDataGrid.PagerStyle.PageButtonCount = 10;
            MyDataGrid.PagerStyle.Font.Size = FontUnit.XSmall;
            MyDataGrid.PagerStyle.HorizontalAlign = HorizontalAlign.Center;

            this.Controls.Add(txtSearch);
            this.Controls.Add(ddlColumn);
            this.Controls.Add(btnFilter); 
            this.Controls.Add(MyDataGrid);
          }  

        protected void MyDataGrid_Init(object sender, System.EventArgs e)
        {
            this.MyDataGrid.PageIndexChanged +=new DataGridPageChangedEventHandler(MyDataGrid_PageIndexChanged);
            MyDataGrid.CurrentPageIndex = int.Parse(ViewState["CurrentPage"].ToString());
        }

        /// <summary>
        /// Sorting Event
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        protected void MyDataGrid_SortCommand(Object sender, DataGridSortCommandEventArgs e)
        {
            //
            // The If sorted the page should show the first one
            //
            MyDataGrid.CurrentPageIndex = 0;

            if(ViewState["SortField"].ToString() != e.SortExpression.ToString())
            {
                ViewState["SortField"] = e.SortExpression;
                ViewState["SortDirection"] = "ASC";
            }
            else
            {
                if(ViewState["SortDirection"].ToString() == "ASC")
                {
                    ViewState["SortDirection"] = "DESC";
                }
                else
                {
                    ViewState["SortDirection"] = "ASC";
                }
                ViewState["SortField"] = e.SortExpression;
            }

            Refresh(SqlStatement + " order by " + e.SortExpression + " " +     ViewState["SortDirection"]);
        }

        /// <summary>
        /// Page Index Event
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        protected void MyDataGrid_PageIndexChanged(Object sender, DataGridPageChangedEventArgs e)
        {

            ViewState["CurrentPage"] = e.NewPageIndex;
            MyDataGrid.CurrentPageIndex = e.NewPageIndex;

            Refresh(SqlStatement + " order by " + ViewState["SortField"].ToString() + " " + ViewState["SortDirection"]);
        }


        /// <summary>
        /// This function is to call the events from the main page
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        protected void MyDataGrid_ItemCommand ( Object sender, DataGridCommandEventArgs e )
        {

            if ( e.CommandName == "editme" )
            {
                EditCommand(this,e );
            }
            else if(e.CommandName == "deleteme")
            {
                DeleteCommand(this,e);
            }

        }

        /// <summary>
        /// This function creates the column dynamically based on the 
        /// dataset
        /// </summary>
        /// <param name="dataset"></param>
        private void CreateAllColumns(DataSet dataset)
        {
            // Clear the list box
            ddlColumn.Items.Clear();

            int totalColumn = dataset.Tables[0].Columns.Count;

            // Iterate all the columns
            // and make changes appropriately
            for (int i = 0 ; i < totalColumn ; i++)
            {
                // get the column name
                string columnName = dataset.Tables[0].Columns[i].ColumnName;

                BoundColumn column = new BoundColumn();
                column.DataField = columnName.ToString();
                ddlColumn.Items.Add(columnName.ToString());

                // Initialize the sort field from the user page
                // or change to default ASC
                if(ViewState["SortField"].ToString() == "")
                {
                    ViewState["SortField"] = dataset.Tables[0].Columns[0].ColumnName;
                    if(this._SortDirection == SortDirections.ASCENDING)
                    {
                        ViewState["SortDirection"] = "ASC";
                    }
                    else
                    {
                        ViewState["SortDirection"] = "DESC";
                    }
                }

                if(ViewState["SortField"].ToString() == columnName.ToString())
                {
                    if(ViewState["SortDirection"].ToString() == "ASC")
                    {
                        column.HeaderText = columnName.ToString() + "V";
                        column.HeaderText = columnName.ToString() + " <img src=" + "\"up.bmp\">";

                    }
                    else
                    {
                        column.HeaderText = columnName.ToString() + "^";
                        column.HeaderText = columnName.ToString() + " <img src=" + "\"down.bmp\">";

                    }
                }
                else
                {

                    if(i == 0 && ViewState["SortField"].ToString() == "")
                    {
                        column.HeaderText = columnName.ToString() + " <img src=" + "\"up.bmp\">";
                    }
                    else
                    {
                        column.HeaderText = columnName.ToString();
                    }

                }


                column.SortExpression = columnName.ToString();
                MyDataGrid.Columns.Add(column);
                MyDataGrid.Columns[i].SortExpression = columnName;
            }

            // Template column for the check box control
            TemplateColumn templateColumn = new  TemplateColumn();
            templateColumn.HeaderText = "Check";
            templateColumn.Visible = true;
            CheckItem a = new CheckItem("Check");
            //a.Checkme
            a.Checkme +=new EventHandler(a_Checkme);
            templateColumn.ItemTemplate =  a;
            MyDataGrid.Columns.Add(templateColumn);




            ButtonColumn MyButtonEdit = new ButtonColumn();
            MyButtonEdit.CommandName = "editme";
            MyButtonEdit.ButtonType = ButtonColumnType.LinkButton;
            MyButtonEdit.Text = "Edit";
            MyDataGrid.Columns.Add(MyButtonEdit);

            ButtonColumn MyButtonDelete = new ButtonColumn();
            MyButtonDelete.CommandName = "deleteme";
            MyButtonDelete.ButtonType = ButtonColumnType.LinkButton;
            MyButtonDelete.Text = "Delete";
            MyDataGrid.Columns.Add(MyButtonDelete);

            // set the key field of all the columns
            MyDataGrid.DataKeyField = dataset.Tables[0].Columns[0].ColumnName;

            // Set autogenerate to false since we are generating dynamically.
            MyDataGrid.AutoGenerateColumns = false;

            // Register the events
            this.MyDataGrid.SortCommand +=new DataGridSortCommandEventHandler(MyDataGrid_SortCommand);
            this.MyDataGrid.PageIndexChanged +=new DataGridPageChangedEventHandler(MyDataGrid_PageIndexChanged);
            this.MyDataGrid.ItemCommand +=new DataGridCommandEventHandler(MyDataGrid_ItemCommand);

            // Bind the data and bingo...
            MyDataGrid.DataSource = dataset;
            MyDataGrid.DataBind();
        }


        /// <summary>
        /// This function is used to refresh
        /// everytime the postback is made.
        /// </summary>
        /// <param name="sql"></param>
        public void Refresh(string sql)
        {
            MyDataGrid.Columns.Clear();
            DataSet dataset = new DataSet();
            CreateAllColumns(GetDataSet(sql));

        }

        /// <summary>
        /// This is the default refresh method without the sql statement
        /// </summary>
        public void Refresh()
        {
            MyDataGrid.Columns.Clear();
            DataSet dataset = new DataSet();

            string sql = "";
            if(this._SortColumn == null)
            {
                ViewState["SortField"] = "";
                sql = SqlStatement;
            }
            else
            {
                ViewState["SortField"] = this._SortColumn;
                sql = SqlStatement + " order by " + ViewState["SortField"].ToString() + ViewState["SortDirection"];
            }
            CreateAllColumns(GetDataSet(sql));


        }


        /// <summary>
        /// Create the child controls dynamically
        /// </summary>
        protected override void CreateChildControls() 
        {  
            CreateControls(); 
        }  


        /// <summary>
        /// This event fires when the Filter button is clicked
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void btnFilter_Click(object sender, System.EventArgs e) 
        {  

            if(txtSearch.Text == "")
            {
                MyDataGrid.CurrentPageIndex = 0;
                Refresh();
            }
            else
            {
                MyDataGrid.CurrentPageIndex = 0;

                SearchColumn = ddlColumn.SelectedItem.Text.ToString();
                SearchValue = txtSearch.Text;

                string newsql = SqlStatement + " where " + ddlColumn.SelectedItem.Text.ToString() + "='" + txtSearch.Text + "'";
                Refresh(newsql);
            }

          }  

        public override ControlCollection Controls 
        {  
              get 
            {  
                  base.EnsureChildControls();  
                  return base.Controls;  
              }  
          }

        public override void DataBind()  
        {  
            base.DataBind();  
            CreateControls(); 
        }  
    }


    // The template class for the CheckBox template item
    public class CheckItem : ITemplate
    {
        private string column;
        public event EventHandler Checkme;
        private CheckBox l;

        public CheckItem(string column)
        {
            this.column = column;
        }
        public void InstantiateIn(Control container)
        {
            l = new CheckBox();

            l.DataBinding += new EventHandler(this.BindData);
            l.CheckedChanged +=new EventHandler(l_CheckedChanged);

            container.Controls.Add(l);

        }


        public void l_CheckedChanged(object sender, EventArgs e)
        {
            //l.Checked = true;
            Checkme(sender,e);

        }

        public void BindData(object sender, EventArgs e)
        {
            CheckBox l = (CheckBox) sender;
            DataGridItem container = (DataGridItem) l.NamingContainer;
            //l.Checked = false; 
        }
    }
 
Old April 8th, 2005, 06:12 PM
Registered User
 
Join Date: Apr 2005
Posts: 1
Thanks: 0
Thanked 0 Times in 0 Posts
Send a message via AIM to jethomas4
Default

Try setting the EnableViewState property of the datagrid to True






Similar Threads
Thread Thread Starter Forum Replies Last Post
DataGrid Paging Problem hoailing22 ASP.NET 1.0 and 1.1 Basics 5 April 23rd, 2006 03:15 AM
Problem in Paging in Datagrid Rahul Gupta ASP.NET 1.0 and 1.1 Basics 0 December 16th, 2005 07:58 AM
Problem in dataGrid Paging Baby_programmer ASP.NET 1.0 and 1.1 Professional 2 February 23rd, 2005 08:47 PM
Paging problem with datareader and datagrid alyeng2000 ASP.NET 1.0 and 1.1 Basics 4 September 9th, 2004 02:31 AM
DataGrid Paging Problem acyu0318 ASP.NET 1.0 and 1.1 Basics 2 March 2nd, 2004 12:05 PM





Powered by vBulletin®
Copyright ©2000 - 2020, Jelsoft Enterprises Ltd.
Copyright (c) 2020 John Wiley & Sons, Inc.