gpt4 book ai didi

c# - 如何委托(delegate) telerik GridView 常用方法从每个子页面的父页面调用?

转载 作者:可可西里 更新时间:2023-11-01 08:11:27 26 4
gpt4 key购买 nike

我正在使用 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()
}

这是我继承自以下页面的一页:

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()
}

那么我是否可以将所有这些事件放在这个 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);
}
}
}

或者您可以使用虚方法将通用逻辑放入基类中,其中使用事件参数来获取 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);
}
}
}

您也可以使用通用参数从数据库中获取值。

关于c# - 如何委托(delegate) telerik GridView 常用方法从每个子页面的父页面调用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34393323/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com