Let’s say that you wish to display rows of customer reviews and
other pertinent info on your web page. Unless
you are okay with the ugly default format of a GridView control, you will
probably want to use a Repeater control.
You will, of course, bind the Repeater control to a data source. And that data source will probably be a resulset
table from a stored procedure.
Reviews can take up a lot of real estate, though. So let’s say that you wish to limit the
number of reviews that show up initially on the page. You will provide a “Show More” button or a
pagination control to allow the user to see more reviews, as they desire.
In other words, you want a simple way to select the top n
rows from a data table. Before the
arrival of the .Net Framework 3.5 and LINQ, you would have had to write a
number of lines of code to implement this functionality. With LINQ, however, you can be down to one
line.
The code would look something like below:
Int pageSize
= 10;
repeaterReviews.DataSource
= reviewsDataTable.AsEnumerable().Take(pageSize).ToList();
repeaterReviews.DataBind();
The code looks like it makes a lot of sense, and that it
should work. But wait – in fact it does
not work. The data source that you bind
to the repeater control should be of type DataTable, which an IEnumerable of
List is not. To make this work, we will
need to convert the List back to a DataTable.
We do that by using the CopyToDataTable extension method of enumerable
types.
Thus our final code should look like below:
Int pageSize
= 10;
repeaterReviews.DataSource
= reviewsDataTable.AsEnumerable().Take(pageSize).CopyToDataTable();
repeaterReviews.DataBind();
Happy programming!