by Admin
24. February 2010 10:37
Download Sample Project (367.89 kb)
In one of my previous posts
How to use DataGrid in Silverlight
I showed a very simple usage where data grid was bound to a list of products. Now let us take one more step
in customizing use of this data grid. When I executed my method to get list of products from
AdventureWorks database, it returned me about 1000 records. And then datagrid was bound
to that list, i got a huge page with grid showing all the records. I am sure at this point you are
looking for way to add some kind of paging to your data grid so that user can navigate the list
easily.
Silverlight has a control named DataPager that comes in very handy to add
paging functionality to any control that you use to display lists. From the name
is it obvious that this control is a pager. Following XAML shows how I added paging functionality
to my datagrid.
<StackPanel x:Name="ContentStackPanel" Orientation="Vertical">
<TextBlock x:Name="HeaderText" Style="{StaticResource HeaderTextStyle}"
Text="Products"/>
<data:DataPager x:Name="ProductsPager"
PageSize="10"
DisplayMode="Numeric"
AutoEllipsis="True"
HorizontalAlignment="Left" />
<data:DataGrid x:Name="ProductsGrid">
<data:DataGrid.Columns>
<data:DataGridTemplateColumn>
<data:DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<StackPanel>
<Button x:Name="UpdateButton" Content="Update"
Click="UpdateButton_Click"></Button>
</StackPanel>
</DataTemplate>
</data:DataGridTemplateColumn.CellTemplate>
</data:DataGridTemplateColumn>
</data:DataGrid.Columns>
</data:DataGrid>
</StackPanel>
You can read more about different ways to customize the display of datapager from the documentation. For
this discussion you can see that I have set PageSize, DisplayMode, AutoEipsis and HorizontalAlignment
properties of pager and the screen shot shows how it looks. I will talk more about customization of
DataPager in detail in next post. For now I just want to keep it to simple use.
PageViewCollection
This is the collection object that drives the functionality for DataPager. In general you need a collection
that implements IPagedViewCollection interface. No, you do not have to do any more implementation
to get DataPager to work. We already have list of products obtained from previous web service call. You can
simply wrap that list into PagedViewCollection object and set it as Source
for DataPager object. And then set the source for DataGrid as this PagedViewCollection
object and we are all set to go. Following code shows simple change I made in code from previous sample
project.
void GetProductsCompleted(object sender, GetProductsCompletedEventArgs e)
{
_products = e.Result;
if (null != _products)
{
_pagedProductsView = new PagedCollectionView(_products);
ProductsPager.Source = _pagedProductsView;
ProductsGrid.ItemsSource = _pagedProductsView;
}
}
Add References
PagedViewCollection is defined in System.Windows.Data assembly.
So you will need to add reference to this assembly in your Silverlight project and then
add using directive for the namespace in your source code to refer to the
classes in this namespace and assembly.
Adding Paging to DataGrid in Silverlight is as easy as that.