当前位置: 首页 > 编程语言 > C#

如何委托telerikgridview从各个子页面的父页面调用常用方法?分享

时间:2023-04-10 13:58:28 C#

如何委托telerikgridview从父页面调用各个子页面的公共方法?我正在使用TelerikGridview来显示记录列表,我有超过10页,我正在使用此gridview和以下常见事件代码复制粘贴(有一些小的更改)在所有这些页面上:protectedvoidPage_Load(objectsender,EventArgse){DisplayRecords()}publicvoidDisplayRecords(){//不同页面的网格视图名称不同。GridView1.DataSource=从数据库中获取记录.GridView1.DataBind();}protectedvoidGridView1_SortCommand(objectsender,GridSortCommandEventArgse){DisplayRecords()}protectedvoidGridView1_PageIndexChanged(objectsender,GridPageChangedEventArgse){varindex=e.NewPageIndex;DisplayRecords()}protectedvoidGridView1_PageSizeChanged(objectsender,GridPageSizeChangedEventArgse){varsize=e.NewPageSize;DisplayRecords()}这是我的一个页面继承自以下页面:publicpartialclassLoadSettings:ParentPage{//加载事件和其他事件}[Serializable]publicclassParentPage:RadAjaxPage{}Page1:**ttt.aspx**公共电话idDisplayRecords(){//不同页面的网格视图名称不同。GridView1.DataSource=this.GetAlltttData()GridView1.DataBind();}publicDataTableGetAlltttData(){using(varcontext=newMyDataContext()){vardata=fromcincontext.tttselectc;返回MyDataContext.LINQToDataTable(数据);}}Page2:**bbb.aspx**publicvoidDisplayRecords(){//不同页面的网格视图名称不同。GridView1.DataSource=this.GetAllbbbData()GridView1.DataBind();}publicDataTableGetAllbbbData(){using(varcontext=newMyDataContext()){vardata=fromcincontext.bbbselectc;返回MyDataContext.LINQToDataTable(数据);}}protectedvoidrgbbb_SortCommand(objectsender,GridSortCommandEventArgse){DisplayRecords()}protectedvoidrgbbb_PageIndexChanged(objectsender,GridPageChangedEventArgse){varindex=e.NewPageIndex;DisplayRecords()}protectedvoidrgbbb_PageSizeChanged(objectsender,GridPageSizeChangedEventArgse){varsize=e.NewPageSize;DisplayRecords()}所以我可以将所有这些事件放在这个ParentPage页面中,然后从每个子页面调用它,而不是用这个事件污染我的每个页面?注意:在我的一些页面中,此DisplayRecords方法可以有一些参数,但所有事件的共同点可能是您可以将通常的逻辑放在一个抽象类中,其中包含一个方法(或属性),该方法(或属性)在具体的GridView引用上返回并继承从这个类。然后在每个页面上,您只需要实现该方法即可。像这样的东西:publicabstractclassParentPage{publicvirtualvoidDisplayRecords(){vargridView=this.GetGridView();gridView.DataSource=this.GetAllData();gridView.DataBind();}受保护的抽象数据表GetAllData();protectedstringGetSortOrder(){if(this.sortOrder!=GridSortOrder.Assending)returnstring.Format("{0}DESC",this.sortExpression)returnthis.sortExpression;}protectedvoidPage_Load(objectsender,EventArgse){DisplayRecords();}protectedvoidGridView1_SortCommand(objectsender,GridSortCommandEventArgse){if(!e.Item.OwnerTableView.SortExpressions.ContainsExpression(e.SortExpression)){GridSortExpressionsortExpr=newGridSortExpression();sortExpr.FieldName=e.SortExpression;sortExpr.SortOrder=GridSortOrder.Ascending;e.Item.OwnerTableView.SortExpressions.AddSortExpression(sortExpr);}}protectedvoidGridView1_PageIndexChanged(objectsender,GridPageChangedEventArgse){e.Item.OwnerTableView.PageIndex=e.NewPageIndex;显示记录();}protectedvoidGridView1_PageSizeChanged(objectsender,GridPageSizeChangedEventArgse){e.Item.OwnerTableView.PageSize=e.NewPageSize;显示记录();}}Page1:**ttt.aspx**publicclass**tttPage:BasePage{protectedoverrideGridViewGetGridView(){//返回本页的GridViewreturnGridView1;}protectedoverrideDataTableGetAllData(){using(varcontext=newMyDataContext()){vardata=cincontext.tttselectc;返回MyDataContext.LINQToDataTable(数据);}}}Page1:**bbb.aspx**publicclass**bbbPage:BasePage{protectedoverrideGridViewGetGridView(){//返回本页的GridViewreturnGridView1;}protectedoverrideDataTableGetAllData(){using(varcontext=newMyDataContext()){vardata=cincontext.bbbselectc;返回MyDataContext.LINQToDataTable(数据);}}}或者可以使用虚方法将基础类中的公共逻辑放在基类中,其中使用事件参数获取GridView如e.Item.OwnerTableView通过使其成为虚拟的,您将能够在任何页面类中覆盖此逻辑,如下所示:gridView.DataBind();}受保护的抽象数据表GetAllData();protectedvoidPage_Load(objectsender,EventArgse){DisplayRecords(e.Item.OwnerTableView);}protectedvoidGridView_SortCommand(objectsender,GridSortCommandEventArgse){DisplayRecords(e.Item.OwnerTableView);}protectedvoidGridView_PageIndexChanged(objectsender,GridPageChangedEventArgse){DisplayRecords(e.Item.OwnerTableView);}protectedvoidGridView_PageSizeChanged(objectsender,GridPageSizeChangedEventArgse){DisplayRecords(e.Item.OwnerTableView);}}publicclass**tttPage:ParentPage{protectedoverrideDataTableGetAllData(){using(varcontext=newMyDataContext()){vardata=cincontext.tttselectc;返回MyDataContext.LINQToDataTable(数据);}}}公共课**bbbPage:ParentPage{protectedoverrideDataTableGetAllData(){using(varcontext=newMyDataContext()){vardata=cincontext.bbbselectc;返回MyDataContext.LINQToDataTable(数据);您还可以使用db中的泛型参数获取值。在尝试重构代码时,通常会应用许多原则。目前,您正在尝试重构您的代码,使其不违反DRY原则(DRY=不要重复自己)。但是,您可能还需要考虑其他一些可能涉及的原则。单一职责原则指出每个方法只做一件特定的事情。根据您的场景,您需要动态生成整个GridView或使用自定义列和自定义GridView配置逻辑即时生成,这比在每个页面中编写这些事件的成本更高。此外,所有事件都必须与“GridView”绑定才能正确触发。您不能将这些事件与其他文件分开,否则事件不会触发。您还有另一种选择,即使用ASP.Net用户控件,但您需要编写逻辑来操作GridView自定义列和自定义GridView配置逻辑。所以又让它变得更贵了。所以我不建议这样做。最好将每个页面的方法分开。以上就是C#学习教程:如何委托telerikgridview从各个子页面的父页面调用公共方法?如果所有分享的内容对你有用,需要进一步了解C#学习教程,希望大家多多关注。本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处: