⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 defaultcs.aspx.cs

📁 Telerik是很大的第三方软件制造商
💻 CS
字号:
using System;
using System.Data;
using System.Collections;
using System.Web.SessionState;
using Telerik.QuickStart;
using Telerik.WebControls;

namespace Telerik.GridExamplesCSharp.Programming.CustomPaging
{
	public abstract class DefaultCS : XhtmlPage
	{
		protected Telerik.WebControls.RadGrid RadGrid1;
		protected System.Web.UI.WebControls.TextBox TextBox1;
		protected System.Web.UI.WebControls.Button Button1;
		protected System.Web.UI.WebControls.RegularExpressionValidator RegularExpressionValidator1;
		protected System.Web.UI.WebControls.RequiredFieldValidator RequiredFieldValidator1;

		//Custom paging
		private int startIndex = 0;

		private DataLayer _myDataLayer;

		private DataLayer MyDataLayer 
		{
			get
			{
				if ( this._myDataLayer == null )
				{
					this._myDataLayer = new DataLayer( this.Session );
				}

				return this._myDataLayer;
			}
		}

		#region Web Form Designer generated code
		override protected void OnInit(EventArgs e)
		{
			//
			// CODEGEN: This call is required by the ASP.NET Web Form Designer.
			//
			InitializeComponent();
			base.OnInit(e);
		}
		
		///		Required method for Designer support - do not modify
		///		the contents of this method with the code editor.
		/// </summary>
		private void InitializeComponent()
		{
			this.Button1.Click += new System.EventHandler(this.Button1_Click);
			this.RadGrid1.NeedDataSource += new Telerik.WebControls.GridNeedDataSourceEventHandler(this.RadGrid1_NeedDataSource);
			this.RadGrid1.DeleteCommand += new Telerik.WebControls.GridCommandEventHandler(this.RadGrid1_DeleteCommand);
			this.RadGrid1.ItemCreated += new Telerik.WebControls.GridItemEventHandler(this.RadGrid1_ItemCreated);
			this.RadGrid1.PageIndexChanged += new Telerik.WebControls.GridPageChangedEventHandler(this.RadGrid1_PageIndexChanged);
			this.Load += new System.EventHandler(this.Page_Load);

		}
		#endregion
		
		private void Page_Load(object sender, System.EventArgs e)
		{
			if ( !IsPostBack )
			{
				this.MyDataLayer.Initialize( int.Parse(TextBox1.Text) );
			}
		}

		private void PageChanging( int newPageIndex )
		{
			//change page, so datalayer to generate fresh one
			this.MyDataLayer.ResetDataSource();
			//Update start based on grid's new page index changes
			startIndex = newPageIndex * RadGrid1.MasterTableView.PageSize;
		}

		private void RadGrid1_PageIndexChanged(object source, Telerik.WebControls.GridPageChangedEventArgs e)
		{
			//Update start index when page index changes
			this.PageChanging( e.NewPageIndex );
		}

		private void RadGrid1_NeedDataSource(object source, Telerik.WebControls.GridNeedDataSourceEventArgs e)
		{
			RadGrid1.DataSource = 
				this.MyDataLayer.GetDataSource( this.startIndex, RadGrid1.MasterTableView.PageSize ).DefaultView;
		}

		private void RadGrid1_DeleteCommand(object source, Telerik.WebControls.GridCommandEventArgs e)
		{
			
			int id = int.Parse( (e.Item as GridDataItem)["ID"].Text );
			this.MyDataLayer.DeleteItem( id );
		
			//Update count based on number of records left
			RadGrid1.MasterTableView.VirtualItemCount = this.MyDataLayer.Count;

			//Set new page index
			if ( RadGrid1.MasterTableView.VirtualItemCount == 0 )
			{
				RadGrid1.MasterTableView.CurrentPageIndex = 0;
			}
			else
			{
				int lastPageIndex = ((RadGrid1.MasterTableView.VirtualItemCount + RadGrid1.MasterTableView.PageSize - 1) /
					RadGrid1.MasterTableView.PageSize ) - 1;
				if ( RadGrid1.MasterTableView.CurrentPageIndex > lastPageIndex )
				{
					RadGrid1.MasterTableView.CurrentPageIndex = lastPageIndex;
				}
			}

			//Update start index, calculation vars
			this.PageChanging( RadGrid1.MasterTableView.CurrentPageIndex );
		}

