Lea*_*sed 13 c# asp.net delegates gridview telerik-grid
我Telerik Gridview
用于显示记录列表,我有超过10页我正在使用此gridview与以下常见事件代码复制粘贴(有一些小的更改)在所有这些页面上:
protected void Page_Load(object sender, EventArgs e)
{
DisplayRecords()
}
public void DisplayRecords()
{
//Grid view names are different on different pages.
GridView1.DataSource=Fetching records from database.
GridView1.DataBind();
}
protected void GridView1_SortCommand(object sender, GridSortCommandEventArgs e)
{
DisplayRecords()
}
protected void GridView1_PageIndexChanged(object sender, GridPageChangedEventArgs e)
{
var index = e.NewPageIndex;
DisplayRecords()
}
protected void GridView1_PageSizeChanged(object sender, GridPageSizeChangedEventArgs e)
{
var size = e.NewPageSize;
DisplayRecords()
}
Run Code Online (Sandbox Code Playgroud)
这是我的一页继承自以下页面:
public partial class LoadSettings : ParentPage
{
//Load events and other events
}
[Serializable]
public class ParentPage: RadAjaxPage
{
}
Page 1:**ttt.aspx**
public void DisplayRecords()
{
//Grid view names are different on different pages.
GridView1.DataSource=this.GetAlltttData()
GridView1.DataBind();
}
public DataTable GetAlltttData()
{
using (var context = new MyDataContext())
{
var data = from c in context.ttt select c;
return MyDataContext.LINQToDataTable(data);
}
}
Page 2:**bbb.aspx**
public void DisplayRecords()
{
//Grid view names are different on different pages.
GridView1.DataSource=this.GetAllbbbData()
GridView1.DataBind();
}
public DataTable GetAllbbbData()
{
using (var context = new MyDataContext())
{
var data = from c in context.bbb select c;
return MyDataContext.LINQToDataTable(data);
}
}
protected void rgbbb_SortCommand(object sender, GridSortCommandEventArgs e)
{
DisplayRecords()
}
protected void rgbbb_PageIndexChanged(object sender, GridPageChangedEventArgs e)
{
var index = e.NewPageIndex;
DisplayRecords()
}
protected void rgbbb_PageSizeChanged(object sender, GridPageSizeChangedEventArgs e)
{
var size = e.NewPageSize;
DisplayRecords()
}
Run Code Online (Sandbox Code Playgroud)
那么这可能是我可以将所有这些事件放在这个ParentPage页面中,只是从每个子页面调用而不是用这个事件污染我的每一页?
注意:在我的一些页面中,此DisplayRecords方法可以包含一些参数,但所有事件都是常见的.
也许您可以将通用逻辑放入抽象类中,并使用返回具体引用GridView
并从此类继承的方法(或属性)。然后在每个页面上您只需要实现该方法即可。
像这样的东西:
public abstract class ParentPage
{
public virtual void DisplayRecords()
{
var gridView = this.GetGridView();
gridView.DataSource = this.GetAllData();
gridView.DataBind();
}
protected abstract DataTable GetAllData();
protected string GetSortOrder()
{
if (this.sortOrder != GridSortOrder.Assending)
return string.Format("{0} DESC", this.sortExpression)
return this.sortExpression;
}
protected void Page_Load(object sender, EventArgs e)
{
DisplayRecords();
}
protected void GridView1_SortCommand(object sender, GridSortCommandEventArgs e)
{
if (!e.Item.OwnerTableView.SortExpressions.ContainsExpression(e.SortExpression))
{
GridSortExpression sortExpr = new GridSortExpression();
sortExpr.FieldName = e.SortExpression;
sortExpr.SortOrder = GridSortOrder.Ascending;
e.Item.OwnerTableView.SortExpressions.AddSortExpression(sortExpr);
}
}
protected void GridView1_PageIndexChanged(object sender, GridPageChangedEventArgs e)
{
e.Item.OwnerTableView.PageIndex = e.NewPageIndex;
DisplayRecords();
}
protected void GridView1_PageSizeChanged(object sender, GridPageSizeChangedEventArgs e)
{
e.Item.OwnerTableView.PageSize = e.NewPageSize;
DisplayRecords();
}
}
Page 1:**ttt.aspx**
public class **tttPage : BasePage
{
protected override GridView GetGridView()
{
//return GridView of this page
return GridView1;
}
protected override DataTable GetAllData()
{
using (var context = new MyDataContext())
{
var data = c in context.ttt select c;
return MyDataContext.LINQToDataTable(data);
}
}
}
Page 1:**bbb.aspx**
public class **bbbPage : BasePage
{
protected override GridView GetGridView()
{
//return GridView of this page
return GridView1;
}
protected override DataTable GetAllData()
{
using (var context = new MyDataContext())
{
var data = c in context.bbb select c;
return MyDataContext.LINQToDataTable(data);
}
}
}
Run Code Online (Sandbox Code Playgroud)
或者,您可以将通用逻辑放入具有虚拟方法的基类中,其中使用事件参数来获得GridView
类似的结果e.Item.OwnerTableView
。
通过使其虚拟,您将能够在任何页面类中覆盖此逻辑
像这样的东西:
public abstract class ParentPage<TEntity>
{
public virtual void DisplayRecords(GridView gridView)
{
gridView.DataSource = this.GetAllData();
gridView.DataBind();
}
protected abstract DataTable GetAllData();
protected void Page_Load(object sender, EventArgs e)
{
DisplayRecords(e.Item.OwnerTableView);
}
protected void GridView_SortCommand(object sender, GridSortCommandEventArgs e)
{
DisplayRecords(e.Item.OwnerTableView);
}
protected void GridView_PageIndexChanged(object sender, GridPageChangedEventArgs e)
{
DisplayRecords(e.Item.OwnerTableView);
}
protected void GridView_PageSizeChanged(object sender, GridPageSizeChangedEventArgs e)
{
DisplayRecords(e.Item.OwnerTableView);
}
}
public class **tttPage : ParentPage
{
protected override DataTable GetAllData()
{
using (var context = new MyDataContext())
{
var data = c in context.ttt select c;
return MyDataContext.LINQToDataTable(data);
}
}
}
public class **bbbPage : ParentPage
{
protected override DataTable GetAllData()
{
using (var context = new MyDataContext())
{
var data = c in context.bbb select c;
return MyDataContext.LINQToDataTable(data);
}
}
}
Run Code Online (Sandbox Code Playgroud)
您还可以使用通用参数从数据库获取值。
归档时间: |
|
查看次数: |
494 次 |
最近记录: |