I am using Telerik Gridview
for displaying list of records and i have more than 10 pages on which i am using this gridview with this following common events code copy pasted(with some minor changes) on all this pages:
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()
}
This is my one page which inherits from following page:
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()
}
So is this possible that i can place all this events in this ParentPage page and just call from every child page instead of polluting my every page with this events??
Note:In some of my pages this DisplayRecords methods can contains some parameters but rest all events are just common.
There are many principles that you generally apply when trying to refactor code. Currently you are trying to refactor your code as to not violate the DRY principle (DRY = don't repeat yourself).
But, some other principals might come in to play that you might want to consider. The single responsibility principle would suggest that each method does only one unambiguous thing.
As per your scenario, You need to generate whole
GridView
dynamically or runtime with custom columns and customGridView
configuration logic which will be more expensive than writing those events in each page.Also all events must be tied up to 'GridView' to trigger properly. You can not separate those events to other files otherwise events will not fire.
You have another option of using
ASP.Net
user controls but again you need to write logic to manipulateGridView
custom columns and customGridView
configuration logic. So again making it more expensive. So I won't recommend to do so. It's better off as to keep methods individually for each page.May be you can put you common logic inside abstract class with method (or property) that returns reference on concrete
GridView
and inherit from this class. Then on each page your just have to implement that method.Something like this:
Or you can put you common logic inside base class with virtual methods where use event args for getting
GridView
likee.Item.OwnerTableView
.By making it virtual you will be able to override this logic in any page class
Something like this:
Also you can use generic parameter for getting values from db.