		private void Button1_Click(object sender, System.EventArgs e)
		{
			this.PageChanging( 0 );

			this.MyDataLayer.Initialize( int.Parse(TextBox1.Text) );
			
			this.RadGrid1.MasterTableView.VirtualItemCount = this.MyDataLayer.Count;
			this.RadGrid1.MasterTableView.CurrentPageIndex = 0;
			this.RadGrid1.Rebind();
		}

		private void RadGrid1_ItemCreated(object sender, Telerik.WebControls.GridItemEventArgs e)
		{
			if (e.Item is GridPagerItem)
			{
				e.Item.SetItemDecorator(new AlwaysVisiblePagerDecorator(e.Item));
			}
		}

		class AlwaysVisiblePagerDecorator: GridPagerItemDecorator
		{
			public AlwaysVisiblePagerDecorator(GridItem pagerItem): base(pagerItem)
			{
			}

			public override void DecorateItem(GridTableView owner, GridColumn[] columnArray)
			{
				base.DecorateItem (owner, columnArray);
				if ( ((GridPagerItem)this.Item).IsTopPager && !owner.RenderPagerStyle.IsPagerOnTop )
				{
					Item.Visible = false;
					return;
				}

				if ( !((GridPagerItem)this.Item).IsTopPager && !owner.RenderPagerStyle.IsPagerOnBottom )
				{
					Item.Visible = false;
					return;
				}

				//Always show the PagerItem
				this.Item.Visible = true;
			}
		}

	}

	public class DataLayer
	{
		private HttpSessionState _session;

		private HttpSessionState Session
		{
			get { return _session; }
		}

		public DataLayer( HttpSessionState Session )
		{
			this._session = Session;
		}

		public int Count
		{
			get
			{
				object res = this.Session["_vc"];
				if ( res != null )
				{
					return (int)res;
				}

				return 11;
			}
			set
			{
				this.Session["_vc"] = value;
			}
		}

		public void Initialize( int Count )
		{
			this.Count = Count;
			this.ResetDeletedItems();
			this.ResetDataSource();
		}

		//Prepare a set of items only for the selected page
		public DataTable GetDataSource( int startIndex, int PageSize )
		{
			//Is it cahced already?
			DataTable dt = this.Session["datasource"] as DataTable;

			//no, then recreate
			if ( dt == null )
			{
				dt = new DataTable();
				DataRow dr;

				dt.Columns.Add(new DataColumn("ID", typeof(Int32)) );
				dt.PrimaryKey = new DataColumn[] { dt.Columns["ID"] };

				dt.Columns.Add(new DataColumn("Property1", typeof(string)));
				dt.Columns.Add(new DataColumn("Property2", typeof(double)));

				int i = startIndex;
				int j = startIndex;
				for (; j < startIndex + PageSize; i++)
				{
					//Only VirtualCount number of Items
					if ( j >= this.Count )
					{
						break;
					}

					//preserve deleted items
					if ( this.DeletedItems[i] != null )
					{
						continue;
					}

					dr = dt.NewRow();

					dr[0] = i;
					dr[1] = "Item " + (1 + i).ToString();
					dr[2] = 1.23 * (100 - (i+1));

					dt.Rows.Add(dr);

					j++;
				}

				Session["datasource"] = dt;
			}

			return dt;
		}

		public void ResetDeletedItems()
		{
			this.Session["DeletedItems"] = null;
		}

		public void ResetDataSource()
		{
			this.Session["datasource"] = null;
		}

		public void DeleteItem( int ID )
		{
			DataTable dt = this.Session["datasource"] as DataTable;
			if ( dt != null )
			{
				dt.Rows.Find( ID ).Delete();
				dt.AcceptChanges();
			}

			//set the item deleted
			this.DeletedItems[ ID ] = true;

			//Update count
			this.Count = this.Count - 1;
		}

		public Hashtable DeletedItems
		{
			get
			{
				Hashtable res = this.Session["DeletedItems"] as Hashtable;
				if ( res == null )
				{
					res = new Hashtable();
					this.Session["DeletedItems"] = res;
				}

				return res;
			}
		}
	}
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -