📄 defaultcs.aspx.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 + -