如何在WinForm中对DataGrid进行分页显示
2006-04-11 17:56
531 查看
在网上大多数对DataGrid进行分页的例子都是Asp.net环境下的,其实在WinForm中也很简单。以下就是简单举一个例子。
首先,需要定义一个数据库存储过程,用来获得指定页的数据记录,大致的数据结构和存储过程如下(在SQL Server 2000下):
存储过程为:
CREATE PROCEDURE GetEmployees @EmployeeNum int, @StartNO int, @@TotalCount INT OUTPUT, @@RealNum INT OUTPUT AS
-- Get employees from DB through the specific number and the start position
DECLARE @PreRecCount VARCHAR( 10 )
DECLARE @CurRecCount VARCHAR( 10 )
SELECT @@TotalCount = COUNT(*) FROM EmployeeInfo
IF @@TotalCount > ( @StartNO + 1 ) * @EmployeeNum
SET @@RealNum = @EmployeeNum
ELSE
SET @@RealNum = @@TotalCount - @StartNO * @EmployeeNum
-- Get employees by the computed number
SET @CurRecCount = CAST( @StartNO * @EmployeeNum + @@RealNum AS VARCHAR( 10 ) )
IF @STARTNO = 0
EXEC( 'SELECT TOP ' + @CurRecCount + ' * FROM EmployeeInfo ORDER BY EmployeeID ASC' )
ELSE
BEGIN
SET @PreRecCount = CAST( @StartNO * @EmployeeNum AS VARCHAR( 10 ) )
EXEC( 'SELECT TOP ' + @CurRecCount + ' * FROM EmployeeInfo WHERE EmployeeID NOT IN '
+ '(SELECT TOP ' + @PreRecCount + ' EmployeeID FROM EmployeeInfo ORDER BY EmployeeID ASC) '
+ 'ORDER BY EmployeeID ASC'
)
END
GO
然后就是调用存储过程来进行显示,比较完整的源代码如下:
[align=left]//------------------------ Multi Page Demo ------------------------------------[/align]
[align=left]//-----------------------------------------------------------------------------[/align]
//---File:frmMultiPagesDemo.cs
[align=left]//---Description:The main form file to show how to use pages in datagrid [/align]
[align=left]//---Author:Knight[/align]
[align=left]//---Date:Mar.23, 2006[/align]
[align=left]//-----------------------------------------------------------------------------[/align]
[align=left]//-----------------------{ Multi Page Demo }-----------------------------------[/align]
[align=left] [/align]
[align=left]using System;[/align]
[align=left]using System.Drawing;[/align]
[align=left]using System.Collections;[/align]
[align=left]using System.ComponentModel;[/align]
[align=left]using System.Windows.Forms;[/align]
[align=left]using System.Data;[/align]
[align=left]using System.Data.SqlClient;[/align]
[align=left] [/align]
[align=left]namespace CSDataGrid[/align]
[align=left]{[/align]
[align=left] ///<summary>[/align]
[align=left] /// Summary description for frmMultiPages.[/align]
[align=left] ///</summary>[/align]
[align=left] public class frmMultiPages : System.Windows.Forms.Form[/align]
[align=left] {[/align]
[align=left] private System.Windows.Forms.Label lblPageInfo;[/align]
[align=left] private System.Windows.Forms.Button btnPrevious;[/align]
[align=left] private System.Windows.Forms.Button btnNext;[/align]
[align=left] [/align]
[align=left] protected SqlConnection sqlConn = new SqlConnection();[/align]
[align=left] protected SqlDataAdapter sqlDAdapter = null;[/align]
[align=left] protected DataSet sqlRecordSet = null;[/align]
[align=left] [/align]
[align=left] private int nCurPageNum = 0;[/align]
[align=left] private const int REC_NUM_PER_PAGE = 3;[/align]
[align=left] private int nTotalCount;[/align]
[align=left] private int nRealNum;[/align]
[align=left] private int nTotalPage;[/align]
[align=left] [/align]
[align=left] private System.Windows.Forms.DataGrid dtgUserInfo;[/align]
[align=left] [/align]
[align=left] ///<summary>[/align]
[align=left] /// Required designer variable.[/align]
[align=left] ///</summary>[/align]
[align=left] private System.ComponentModel.Container components = null;[/align]
[align=left] [/align]
[align=left] public frmMultiPages()[/align]
[align=left] {[/align]
[align=left] //[/align]
[align=left] // Required for Windows Form Designer support[/align]
[align=left] //[/align]
[align=left] InitializeComponent();[/align]
[align=left] [/align]
[align=left] //[/align]
[align=left] // TODO: Add any constructor code after InitializeComponent call[/align]
[align=left] //[/align]
[align=left] }[/align]
[align=left] [/align]
[align=left] ///<summary>[/align]
[align=left] /// Clean up any resources being used.[/align]
[align=left] ///</summary>[/align]
[align=left] protected override void Dispose( bool disposing )[/align]
[align=left] {[/align]
[align=left] if( disposing )[/align]
[align=left] {[/align]
[align=left] if(components != null)[/align]
[align=left] {[/align]
[align=left] components.Dispose();[/align]
[align=left] }[/align]
[align=left] }[/align]
[align=left] base.Dispose( disposing );[/align]
[align=left] }[/align]
[align=left] [/align]
[align=left] #region Windows Form Designer generated code[/align]
[align=left] ///<summary>[/align]
[align=left] /// Required method for Designer support - do not modify[/align]
[align=left] /// the contents of this method with the code editor.[/align]
[align=left] ///</summary>[/align]
[align=left] private void InitializeComponent()[/align]
[align=left] {[/align]
[align=left] this.dtgUserInfo = new System.Windows.Forms.DataGrid();[/align]
[align=left] this.lblPageInfo = new System.Windows.Forms.Label();[/align]
[align=left] this.btnPrevious = new System.Windows.Forms.Button();[/align]
[align=left] this.btnNext = new System.Windows.Forms.Button();[/align]
[align=left] ((System.ComponentModel.ISupportInitialize)(this.dtgUserInfo)).BeginInit();[/align]
[align=left] this.SuspendLayout();[/align]
[align=left] // [/align]
[align=left] // dtgUserInfo[/align]
[align=left] // [/align]
[align=left] this.dtgUserInfo.DataMember = "";[/align]
[align=left] this.dtgUserInfo.HeaderForeColor = System.Drawing.SystemColors.ControlText;[/align]
[align=left] this.dtgUserInfo.Location = new System.Drawing.Point(16, 16);[/align]
[align=left] this.dtgUserInfo.Name = "dtgUserInfo";[/align]
[align=left] this.dtgUserInfo.Size = new System.Drawing.Size(552, 416);[/align]
[align=left] this.dtgUserInfo.TabIndex = 0;[/align]
[align=left] // [/align]
[align=left] // lblPageInfo[/align]
[align=left] // [/align]
[align=left] this.lblPageInfo.AutoSize = true;[/align]
[align=left] this.lblPageInfo.Location = new System.Drawing.Point(16, 440);[/align]
[align=left] this.lblPageInfo.Name = "lblPageInfo";[/align]
[align=left] this.lblPageInfo.Size = new System.Drawing.Size(83, 16);[/align]
[align=left] this.lblPageInfo.TabIndex = 1;[/align]
[align=left] this.lblPageInfo.Text = "{0} of {1} Pages";[/align]
[align=left] // [/align]
[align=left] // btnPrevious[/align]
[align=left] // [/align]
[align=left] this.btnPrevious.Location = new System.Drawing.Point(408, 440);[/align]
[align=left] this.btnPrevious.Name = "btnPrevious";[/align]
[align=left] this.btnPrevious.TabIndex = 2;[/align]
[align=left] this.btnPrevious.Text = "Previous";[/align]
[align=left] this.btnPrevious.Click += new System.EventHandler(this.btnPrevious_Click);[/align]
[align=left] // [/align]
[align=left] // btnNext[/align]
[align=left] // [/align]
[align=left] this.btnNext.Location = new System.Drawing.Point(488, 440);[/align]
[align=left] this.btnNext.Name = "btnNext";[/align]
[align=left] this.btnNext.TabIndex = 3;[/align]
[align=left] this.btnNext.Text = "Next";[/align]
[align=left] this.btnNext.Click += new System.EventHandler(this.btnNext_Click);[/align]
[align=left] // [/align]
[align=left] // frmMultiPages[/align]
[align=left] // [/align]
[align=left] this.AutoScaleBaseSize = new System.Drawing.Size(5, 13);[/align]
[align=left] this.ClientSize = new System.Drawing.Size(584, 469);[/align]
[align=left] this.Controls.Add(this.btnNext);[/align]
[align=left] this.Controls.Add(this.btnPrevious);[/align]
[align=left] this.Controls.Add(this.lblPageInfo);[/align]
[align=left] this.Controls.Add(this.dtgUserInfo);[/align]
[align=left] this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedSingle;[/align]
[align=left] this.MaximizeBox = false;[/align]
[align=left] this.Name = "frmMultiPages";[/align]
[align=left] this.Text = "Multi Pages In DataGrid";[/align]
[align=left] this.Load += new System.EventHandler(this.frmMultiPages_Load);[/align]
[align=left] ((System.ComponentModel.ISupportInitialize)(this.dtgUserInfo)).EndInit();[/align]
[align=left] this.ResumeLayout(false);[/align]
[align=left] [/align]
[align=left] }[/align]
[align=left] #endregion[/align]
[align=left] [/align]
[align=left] private void frmMultiPages_Load(object sender, System.EventArgs e)[/align]
[align=left] {[/align]
[align=left] //Set connection string [/align]
[align=left] sqlConn.ConnectionString = yourconnectionstring;[/align]
[align=left] [/align]
[align=left] //Connect to DB[/align]
[align=left] if( ConnectDB() )[/align]
[align=left] {[/align]
[align=left] //Bind data to datagrid[/align]
[align=left] BindData();[/align]
[align=left] }[/align]
[align=left] [/align]
[align=left] }[/align]
[align=left] [/align]
[align=left] ///<summary>[/align]
[align=left] /// Connect to DB[/align]
[align=left] ///</summary>[/align]
[align=left] ///<returns>If connected, return True; else return False</returns>[/align]
[align=left] private bool ConnectDB()[/align]
[align=left] {[/align]
[align=left] //Check current connection's state[/align]
[align=left] try[/align]
[align=left] {[/align]
[align=left] if( sqlConn.State == ConnectionState.Closed[/align]
[align=left] || sqlConn.State == ConnectionState.Broken )[/align]
[align=left] {[/align]
[align=left] //Connection is not available[/align]
[align=left] sqlConn.Close();[/align]
[align=left] }[/align]
[align=left] else[/align]
[align=left] //Connection is available[/align]
[align=left] return true;[/align]
[align=left] }[/align]
[align=left] catch{};[/align]
[align=left] [/align]
[align=left] //Re-connect[/align]
[align=left] try [/align]
[align=left] {[/align]
[align=left] sqlConn.Open();[/align]
[align=left] }[/align]
[align=left] catch(SqlException e) [/align]
[align=left] {[/align]
[align=left] //Sql's exception[/align]
[align=left] MessageBox.Show( e.Message );[/align]
[align=left] }[/align]
[align=left] catch(Exception e)[/align]
[align=left] {[/align]
[align=left] //Other exception[/align]
[align=left] MessageBox.Show( e.Message );[/align]
[align=left] }[/align]
[align=left] [/align]
[align=left] if( sqlConn.State == ConnectionState.Closed[/align]
[align=left] || sqlConn.State == ConnectionState.Broken )[/align]
[align=left] //Connection is not available[/align]
[align=left] return false;[/align]
[align=left] else[/align]
[align=left] //Connection is available[/align]
[align=left] return true;[/align]
[align=left] }[/align]
[align=left] [/align]
[align=left] private void AddDGStyle()[/align]
[align=left] {[/align]
[align=left] DataGridTableStyle ts1 = new DataGridTableStyle(); [/align]
[align=left] [/align]
[align=left] //specify the table from dataset (required step) [/align]
[align=left] ts1.MappingName = "EmployeeInfo"; [/align]
[align=left] PropertyDescriptorCollection pdc = this.BindingContext[/align]
[align=left] [sqlRecordSet, "EmployeeInfo"].GetItemProperties();[/align]
[align=left] [/align]
[align=left] DataGridColumnStyle TextCol = new DataGridTextBoxColumn( pdc["EmployeeID"], "i" );[/align]
[align=left] TextCol.MappingName = "EmployeeID"; [/align]
[align=left] TextCol.HeaderText = "EmployeeID"; [/align]
[align=left] TextCol.Width = 0; [/align]
[align=left] TextCol.ReadOnly = true;[/align]
[align=left] ts1.GridColumnStyles.Add(TextCol); [/align]
[align=left] [/align]
[align=left] TextCol = new DataGridTextBoxColumn(); [/align]
[align=left] TextCol.MappingName = "EmployeeName"; [/align]
[align=left] TextCol.HeaderText = "Employee Name"; [/align]
[align=left] TextCol.Width = 100; [/align]
[align=left] ts1.GridColumnStyles.Add(TextCol); [/align]
[align=left] [/align]
[align=left] TextCol = new DataGridTextBoxColumn( pdc["Salary"], "i" );[/align]
[align=left] TextCol.MappingName = "Salary"; [/align]
[align=left] TextCol.HeaderText = "Salary"; [/align]
[align=left] TextCol.Width = 80; [/align]
[align=left] ts1.GridColumnStyles.Add(TextCol); [/align]
[align=left] [/align]
[align=left] TextCol = new DataGridTextBoxColumn(); [/align]
[align=left] TextCol.MappingName = "CellPhone"; [/align]
[align=left] TextCol.HeaderText = "Cell Phone"; [/align]
[align=left] TextCol.Width = 80; [/align]
[align=left] ts1.GridColumnStyles.Add(TextCol); [/align]
[align=left] [/align]
[align=left] TextCol = new DataGridTextBoxColumn(); [/align]
[align=left] TextCol.MappingName = "EmailAddress"; [/align]
[align=left] TextCol.HeaderText = "Email Address"; [/align]
[align=left] TextCol.Width = 100; [/align]
[align=left] ts1.GridColumnStyles.Add(TextCol); [/align]
[align=left] [/align]
[align=left] dtgUserInfo.TableStyles.Add(ts1);[/align]
[align=left] [/align]
[align=left] }[/align]
[align=left] [/align]
[align=left] private void GetEmployeeData()[/align]
[align=left] {[/align]
[align=left] sqlDAdapter = new SqlDataAdapter( );[/align]
[align=left] SqlCommand sqlComm = new SqlCommand();[/align]
[align=left] sqlComm.Connection = sqlConn;[/align]
[align=left] [/align]
[align=left] sqlComm.CommandText = "GetEmployees";[/align]
[align=left] sqlComm.CommandType = CommandType.StoredProcedure;[/align]
[align=left] sqlComm.Parameters.Add ( "@EmployeeNum", REC_NUM_PER_PAGE );[/align]
[align=left] sqlComm.Parameters.Add ( "@StartNO", nCurPageNum );[/align]
[align=left] SqlParameter sqlPar = sqlComm.Parameters.Add ( "@@TotalCount", SqlDbType.Int );[/align]
[align=left] sqlPar.Direction = ParameterDirection.Output;[/align]
[align=left] sqlPar = sqlComm.Parameters.Add ( "@@RealNum", SqlDbType.Int );[/align]
[align=left] sqlPar.Direction = ParameterDirection.Output;[/align]
[align=left] [/align]
[align=left] sqlDAdapter.SelectCommand = sqlComm;[/align]
[align=left] [/align]
[align=left] //Fill dataset[/align]
[align=left] sqlRecordSet = new DataSet();[/align]
[align=left] sqlDAdapter.Fill( sqlRecordSet, "EmployeeInfo" );[/align]
[align=left] nTotalCount = Convert.ToInt32( sqlComm.Parameters["@@TotalCount"].Value.ToString() );[/align]
[align=left] nRealNum = Convert.ToInt32( sqlComm.Parameters["@@RealNum"].Value.ToString() );[/align]
[align=left] [/align]
[align=left] sqlComm.Dispose();[/align]
[align=left] [/align]
[align=left] nTotalPage = nTotalCount - nTotalCount % REC_NUM_PER_PAGE;[/align]
[align=left] nTotalPage /= REC_NUM_PER_PAGE;[/align]
[align=left] nTotalPage++;[/align]
[align=left] [/align]
[align=left] lblPageInfo.Text = string.Format( "{0} of {1} pages", nCurPageNum + 1, nTotalPage );[/align]
[align=left] if( nCurPageNum + 1 >= nTotalPage )[/align]
[align=left] btnNext.Enabled = false;[/align]
[align=left] else[/align]
[align=left] btnNext.Enabled = true;[/align]
[align=left] [/align]
[align=left] if( nCurPageNum == 0 )[/align]
[align=left] btnPrevious.Enabled = false;[/align]
[align=left] else[/align]
[align=left] btnPrevious.Enabled = true;[/align]
[align=left] [/align]
[align=left] }[/align]
[align=left] [/align]
[align=left] private void BindData()[/align]
[align=left] {[/align]
[align=left] GetEmployeeData();[/align]
[align=left] [/align]
[align=left] //Bind datagrid with dataset[/align]
[align=left] dtgUserInfo.SetDataBinding( sqlRecordSet, "EmployeeInfo");[/align]
[align=left] [/align]
[align=left] //Add datagrid style[/align]
[align=left] AddDGStyle();[/align]
[align=left] }[/align]
[align=left] [/align]
[align=left] private void ReBindData()[/align]
[align=left] {[/align]
[align=left] GetEmployeeData();[/align]
[align=left] [/align]
[align=left] //Bind datagrid with dataset[/align]
[align=left] dtgUserInfo.SetDataBinding( sqlRecordSet, "EmployeeInfo");[/align]
[align=left] }[/align]
[align=left] [/align]
[align=left] private void btnPrevious_Click(object sender, System.EventArgs e)[/align]
[align=left] {[/align]
[align=left] nCurPageNum--;[/align]
[align=left] sqlRecordSet.Tables["EmployeeInfo"].Rows.Clear();[/align]
[align=left] ReBindData();[/align]
[align=left] }[/align]
[align=left] [/align]
[align=left] private void btnNext_Click(object sender, System.EventArgs e)[/align]
[align=left] {[/align]
[align=left] nCurPageNum++;[/align]
[align=left] sqlRecordSet.Tables["EmployeeInfo"].Rows.Clear();[/align]
[align=left] ReBindData();[/align]
[align=left] }[/align]
[align=left] [/align]
[align=left] }[/align]
[align=left]}[/align]
首先,需要定义一个数据库存储过程,用来获得指定页的数据记录,大致的数据结构和存储过程如下(在SQL Server 2000下):
[align=center]字段名[/align] | [align=center]类型[/align] | [align=center]备注[/align] |
EmployeeID | Int | 自增字段,主键 |
EmployeeName | Varchar(20) | |
Salary | Int | |
CellPhone | Varchar(20) | |
EmailAddress | Varchar(20) | |
存储过程为:
CREATE PROCEDURE GetEmployees @EmployeeNum int, @StartNO int, @@TotalCount INT OUTPUT, @@RealNum INT OUTPUT AS
-- Get employees from DB through the specific number and the start position
DECLARE @PreRecCount VARCHAR( 10 )
DECLARE @CurRecCount VARCHAR( 10 )
SELECT @@TotalCount = COUNT(*) FROM EmployeeInfo
IF @@TotalCount > ( @StartNO + 1 ) * @EmployeeNum
SET @@RealNum = @EmployeeNum
ELSE
SET @@RealNum = @@TotalCount - @StartNO * @EmployeeNum
-- Get employees by the computed number
SET @CurRecCount = CAST( @StartNO * @EmployeeNum + @@RealNum AS VARCHAR( 10 ) )
IF @STARTNO = 0
EXEC( 'SELECT TOP ' + @CurRecCount + ' * FROM EmployeeInfo ORDER BY EmployeeID ASC' )
ELSE
BEGIN
SET @PreRecCount = CAST( @StartNO * @EmployeeNum AS VARCHAR( 10 ) )
EXEC( 'SELECT TOP ' + @CurRecCount + ' * FROM EmployeeInfo WHERE EmployeeID NOT IN '
+ '(SELECT TOP ' + @PreRecCount + ' EmployeeID FROM EmployeeInfo ORDER BY EmployeeID ASC) '
+ 'ORDER BY EmployeeID ASC'
)
END
GO
然后就是调用存储过程来进行显示,比较完整的源代码如下:
[align=left]//------------------------ Multi Page Demo ------------------------------------[/align]
[align=left]//-----------------------------------------------------------------------------[/align]
//---File:frmMultiPagesDemo.cs
[align=left]//---Description:The main form file to show how to use pages in datagrid [/align]
[align=left]//---Author:Knight[/align]
[align=left]//---Date:Mar.23, 2006[/align]
[align=left]//-----------------------------------------------------------------------------[/align]
[align=left]//-----------------------{ Multi Page Demo }-----------------------------------[/align]
[align=left] [/align]
[align=left]using System;[/align]
[align=left]using System.Drawing;[/align]
[align=left]using System.Collections;[/align]
[align=left]using System.ComponentModel;[/align]
[align=left]using System.Windows.Forms;[/align]
[align=left]using System.Data;[/align]
[align=left]using System.Data.SqlClient;[/align]
[align=left] [/align]
[align=left]namespace CSDataGrid[/align]
[align=left]{[/align]
[align=left] ///<summary>[/align]
[align=left] /// Summary description for frmMultiPages.[/align]
[align=left] ///</summary>[/align]
[align=left] public class frmMultiPages : System.Windows.Forms.Form[/align]
[align=left] {[/align]
[align=left] private System.Windows.Forms.Label lblPageInfo;[/align]
[align=left] private System.Windows.Forms.Button btnPrevious;[/align]
[align=left] private System.Windows.Forms.Button btnNext;[/align]
[align=left] [/align]
[align=left] protected SqlConnection sqlConn = new SqlConnection();[/align]
[align=left] protected SqlDataAdapter sqlDAdapter = null;[/align]
[align=left] protected DataSet sqlRecordSet = null;[/align]
[align=left] [/align]
[align=left] private int nCurPageNum = 0;[/align]
[align=left] private const int REC_NUM_PER_PAGE = 3;[/align]
[align=left] private int nTotalCount;[/align]
[align=left] private int nRealNum;[/align]
[align=left] private int nTotalPage;[/align]
[align=left] [/align]
[align=left] private System.Windows.Forms.DataGrid dtgUserInfo;[/align]
[align=left] [/align]
[align=left] ///<summary>[/align]
[align=left] /// Required designer variable.[/align]
[align=left] ///</summary>[/align]
[align=left] private System.ComponentModel.Container components = null;[/align]
[align=left] [/align]
[align=left] public frmMultiPages()[/align]
[align=left] {[/align]
[align=left] //[/align]
[align=left] // Required for Windows Form Designer support[/align]
[align=left] //[/align]
[align=left] InitializeComponent();[/align]
[align=left] [/align]
[align=left] //[/align]
[align=left] // TODO: Add any constructor code after InitializeComponent call[/align]
[align=left] //[/align]
[align=left] }[/align]
[align=left] [/align]
[align=left] ///<summary>[/align]
[align=left] /// Clean up any resources being used.[/align]
[align=left] ///</summary>[/align]
[align=left] protected override void Dispose( bool disposing )[/align]
[align=left] {[/align]
[align=left] if( disposing )[/align]
[align=left] {[/align]
[align=left] if(components != null)[/align]
[align=left] {[/align]
[align=left] components.Dispose();[/align]
[align=left] }[/align]
[align=left] }[/align]
[align=left] base.Dispose( disposing );[/align]
[align=left] }[/align]
[align=left] [/align]
[align=left] #region Windows Form Designer generated code[/align]
[align=left] ///<summary>[/align]
[align=left] /// Required method for Designer support - do not modify[/align]
[align=left] /// the contents of this method with the code editor.[/align]
[align=left] ///</summary>[/align]
[align=left] private void InitializeComponent()[/align]
[align=left] {[/align]
[align=left] this.dtgUserInfo = new System.Windows.Forms.DataGrid();[/align]
[align=left] this.lblPageInfo = new System.Windows.Forms.Label();[/align]
[align=left] this.btnPrevious = new System.Windows.Forms.Button();[/align]
[align=left] this.btnNext = new System.Windows.Forms.Button();[/align]
[align=left] ((System.ComponentModel.ISupportInitialize)(this.dtgUserInfo)).BeginInit();[/align]
[align=left] this.SuspendLayout();[/align]
[align=left] // [/align]
[align=left] // dtgUserInfo[/align]
[align=left] // [/align]
[align=left] this.dtgUserInfo.DataMember = "";[/align]
[align=left] this.dtgUserInfo.HeaderForeColor = System.Drawing.SystemColors.ControlText;[/align]
[align=left] this.dtgUserInfo.Location = new System.Drawing.Point(16, 16);[/align]
[align=left] this.dtgUserInfo.Name = "dtgUserInfo";[/align]
[align=left] this.dtgUserInfo.Size = new System.Drawing.Size(552, 416);[/align]
[align=left] this.dtgUserInfo.TabIndex = 0;[/align]
[align=left] // [/align]
[align=left] // lblPageInfo[/align]
[align=left] // [/align]
[align=left] this.lblPageInfo.AutoSize = true;[/align]
[align=left] this.lblPageInfo.Location = new System.Drawing.Point(16, 440);[/align]
[align=left] this.lblPageInfo.Name = "lblPageInfo";[/align]
[align=left] this.lblPageInfo.Size = new System.Drawing.Size(83, 16);[/align]
[align=left] this.lblPageInfo.TabIndex = 1;[/align]
[align=left] this.lblPageInfo.Text = "{0} of {1} Pages";[/align]
[align=left] // [/align]
[align=left] // btnPrevious[/align]
[align=left] // [/align]
[align=left] this.btnPrevious.Location = new System.Drawing.Point(408, 440);[/align]
[align=left] this.btnPrevious.Name = "btnPrevious";[/align]
[align=left] this.btnPrevious.TabIndex = 2;[/align]
[align=left] this.btnPrevious.Text = "Previous";[/align]
[align=left] this.btnPrevious.Click += new System.EventHandler(this.btnPrevious_Click);[/align]
[align=left] // [/align]
[align=left] // btnNext[/align]
[align=left] // [/align]
[align=left] this.btnNext.Location = new System.Drawing.Point(488, 440);[/align]
[align=left] this.btnNext.Name = "btnNext";[/align]
[align=left] this.btnNext.TabIndex = 3;[/align]
[align=left] this.btnNext.Text = "Next";[/align]
[align=left] this.btnNext.Click += new System.EventHandler(this.btnNext_Click);[/align]
[align=left] // [/align]
[align=left] // frmMultiPages[/align]
[align=left] // [/align]
[align=left] this.AutoScaleBaseSize = new System.Drawing.Size(5, 13);[/align]
[align=left] this.ClientSize = new System.Drawing.Size(584, 469);[/align]
[align=left] this.Controls.Add(this.btnNext);[/align]
[align=left] this.Controls.Add(this.btnPrevious);[/align]
[align=left] this.Controls.Add(this.lblPageInfo);[/align]
[align=left] this.Controls.Add(this.dtgUserInfo);[/align]
[align=left] this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedSingle;[/align]
[align=left] this.MaximizeBox = false;[/align]
[align=left] this.Name = "frmMultiPages";[/align]
[align=left] this.Text = "Multi Pages In DataGrid";[/align]
[align=left] this.Load += new System.EventHandler(this.frmMultiPages_Load);[/align]
[align=left] ((System.ComponentModel.ISupportInitialize)(this.dtgUserInfo)).EndInit();[/align]
[align=left] this.ResumeLayout(false);[/align]
[align=left] [/align]
[align=left] }[/align]
[align=left] #endregion[/align]
[align=left] [/align]
[align=left] private void frmMultiPages_Load(object sender, System.EventArgs e)[/align]
[align=left] {[/align]
[align=left] //Set connection string [/align]
[align=left] sqlConn.ConnectionString = yourconnectionstring;[/align]
[align=left] [/align]
[align=left] //Connect to DB[/align]
[align=left] if( ConnectDB() )[/align]
[align=left] {[/align]
[align=left] //Bind data to datagrid[/align]
[align=left] BindData();[/align]
[align=left] }[/align]
[align=left] [/align]
[align=left] }[/align]
[align=left] [/align]
[align=left] ///<summary>[/align]
[align=left] /// Connect to DB[/align]
[align=left] ///</summary>[/align]
[align=left] ///<returns>If connected, return True; else return False</returns>[/align]
[align=left] private bool ConnectDB()[/align]
[align=left] {[/align]
[align=left] //Check current connection's state[/align]
[align=left] try[/align]
[align=left] {[/align]
[align=left] if( sqlConn.State == ConnectionState.Closed[/align]
[align=left] || sqlConn.State == ConnectionState.Broken )[/align]
[align=left] {[/align]
[align=left] //Connection is not available[/align]
[align=left] sqlConn.Close();[/align]
[align=left] }[/align]
[align=left] else[/align]
[align=left] //Connection is available[/align]
[align=left] return true;[/align]
[align=left] }[/align]
[align=left] catch{};[/align]
[align=left] [/align]
[align=left] //Re-connect[/align]
[align=left] try [/align]
[align=left] {[/align]
[align=left] sqlConn.Open();[/align]
[align=left] }[/align]
[align=left] catch(SqlException e) [/align]
[align=left] {[/align]
[align=left] //Sql's exception[/align]
[align=left] MessageBox.Show( e.Message );[/align]
[align=left] }[/align]
[align=left] catch(Exception e)[/align]
[align=left] {[/align]
[align=left] //Other exception[/align]
[align=left] MessageBox.Show( e.Message );[/align]
[align=left] }[/align]
[align=left] [/align]
[align=left] if( sqlConn.State == ConnectionState.Closed[/align]
[align=left] || sqlConn.State == ConnectionState.Broken )[/align]
[align=left] //Connection is not available[/align]
[align=left] return false;[/align]
[align=left] else[/align]
[align=left] //Connection is available[/align]
[align=left] return true;[/align]
[align=left] }[/align]
[align=left] [/align]
[align=left] private void AddDGStyle()[/align]
[align=left] {[/align]
[align=left] DataGridTableStyle ts1 = new DataGridTableStyle(); [/align]
[align=left] [/align]
[align=left] //specify the table from dataset (required step) [/align]
[align=left] ts1.MappingName = "EmployeeInfo"; [/align]
[align=left] PropertyDescriptorCollection pdc = this.BindingContext[/align]
[align=left] [sqlRecordSet, "EmployeeInfo"].GetItemProperties();[/align]
[align=left] [/align]
[align=left] DataGridColumnStyle TextCol = new DataGridTextBoxColumn( pdc["EmployeeID"], "i" );[/align]
[align=left] TextCol.MappingName = "EmployeeID"; [/align]
[align=left] TextCol.HeaderText = "EmployeeID"; [/align]
[align=left] TextCol.Width = 0; [/align]
[align=left] TextCol.ReadOnly = true;[/align]
[align=left] ts1.GridColumnStyles.Add(TextCol); [/align]
[align=left] [/align]
[align=left] TextCol = new DataGridTextBoxColumn(); [/align]
[align=left] TextCol.MappingName = "EmployeeName"; [/align]
[align=left] TextCol.HeaderText = "Employee Name"; [/align]
[align=left] TextCol.Width = 100; [/align]
[align=left] ts1.GridColumnStyles.Add(TextCol); [/align]
[align=left] [/align]
[align=left] TextCol = new DataGridTextBoxColumn( pdc["Salary"], "i" );[/align]
[align=left] TextCol.MappingName = "Salary"; [/align]
[align=left] TextCol.HeaderText = "Salary"; [/align]
[align=left] TextCol.Width = 80; [/align]
[align=left] ts1.GridColumnStyles.Add(TextCol); [/align]
[align=left] [/align]
[align=left] TextCol = new DataGridTextBoxColumn(); [/align]
[align=left] TextCol.MappingName = "CellPhone"; [/align]
[align=left] TextCol.HeaderText = "Cell Phone"; [/align]
[align=left] TextCol.Width = 80; [/align]
[align=left] ts1.GridColumnStyles.Add(TextCol); [/align]
[align=left] [/align]
[align=left] TextCol = new DataGridTextBoxColumn(); [/align]
[align=left] TextCol.MappingName = "EmailAddress"; [/align]
[align=left] TextCol.HeaderText = "Email Address"; [/align]
[align=left] TextCol.Width = 100; [/align]
[align=left] ts1.GridColumnStyles.Add(TextCol); [/align]
[align=left] [/align]
[align=left] dtgUserInfo.TableStyles.Add(ts1);[/align]
[align=left] [/align]
[align=left] }[/align]
[align=left] [/align]
[align=left] private void GetEmployeeData()[/align]
[align=left] {[/align]
[align=left] sqlDAdapter = new SqlDataAdapter( );[/align]
[align=left] SqlCommand sqlComm = new SqlCommand();[/align]
[align=left] sqlComm.Connection = sqlConn;[/align]
[align=left] [/align]
[align=left] sqlComm.CommandText = "GetEmployees";[/align]
[align=left] sqlComm.CommandType = CommandType.StoredProcedure;[/align]
[align=left] sqlComm.Parameters.Add ( "@EmployeeNum", REC_NUM_PER_PAGE );[/align]
[align=left] sqlComm.Parameters.Add ( "@StartNO", nCurPageNum );[/align]
[align=left] SqlParameter sqlPar = sqlComm.Parameters.Add ( "@@TotalCount", SqlDbType.Int );[/align]
[align=left] sqlPar.Direction = ParameterDirection.Output;[/align]
[align=left] sqlPar = sqlComm.Parameters.Add ( "@@RealNum", SqlDbType.Int );[/align]
[align=left] sqlPar.Direction = ParameterDirection.Output;[/align]
[align=left] [/align]
[align=left] sqlDAdapter.SelectCommand = sqlComm;[/align]
[align=left] [/align]
[align=left] //Fill dataset[/align]
[align=left] sqlRecordSet = new DataSet();[/align]
[align=left] sqlDAdapter.Fill( sqlRecordSet, "EmployeeInfo" );[/align]
[align=left] nTotalCount = Convert.ToInt32( sqlComm.Parameters["@@TotalCount"].Value.ToString() );[/align]
[align=left] nRealNum = Convert.ToInt32( sqlComm.Parameters["@@RealNum"].Value.ToString() );[/align]
[align=left] [/align]
[align=left] sqlComm.Dispose();[/align]
[align=left] [/align]
[align=left] nTotalPage = nTotalCount - nTotalCount % REC_NUM_PER_PAGE;[/align]
[align=left] nTotalPage /= REC_NUM_PER_PAGE;[/align]
[align=left] nTotalPage++;[/align]
[align=left] [/align]
[align=left] lblPageInfo.Text = string.Format( "{0} of {1} pages", nCurPageNum + 1, nTotalPage );[/align]
[align=left] if( nCurPageNum + 1 >= nTotalPage )[/align]
[align=left] btnNext.Enabled = false;[/align]
[align=left] else[/align]
[align=left] btnNext.Enabled = true;[/align]
[align=left] [/align]
[align=left] if( nCurPageNum == 0 )[/align]
[align=left] btnPrevious.Enabled = false;[/align]
[align=left] else[/align]
[align=left] btnPrevious.Enabled = true;[/align]
[align=left] [/align]
[align=left] }[/align]
[align=left] [/align]
[align=left] private void BindData()[/align]
[align=left] {[/align]
[align=left] GetEmployeeData();[/align]
[align=left] [/align]
[align=left] //Bind datagrid with dataset[/align]
[align=left] dtgUserInfo.SetDataBinding( sqlRecordSet, "EmployeeInfo");[/align]
[align=left] [/align]
[align=left] //Add datagrid style[/align]
[align=left] AddDGStyle();[/align]
[align=left] }[/align]
[align=left] [/align]
[align=left] private void ReBindData()[/align]
[align=left] {[/align]
[align=left] GetEmployeeData();[/align]
[align=left] [/align]
[align=left] //Bind datagrid with dataset[/align]
[align=left] dtgUserInfo.SetDataBinding( sqlRecordSet, "EmployeeInfo");[/align]
[align=left] }[/align]
[align=left] [/align]
[align=left] private void btnPrevious_Click(object sender, System.EventArgs e)[/align]
[align=left] {[/align]
[align=left] nCurPageNum--;[/align]
[align=left] sqlRecordSet.Tables["EmployeeInfo"].Rows.Clear();[/align]
[align=left] ReBindData();[/align]
[align=left] }[/align]
[align=left] [/align]
[align=left] private void btnNext_Click(object sender, System.EventArgs e)[/align]
[align=left] {[/align]
[align=left] nCurPageNum++;[/align]
[align=left] sqlRecordSet.Tables["EmployeeInfo"].Rows.Clear();[/align]
[align=left] ReBindData();[/align]
[align=left] }[/align]
[align=left] [/align]
[align=left] }[/align]
[align=left]}[/align]
相关文章推荐
- 如何在WinForm中对DataGrid进行分页显示收藏
- 如何在WinForm中对DataGrid进行分页显示
- 如何在WinForm中对DataGrid进行分页显示(转)
- 如何解决easyui-datagrid分页组件中文显示的问题
- 用jQuery如何实现删除子节点和winform label显示数据分页
- 制作分页显示时用paginate()函数获取对象后如何将获取到的某一键值进行修改
- 如何解决easyui-datagrid分页组件中文显示的问题
- WinForm中DataGrid(C#)应用 - 如何控制DataGrid显示规定行数.
- 面试题:如何对查询结果进行分页显示
- jqueryEasyui的datagrid分页显示数据,后台用thinkphp,如何实现?
- C#winform界面中如何显示当前时间,是用lable控件实现
- 如何通过动态生成Html灵活实现DataGrid分类统计的界面显示功能
- phpcms v9如何更改分页显示条数?
- Android 如何进行分页请求
- 如何使用 Visual C# .NET 对 DataGrid Windows 控件执行分页
- java中对list进行分页,并将显示数据到页面
- easyUI 的datagrid字段如何中把一些显示的内容换成直观容易的理解的
- 如何datagrid分页保持每页先前选择的checkbox的状态?
- 对超长文本数据进行分页显示
- 如何在CSDN博客中的所贴的代码进行【代码块】显示