前两天有一个简单的C/S项目用到分页,因为是Winform下,没有现成的,自己也懒得写,就找了下,看到了ycmoon的一个控件
http://www.cnblogs.com/ycmoon/archive/2010/01/07/1640689.html参考后,做了简化,只保留了分页的部分,主要是点击事件的Delegate,未做过多测试,有兴趣的朋友可以下载源码自行修改,如有好的建议,也可以给我反馈。3w@live.cn ,效果如下:
控件设计界面:
设计时:
运行时:
附带一个取分页数据的存储过程:
+ expand sourceview plaincopy to clipboardprint?在WinForm项目中,需要设置控件的总记录数RecordCount (由分页存储过程计算得出),和翻页事件winFormPager1_PageIndexChanged 。
测试源码如下:
view plaincopy to clipboardprint?using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.Data.SqlClient;
namespace DemoPager
{
public partial class frmMain : Form
{
public frmMain()
{
InitializeComponent();
}
#region Members
//总记录数
public int RecordCount = 0;
private string strConn = @"Data Source=ap2\vegnet;Initial Catalog=Db_TonyPaging;Integrated Security=SSPI;";
//"Server=localhost;database=Db_TonyPaging;uid=sa;pwd=sa;";
private string strProcedure = "ZJF_CPP_GetPagedRecordFor2005_2008";
#endregion
#region Methods
/// <summary>
/// 绑定第Index页的数据
/// </summary>
/// <param name="Index"></param>
private void BindDataWithPage(int Index)
{
winFormPager1.PageIndex = Index;
//winFormPager1.PageSize = 10;; ;
dgvList.DataSource = GetData(strConn, strProcedure, Index, winFormPager1.PageSize);
//获取并设置总记录数
winFormPager1.RecordCount = RecordCount;
}
/// <summary>
/// 获取数据源
/// </summary>
/// <param name="conn"></param>
/// <param name="strProcedure"></param>
/// <param name="pageIndex"></param>
/// <param name="pageSize"></param>
/// <returns></returns>
private DataTable GetData(string conn, string strProcedure, int pageIndex, int pageSize)
{
using (SqlConnection connection = new SqlConnection(conn))
{
SqlCommand command = new SqlCommand(strProcedure, connection);
command.CommandType = CommandType.StoredProcedure;//采用存储过程
//存储过程参数
command.Parameters.Add("@Table", SqlDbType.NVarChar, 1000).Value = "DepartDemo";
command.Parameters.Add("@TIndex", SqlDbType.NVarChar, 100).Value = "PKID";
command.Parameters.Add("@Column", SqlDbType.NVarChar, 2000).Value = "*";
command.Parameters.Add("@Sql", SqlDbType.NVarChar, 3000).Value = " 1=1 ";
command.Parameters.Add("@PageIndex", SqlDbType.Int, 8).Value = pageIndex.ToString();
command.Parameters.Add("@PageSize", SqlDbType.Int, 8).Value = pageSize.ToString();
command.Parameters.Add("@Sort", SqlDbType.NVarChar, 200).Value = " PKID desc";
//打开连接
if (connection.State != ConnectionState.Open) { connection.Open(); }
try
{
//填充数据
SqlDataAdapter da = new SqlDataAdapter(command);
DataSet ds = new DataSet();
da.Fill(ds);
//获取总记录数
RecordCount = Convert.ToInt32(ds.Tables[1].Rows[0][0]);
//返回数据集
return ds.Tables[0];
}
catch (SqlException err)
{
MessageBox.Show(err.Message);
return null; ;
}
finally
{
connection.Close();
}
}
}
#endregion
#region Events
private void frmMain_Load(object sender, EventArgs e)
{
//不自动生成列
dgvList.AutoGenerateColumns = false;
//绑定数据
BindDataWithPage(1);
}
/// <summary>
/// 翻页事件
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void winFormPager1_PageIndexChanged(object sender, EventArgs e)
{
BindDataWithPage(winFormPager1.PageIndex);
}
#endregion
}
}
下载控件源码及演示程序(含SQL)
下载地址二下载地址一