1:首先寫一個分頁控件
如圖:
代碼:
public partial class ControlPage_QueryData : UserControl
{
public DataTable table = new DataTable();
public ControlPage_QueryData()
{
InitializeComponent();
}
public ControlPage_QueryData(DataTable dt)
{
InitializeComponent();
table = dt;
}
#region 分頁字段和屬性
private int pageIndex = 1;
/// <summary>
/// 當前頁面
/// </summary>
public int PageIndex
{
get { return pageIndex; }
set { pageIndex = value; }
}
private int pageSize = 10;
/// <summary>
/// 每頁記錄數
/// </summary>
public int PageSize
{
get { return pageSize; }
set { pageSize = value; }
}
private int recordCount = 0;
/// <summary>
/// 總記錄數
/// </summary>
public int RecordCount
{
get { return recordCount; }
set { recordCount = value; }
}
private int pageCount = 0;
/// <summary>
/// 總頁數
/// </summary>
public int PageCount
{
get
{
if (pageSize != 0)
{
pageCount = GetPageCount();
}
return pageCount;
}
}
/// <summary>
/// 計算總頁數
/// </summary>
/// <returns></returns>
private int GetPageCount()
{
if (PageSize == 0)
{
return 0;
}
int pageCount = RecordCount / PageSize;
if (RecordCount % PageSize == 0)
{
pageCount = RecordCount / PageSize;
}
else
{
pageCount = RecordCount / PageSize + 1;
}
return pageCount;
}
private string jumpText;
/// <summary>
/// 跳轉按鈕文本
/// </summary>
public string JumpText
{
get
{
if (string.IsNullOrEmpty(jumpText))
{
jumpText = "Go";
}
return jumpText;
}
set { jumpText = value; }
}
#endregion
#region 頁碼變化觸發事件
public event EventHandler OnPageChanged;
#endregion
#region 分頁及相關事件功能實現
private void SetFormCtrEnabled()
{
lnk_First.Enabled = true;
lnk_Prev.Enabled = true;
lnk_Next.Enabled = true;
lnk_Last.Enabled = true;
btn_Go.Enabled = true;
}
/// <summary>
/// 外部調用
/// </summary>
public void DrawControl(int count)
{
recordCount = count;
DrawControl(false);
}
/// <summary>
/// 頁面控件呈現
/// </summary>
private void DrawControl(bool callEvent)
{
btn_Go.Text = JumpText;
lblCurrent_Page.Text = PageIndex.ToString();
lblPage_Count.Text = PageCount.ToString();
lblTotal_Count.Text = RecordCount.ToString();
txtPage_Size.Text = PageSize.ToString();
if (callEvent && OnPageChanged != null)
{
OnPageChanged(this, null);//當前分頁數字改變時,觸發委託事件
}
SetFormCtrEnabled();
if (PageCount == 1)//有且僅有一頁
{
lnk_First.Enabled = false;
lnk_Prev.Enabled = false;
lnk_Next.Enabled = false;
lnk_Last.Enabled = false;
btn_Go.Enabled = false;
}
else if (PageIndex == 1)//第一頁
{
lnk_First.Enabled = false;
lnk_Prev.Enabled = false;
}
else if (PageIndex == PageCount)//最後一頁
{
lnk_Next.Enabled = false;
lnk_Last.Enabled = false;
}
}
#endregion
bool isTextChanged = false;
private void lnk_First_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e)
{
lnk_First.Enabled = false;
lnk_Prev.Enabled = false;
lnk_Next.Enabled = true;
lnk_Last.Enabled = true;
PageIndex = 1;
DrawControl(true);
}
private void lnk_Prev_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e)
{
lnk_First.Enabled = true;
lnk_Prev.Enabled = true;
lnk_Next.Enabled = true;
lnk_Last.Enabled = true;
PageIndex = Math.Max(1, PageIndex - 1);
DrawControl(true);
}
private void lnk_Next_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e)
{
lnk_First.Enabled = true;
lnk_Prev.Enabled = true;
lnk_Next.Enabled = true;
lnk_Last.Enabled = true;
PageIndex = Math.Min(PageCount, PageIndex + 1);
DrawControl(true);
}
private void lnk_Last_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e)
{
lnk_First.Enabled = true;
lnk_Prev.Enabled = true;
lnk_Next.Enabled = false;
lnk_Last.Enabled = false;
PageIndex = PageCount;
DrawControl(true);
}
/// <summary>
/// 跳轉
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void btn_Go_Click(object sender, EventArgs e)
{
int num = 0;
if (int.TryParse(txtPage_Num.Text.Trim(), out num) && num > 0)
{
if (num <= pageCount)
{
PageIndex = num;
DrawControl(true);
}
}
}
/// <summary>
/// 跳轉頁數限制
/// </summary>
private void txtPage_Num_TextChanged(object sender, EventArgs e)
{
int num = 0;
if (int.TryParse(txtPageNum.Text.Trim(), out num) && num > 0)
{
if (num > PageCount)
{
txtPageNum.Text = PageCount.ToString();
}
}
}
/// <summary>
/// 光標離開分頁屬性
/// <summary>
private void txtPage_Size_Leave(object sender, EventArgs e)
{
if (isTextChanged)
{
isTextChanged = false;
lnk_First_LinkClicked(null, null);
}
}
/// <summary>
/// 分頁屬性改變了。
/// </summary>
private void txtPage_Size_TextChanged(object sender, EventArgs e)
{
int num = 0;
if (!int.TryParse(txtPage_Size.Text.Trim(), out num) || num <= 0)
{
num = 10;
txtPage_Size.Text = "10";
}
else
{
isTextChanged = true;
}
pageSize = num;
}
private void txtPage_Num_KeyDown(object sender, KeyEventArgs e)
{
if (e.KeyCode == Keys.Enter)
{
btn_Go_Click(null, null);
}
}
///// <summary>
///// enter鍵功能
///// </summary>
//private void txtPage_Num_KeyPress(object sender, KeyPressEventArgs e)
//{
// btn_Go_Click(null, null);
//}
//private void txtPage_Num_KeyDown(object sender, KeyEventArgs e)
//{
// if (e.KeyCode == Keys.Enter)
// {
// btn_Go_Click(null, null);
// }
//}
}
2:分頁控件的使用
編譯後工具欄就會有這個分頁控件,然後把這個控件拖到窗口中就行,如圖
在load方法中加上pagerControl1.OnPageChanged += new EventHandler(pagerControl1_OnPageChanged);並實現pagerControl1_OnPageChanged方法
public partial class StartForm : Form
{
public StartForm()
{
InitializeComponent();
}
private void StartForm_Load(object sender, EventArgs e)
{
pagerControl1.OnPageChanged += new EventHandler(pagerControl1_OnPageChanged);
}
private void pagerControl1_OnPageChanged(object sender, EventArgs e)
{
dataGridView1.DataSource = null;
//dataGridView1.Rows.Clear();
List<LayerAttributeFieldsModel> pageShow_List = new List<LayerAttributeFieldsModel>();
int pageindex = controlPage_QueryData1.PageIndex;
int pageSize = controlPage_QueryData1.PageSize;
int fromIndex = pageSize * (pageindex - 1);//開始行
int toIndex = pageSize * pageindex - 1; //結束行
if (toIndex >= list2.Count)//list2 爲查詢到的記錄
{
toIndex = list2.Count - 1;
}
for (int k = fromIndex; k <= toIndex; k++)
{
pageShow_List.Add(list2[k]);//要顯示的記錄
}
setDataGridView(pageShow_List);//把記錄寫入datagridview
controlPage_QueryData1.DrawControl(list2.Count);
}
//查詢
private void button1_Click(object sender, EventArgs e)
{
dataGridView1.DataSource = null;
//dataGridView1.Rows.Clear();//清除記錄
//把查到的數據放到list或者dataset中
if (list2.Count < 11)//查詢的記錄沒超過10條
{
controlPage_QueryData1.PageIndex = 1;
}
List<LayerAttributeFieldsModel> pageShowList = new List<LayerAttributeFieldsModel>();
int pageindex = controlPage_QueryData1.PageIndex;
int pageSize = controlPage_QueryData1.PageSize;
int fromIndex = pageSize * (pageindex - 1);//開始行
int toIndex = pageSize * pageindex - 1; //結束行
if (toIndex >= list2.Count)
{
toIndex = list2.Count - 1;
}
for (int k = fromIndex; k <= toIndex; k++)
{
pageShowList.Add(list2[k]);
}
setDataGridView(pageShowList);
controlPage_QueryData1.DrawControl(list2.Count);
}
}