Datagrid Vs Datalist Vs Repeater
July 24th, 2005
Though this question has been answered in hundreds of blogs and articles online, some of us still consider this to be a grey area and leave it mostly to the developer’s preference.
Well…here’s what i understand about these web controls.
First of all, all the three controls were created with the same objective, which is to display data. So why are there 3 different controls?
When these controls are bound to a datasource, for each entity in the datasource an “item” is created and added to the collection of items for the control.
Each Webcontrol’s “item” belongs to a different class. For example, a DatagridItem class is derived from TableRow class. This is because the HTML rendered by a datagrid is nothing but an HTML table with rows and columns based upon the datasource it was bound to. Hence each item in a datagrid collection is nothing but an HTML table row, when it is displayed in the browser.
One big advantage of the datagrid is that it is very simple to use and easily customizable with some cool color settings for borders,backgrounds etc. It also supports paging and sorting which also is accompanied by some customizable features for example, the way the page index can be displayed, as numbers or “previous and next” links etc.
So if you have a source of data that needs to be displayed with no customization or no complex stuff, datagrid is the best choice.
But remember, you will have no control over the HTML table that is being rendered.
Like the rows, each column in a DataGrid is an instance of a class that is derived from the DataGridColumn class. There are five built-in DataGrid column types:
* BoundColumn
* ButtonColumn
* EditColumn
* HyperLinkColumn
* TemplateColumn
Besides these built-in data types we can also create our own customized DataGrid column types by creating a class that derives from the DataGridColumn class.
Most of the newbies out there do not pay attention to the most important issue in datagrids ; Viewstate. ViewState produced by the DataGrid can be humongous if it contains a considerably large number of rows and thus be detrimental to performance. Of course, you DO have the option to turn the viewstate off but then that doesn’t help you if you are planning to use sorting, paging and editing features in the datagrid.
Apparently the datagrid has the worst performance of all the 3 web controls.
The Repeater Web control offers the most flexibility as far as control of the rendered HTML is concerned. The datagrid and datalist controls place the content within a HTML tag like <table> or <span> automatically. That’s how they are rendered. But a Repeater control renders ONLY what is specified by the developer. For this reason, if you wish to display data in some way other than in an HTML <table> tag or in a series of <span>tags, Repeater control is the best choice.
A Repeater is designed to let the user customize its output and thus have complete control over what is being rendered. So understandably RepeaterItem class is not derived from the TableRow class.
Just like in the DataList, with Repeater you specify the markup using templates. The Repeater contains the following five templates:
* AlternatingItemTemplate
* FooterTemplate
* HeaderTemplate
* ItemTemplate
* SeparatorTemplate
An important thing to remember about the Repeater is that, it is not derived from the WebControl class, like the DataGrid and DataList due to which it lacks the stylistic properties common to both the DataGrid and DataList. So if you want to make things look pretty in a repeater, write it yourself
. But in most cases this is what i want : Complete control over what is being rendered.(Yupp… i AM a control freak!)
Among all the 3 web controls in question, Repeater offers the best performance, though only slightly ahead of the datalist but beating datagrid by a considerable margin.
Finally about the datalist.
The DataList does not use columns as in datagrid.It uses templates to display items just like Repeaters. The advantage of using a template is that with a template, you can specify both a mix of HTML content and databinding syntax.
Along with the ItemTemplate the DataList supports six other templates for a total of seven:
* AlternatingItemTemplate
* EditItemTemplate
* FooterTemplate
* HeaderTemplate
* ItemTemplate
* SelectedItemTemplate
* SeparatorTemplate
By default, the DataList displays each item as an HTML tablerow. But an important property of datalist is the RepeatColumns property. Using this property you can specify how many DataList items should appear per table row. In addition to that, you can also specify if you want the contents of the DataList should be displayed using <span> tags instead of a <table> tags. This is done by setting the RepeatLayout property, to either Table or Flow, which would render the data in HTML <table> tags or in <span> tags.
With its templates and RepeatColumns and RepeatLayout properties, it’s obvious that the DataList allows for much more customization of the rendered HTML markup than the DataGrid. Thus customization again, is the reason why one might prefer to use a datalist over datagrid.
One major advantage of using Datagrid over datalist and repeater is, as already mentioned, the sorting and paging functionality. While such functionality can be implemented with some smart logic in the code, it’s the question of how much time and effort would be involved in doing it and whether the trade-off is worth it in the application development process.
Guess …that’s about it. This is just an overall view, at a very high level.
For more information,
Read Scott Mitchell’s article on the same topic
April 6th, 2006 at 2:46 am
Great article! I personally try to limit my use of the DataGrid as much as possible. It’s incredibly slow and hard to work with. The DataList has the distinct advantage of the RepeatDirection property, which makes creating a photo album very quick and easy.
May 18th, 2006 at 1:03 pm
Hi.. Nice one. Cleared a lot of questions out of my mind about using these controls.
The URL for Scott Mitchell’s article may need to be corrected.
Thanks.
June 6th, 2006 at 5:09 am
Really Great article. It gives clear purpose of using of the control..
June 15th, 2006 at 11:11 pm
This article is looks pretty simple and covers all what is needed to know about these controls.
June 17th, 2006 at 8:59 pm
Nice Article. Thanks,
June 30th, 2006 at 6:37 am
Hi, Good article really helpul in understanding these controls
August 25th, 2006 at 12:10 pm
cheers for the article – seems I must be a control freak too – repeaters all the way
September 23rd, 2006 at 8:55 am
Thanks for describing in detail.
January 31st, 2007 at 10:13 pm
here is the correct link to Scott Mitchell’s article:
http://msdn2.microsoft.com/en-us/library/aa479015.aspx
January 31st, 2007 at 10:14 pm
Correct Link
March 26th, 2007 at 10:35 am
its really nice and helpful one
April 2nd, 2007 at 9:27 pm
Great article. I wish you could also include about the editing capabilities of these three controls.
April 18th, 2007 at 8:27 am
Good Article.. Thanks
June 11th, 2007 at 10:38 am
Good article!!! Thanks for the valuable inputs.
Sathya ^_^
August 2nd, 2007 at 10:59 pm
Wonderful article !! It helps me a lot in choosing right data control. Thanks a lot
August 18th, 2007 at 9:43 pm
Clear and concise. Very useful.
August 28th, 2007 at 6:16 am
Thank you Girish for such a simple description of controls which appears somewhat stranger to a newbie.This is one of the most frequently asked topic in am interview for a .Net Developer.After reading this article one should gets the confidence of answering any questions from this topic.Wonderful !!!
Thank You Once Again
This is Joshy M Raj from India
September 23rd, 2007 at 5:30 pm
Wonderful!
Simply awesome!
September 23rd, 2007 at 5:31 pm
Simply Great!
Keep it up!
October 23rd, 2007 at 9:58 am
HI, That is a good one indeed; but plz fix the broken link. I’m not sure if u r reading the user comments..
March 11th, 2008 at 9:20 am
Ya its a great article and i have enjoyed reading it. thanks for the post.
March 11th, 2008 at 9:22 am
Its an amazing one.I loved it
Satyendra Singh
April 16th, 2008 at 10:20 am
this article is good and it will be helpful.
September 3rd, 2008 at 10:43 am
Thanks..
It really helped me as even i used to wonder before what to use .
Kudos!.. you put some light on this issue..
May 3rd, 2010 at 2:53 pm
Hi,
Nice post , very informative. In ASP .net 2.0 Datagrid is been replaced by Gridview. And in ASP.net 3.5 MS has launched new control namely Listview , which leaverages all the features present in Repeater, Datalist and Gridview, if am I not wrong ?
Its my request to you that you please update your post which contains information about listview control also. I would love to hear from you soon….
Nice article dear.