Silverlight DataGrid does not have the built-in paging facility. So here
is a small piece of code to implement paging in Silverlight DataGrid. For this
custom paging
- Calculate the number of pages based on total number of
records and page size
- Add those many buttons to a container like StackPanel and
- On those buttons click events bind the DataGrid to desired
range of records.
Demo
1. Define the following Properties and Variables
public partial class Page : UserControl
{
//Property to hold the value of total records
public int TotalRow { get;
set; }
//Property to hold the value of page
size
public int PageSize { get;
set; }
//Number of rows that the
DataGrid
int totalRowsInGrid = 0;
2. Initialize the values
public
Page()
{
InitializeComponent();
//Initialize the page
size
PageSize = 10;
//Get the desired
data
user = User.Get();
//Set the TotalRow cout to the number of rows
returned for data
TotalRow = user.Count;
BindGrid(1);
DoPaging(this.PageSize,
TotalRow);
}
3. Create a method to get the desired range of data based on
page number
///
<summary>
/// Returns
paged data based on page number
///
</summary>
///
<param
name="pageNumber"></param>
///
<returns></returns>
private List<User> GetData(int pageNumber)
{
int Pagestart = (pageNumber - 1) * this.PageSize;
TextBlockStartPageNumber.Text =
(Pagestart+1).ToString();
TextBlockEndPageNumber.Text = (Pagestart +
totalRowsInGrid).ToString();
TextBlockTotalRecords.Text = TotalRow.ToString();
int i = TotalRow;
List<User> PagedData;
//List<User> PagedData =
user.Skip((pageNumber - 1) * PageSize).Take(PageSize) as
List<User>;
//List<YourObject> PageedData =
FullList.Skip((PageNumber - 1) *
PageSize).Take(PageSize).ToList();
if ((i - ((pageNumber - 1) * this.PageSize)) >= this.PageSize)
PagedData = user.GetRange(Pagestart, this.PageSize);
else
PagedData = user.GetRange(Pagestart, (i % this.PageSize));
return PagedData;
}
4. Bind the DataGrid
///
<summary>
/// Bind grid
to the desired range of records
///
</summary>
///
<param
name="PageNumber"></param>
private void BindGrid(int
PageNumber)
{
if (this.PageSize * PageNumber > this.TotalRow)
{
totalRowsInGrid = this.TotalRow % this.PageSize;
}
else
{
totalRowsInGrid = this.PageSize;
}
dataGridPaging.ItemsSource = GetData(PageNumber);
}
5. Write the click event for the paging
buttons
///
<summary>
/// Handles
the click event of buttons having page numbers
///
</summary>
///
<param
name="sender"></param>
///
<param
name="e"></param>
void btn_Click(object sender, RoutedEventArgs e)
{
Button btn = sender as Button;
int iPageNumber = Convert.ToInt32(btn.Content.ToString());
BindGrid(iPageNumber);
}
That’s
all you are done with the custom paging in Silverlight DataGrid.