You are on page 1of 4

using System;

using System.Collections.Generic;
using System.Data;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Controls;
using System.Runtime.Serialization;
namespace CMMS.BL
{

class Pagenation<T>where T:IDataGrid


{

public TextBlock PageInformation { get; set ; }


public DataTable Dt { get; set; }
public ComboBox NumberOfRecords { get; set; }
public DataGrid DatagridObject { get; set; }
public Button BtnPrev { get; set; }
public Button BtnFirst { get; set; }
public Button BtnNext { get; set; }
public Button BtnLast { get; set; }
public int NumberOfRecPerPage { get; set; }
int pageIndex = 1;
private static int numberOfRecPerPage;

//To check the paging direction according to use selection.


private enum PagingMode
{ First = 1, Next = 2, Previous = 3, Last = 4, PageCountChange = 5 };

public Pagenation(T UserControlObj )


{
NumberOfRecords = UserControlObj.CbNumberOfRecords;

NumberOfRecords.Items.Add("5");
NumberOfRecords.Items.Add("10");
NumberOfRecords.Items.Add("15");
NumberOfRecords.Items.Add("20");

numberOfRecPerPage = UserControlObj.NumberOfRecPerPage ;
DatagridObject = UserControlObj.DatagridObject ;

Dt = UserControlObj.Dt.Copy();

PageInformation = UserControlObj.PageInformation;

BtnPrev= UserControlObj.BtnPrev;
BtnFirst= UserControlObj.BtnFirst;
BtnNext= UserControlObj.BtnNext;
BtnLast= UserControlObj.BtnLast;
RefreshDataGrid(Dt);
}
public void BtnFirst_Click()
{
Navigate((int)PagingMode.First);

}
public void BtnNext_Click()
{
Navigate((int)PagingMode.Next);

public void BtnPrev_Click()


{
Navigate((int)PagingMode.Previous);

public void BtnLast_Click()


{
Navigate((int)PagingMode.Last);

}
public void CbNumberOfRecords_SelectionChanged()
{

Navigate((int)PagingMode.PageCountChange);
}

private void Navigate(int mode)


{
int count;
switch (mode)
{
case (int)PagingMode.Next:
BtnPrev.IsEnabled = true;
BtnFirst.IsEnabled = true;
if (Dt.Rows.Count >= (pageIndex * numberOfRecPerPage))
{
if (Dt.AsEnumerable().Skip(pageIndex *
numberOfRecPerPage).Take(numberOfRecPerPage).Count() == 0)
{
DatagridObject.ItemsSource = null;
DatagridObject.ItemsSource = Dt.Rows.Count <= 0 ?
null : Dt.AsEnumerable().Skip((pageIndex *
numberOfRecPerPage) -
numberOfRecPerPage).Take(numberOfRecPerPage).CopyToDataTable().DefaultView;
count = (pageIndex * numberOfRecPerPage) +
(Dt.AsEnumerable().Skip(pageIndex *
numberOfRecPerPage).Take(numberOfRecPerPage)).Count();
}
else
{
DatagridObject.ItemsSource = null;
DatagridObject.ItemsSource = Dt.Rows.Count <= 0 ?
null : Dt.AsEnumerable().Skip(pageIndex *

numberOfRecPerPage).Take(numberOfRecPerPage).CopyToDataTable().DefaultView;
count = (pageIndex * numberOfRecPerPage) +
(Dt.AsEnumerable().Skip(pageIndex *
numberOfRecPerPage).Take(numberOfRecPerPage)).Count();
pageIndex++;
}

PageInformation.Text = count + " of " + Dt.Rows.Count;


}

else
{
BtnNext.IsEnabled = false;
BtnLast.IsEnabled = false;
}

break;
case (int)PagingMode.Previous:
BtnNext.IsEnabled = true;
BtnLast.IsEnabled = true;
if (pageIndex > 1)
{
pageIndex -= 1;
DatagridObject.ItemsSource = null;
if (pageIndex == 1)
{
DatagridObject.ItemsSource = Dt.Rows.Count <= 0 ?
null : Dt.AsEnumerable().Take(numberOfRecPerPage).CopyToDataTable().DefaultView;
count =
Dt.AsEnumerable().Take(numberOfRecPerPage).Count();
PageInformation.Text = count + " of " + Dt.Rows.Count;
}
else
{
DatagridObject.ItemsSource = Dt.Rows.Count <= 0 ?
null : Dt.AsEnumerable().Skip
(pageIndex *
numberOfRecPerPage).Take(numberOfRecPerPage).CopyToDataTable().DefaultView;
count = Math.Min(pageIndex * numberOfRecPerPage,
Dt.Rows.Count);
PageInformation.Text = count + " of " + Dt.Rows.Count;

}
}
else
{
BtnPrev.IsEnabled = false;
BtnFirst.IsEnabled = false;
}
break;

case (int)PagingMode.First:
pageIndex = 2;
Navigate((int)PagingMode.Previous);
break;
case (int)PagingMode.Last:
pageIndex = (Dt.Rows.Count / numberOfRecPerPage);
Navigate((int)PagingMode.Next);
break;

case (int)PagingMode.PageCountChange:

if (NumberOfRecords.SelectedIndex == -1)
{
numberOfRecPerPage = 15;

}
else if(NumberOfRecords.SelectedIndex >-1)
{
numberOfRecPerPage =
Convert.ToInt32(NumberOfRecords.SelectedItem.ToString());
}
DatagridObject.ItemsSource = null;
DatagridObject.ItemsSource = Dt.Rows.Count <= 0 ? null :
Dt.AsEnumerable().Take(numberOfRecPerPage).CopyToDataTable().DefaultView;
count = (Dt.AsEnumerable().Take(numberOfRecPerPage)).Count();
PageInformation.Text = count + " of " + Dt.Rows.Count;
BtnNext.IsEnabled = true;
BtnLast.IsEnabled = true;
BtnPrev.IsEnabled = true;
BtnFirst.IsEnabled = true;
break;
}
}
public void RefreshDataGrid(DataTable dt)
{

DatagridObject.ItemsSource = null;
try
{
DatagridObject.ItemsSource =
dt.AsEnumerable().Take(numberOfRecPerPage).CopyToDataTable().DefaultView;
}
catch(Exception ex) { MessageBox.Show(ex.Message); }
int count = dt.AsEnumerable().Take(numberOfRecPerPage).Count();
PageInformation.Text = count + " of " + dt.Rows.Count;

}
}

You might also like