zoukankan      html  css  js  c++  java
  • [DevExpress]GridControl分页的实现

    加入两个组件:BindingNavigator和BindingSource




    代码:

    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Data;
    using System.Data.SqlClient;
    using System.Drawing;
    using System.Text;
    using System.Linq;
    using System.Threading.Tasks;
    using System.Windows.Forms;
    using DevExpress.XtraEditors;
    using DZAMS.DBUtility;
    
    namespace DZAMS.Demo
    {
    
        public partial class GridPage_Frm : DevExpress.XtraEditors.XtraForm
        {
            public DataTable dt = new DataTable();
            StoreProcedure sp;
            private int pageSize = 10;     //每页显示行数
            private int nMax = 0;         //总记录数
            private int pageCount = 0;    //页数=总记录数/每页显示行数
            private int pageCurrent = 0;   //当前页号
            private DataSet ds = new DataSet();
            private DataTable dtInfo = new DataTable();
            public GridPage_Frm()
            {
                InitializeComponent();
            }
    
            private void GridPage_Frm_Load(object sender, EventArgs e)
            {
                string strQuery = string.Format("SELECT   Id, UserCode, UserName, RoleName, Ip, Mac, LoginTime FROM   DZ_LoginLog");
                dt = SqlHelper.ExecuteDataset(SqlHelper.conn, CommandType.Text, strQuery.ToString()).Tables[0];
    
                gridControl1.DataSource = dt;
    
                string strConn = "SERVER=(local);DATABASE=DZ;UID=sa;PWD=XXXX";   //数据库连接字符串
                SqlConnection conn = new SqlConnection(strConn);
                conn.Open();
                string strSql = "SELECT count(*) as num FROM DZ_LoginLog";
                SqlDataAdapter sda = new SqlDataAdapter(strSql, conn);
                sda.Fill(ds, "ds");
                conn.Close();
    
                nMax = Convert.ToInt32(ds.Tables[0].Rows[0]["num"].ToString());
                lblTotalCount.Text = nMax.ToString();
                lblPageSize.Text = pageSize.ToString();
    
                sp = new StoreProcedure("Pr_Monitor_Pagination", strConn);
                dtInfo = sp.ExecuteDataTable("DZ_LoginLog", "Id", "Id desc", pageCurrent++, pageSize);
                InitDataSet();
    
            }
            private void InitDataSet()
            {
                pageCount = (nMax / pageSize);    //计算出总页数
    
                if ((nMax % pageSize) > 0) pageCount++;
    
                pageCurrent = 1;    //当前页数从1開始
    
                LoadData();
            }
    
            private void LoadData()
            {
                lblPageCount.Text = "/"+pageCount.ToString();
                txtCurrentPage.Text = Convert.ToString(pageCurrent);
    
                this.bdsInfo.DataSource = dtInfo;
                this.bdnInfo.BindingSource = bdsInfo;
                this.gridControl1.DataSource = bdsInfo;
            }
    
            private void bdnInfo_ItemClicked(object sender, ToolStripItemClickedEventArgs e)
            {
                if (e.ClickedItem.Text == "导出当前页")
                {
                    SaveFileDialog saveFileDialog = new SaveFileDialog();
                    saveFileDialog.Title = "导出Excel";
                    saveFileDialog.Filter = "Excel文件(*.xls)|*.xls";
                    DialogResult dialogResult = saveFileDialog.ShowDialog(this);
                    if (dialogResult == DialogResult.OK)
                    {
                        DevExpress.XtraPrinting.XlsExportOptions options = new DevExpress.XtraPrinting.XlsExportOptions();
                        gridControl1.ExportToXls(saveFileDialog.FileName, options);  
                        // gridControl1.ExportToExcelOld(saveFileDialog.FileName);
                        DevExpress.XtraEditors.XtraMessageBox.Show("保存成功!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information);
                    }  
                }
                    if (e.ClickedItem.Text == "关闭")
                    {
                        this.Close();
                    }
                    if (e.ClickedItem.Text == "首页")
                    {
                        pageCurrent--;
                        if (pageCurrent <= 0)
                        {
                            MessageBox.Show("已经是首页。请点击“下一页”查看!");
                            return;
                        }
                        else
                        {
                            pageCurrent = 1;
                            dtInfo = sp.ExecuteDataTable("DZ_LoginLog", "Id", "Id desc", pageCurrent, pageSize);
                        }
                    }
                    if (e.ClickedItem.Text == "上一页")
                    {
                        pageCurrent--;
                        if (pageCurrent <= 0)
                        {
                            MessageBox.Show("已经是第一页,请点击“下一页”查看!");
                            return;
                        }
                        else
                        {
                            dtInfo = sp.ExecuteDataTable("DZ_LoginLog", "Id", "Id desc", pageCurrent, pageSize);
                        }
                    }
                    if (e.ClickedItem.Text == "下一页")
                    {
                        pageCurrent++;
                        if (pageCurrent > pageCount)
                        {
                            MessageBox.Show("已经是最后一页。请点击“上一页”查看。");
                            return;
                        }
                        else
                        {
                            dtInfo = sp.ExecuteDataTable("DZ_LoginLog", "Id", "Id desc", pageCurrent, pageSize);
                        }
                    }
                    if (e.ClickedItem.Text == "尾页")
                    {
                        pageCurrent++;
                        if (pageCurrent > pageCount)
                        {
                            MessageBox.Show("已经是尾页,请点击“上一页”查看。");
                            return;
                        }
                        else
                        {
                            pageCurrent = pageCount;
                            dtInfo = sp.ExecuteDataTable("DZ_LoginLog", "Id", "Id desc", pageCount, pageSize);
                        }
                    }
                    LoadData();
            }
         
        }
    }

    StoreProcedure类:

        public class StoreProcedure
        {
            // 存储过程名称。
            private string _name;
            // 数据库连接字符串。

    private string _conStr; // 构造函数 // sprocName: 存储过程名称; // conStr: 数据库连接字符串。 public StoreProcedure(string sprocName, string conStr) { _conStr = conStr; _name = sprocName; } // 运行存储过程,不返回值。 // paraValues: 參数值列表。 // return: void public void ExecuteNoQuery(params object[] paraValues) { using (SqlConnection con = new SqlConnection(_conStr)) { SqlCommand comm = new SqlCommand(_name, con); comm.CommandType = CommandType.StoredProcedure; AddInParaValues(comm, paraValues); con.Open(); comm.ExecuteNonQuery(); con.Close(); } } // 运行存储过程返回一个表。 // paraValues: 參数值列表。 // return: DataTable public DataTable ExecuteDataTable(params object[] paraValues) { SqlCommand comm = new SqlCommand(_name, new SqlConnection(_conStr)); comm.CommandType = CommandType.StoredProcedure; AddInParaValues(comm, paraValues); SqlDataAdapter sda = new SqlDataAdapter(comm); DataTable dt = new DataTable(); sda.Fill(dt); return dt; } // 运行存储过程。返回SqlDataReader对象。 // 在SqlDataReader对象关闭的同一时候。数据库连接自己主动关闭。

    // paraValues: 要传递给给存储过程的參数值类表。 // return: SqlDataReader public SqlDataReader ExecuteDataReader(params object[] paraValues) { SqlConnection con = new SqlConnection(_conStr); SqlCommand comm = new SqlCommand(_name, con); comm.CommandType = CommandType.StoredProcedure; AddInParaValues(comm, paraValues); con.Open(); return comm.ExecuteReader(CommandBehavior.CloseConnection); } // 获取存储过程的參数列表。 private ArrayList GetParas() { SqlCommand comm = new SqlCommand("dbo.sp_sproc_columns_90", new SqlConnection(_conStr)); comm.CommandType = CommandType.StoredProcedure; comm.Parameters.AddWithValue("@procedure_name", (object)_name); SqlDataAdapter sda = new SqlDataAdapter(comm); DataTable dt = new DataTable(); sda.Fill(dt); ArrayList al = new ArrayList(); for (int i = 0; i < dt.Rows.Count; i++) { al.Add(dt.Rows[i][3].ToString()); } return al; } // 为 SqlCommand 加入參数及赋值。 private void AddInParaValues(SqlCommand comm, params object[] paraValues) { comm.Parameters.Add(new SqlParameter("@RETURN_VALUE", SqlDbType.Int)); comm.Parameters["@RETURN_VALUE"].Direction = ParameterDirection.ReturnValue; if (paraValues != null) { ArrayList al = GetParas(); for (int i = 0; i < paraValues.Length; i++) { comm.Parameters.AddWithValue(al[i + 1].ToString(), paraValues[i]); } } } }


    存储过程:

    ALTER procedure [dbo].[Pr_Monitor_Pagination] 
    -- ============================================= == Paging == ============================================= 
    --Author:		Lee
    --Create date: 2010611
    --Parameter:
    --	1.Tables :The Name Of Table or view 
    --	2.PrimaryKey :Primary Key 
    --	3.Sort :Ordering Statement,Without Order By, For Example:NewsID Desc,OrderRows Asc 
    --	4.CurrentPage :The Page Number Of Current page
    --	5.PageSize :The Size Of One Page's Group 
    --	6.Fields :The Field Of You Needed
    --	7.Filter :Where Condition,Without Where 
    --	8.Group :Group Condition。Without Group By 
    --	9.GetCount :Return The Number Of All, Not Zero  
    --Updates:
    --	201069 Create Procedure.
    -- ========================================================================================================    
    @Tables varchar(600),     
    @PrimaryKey varchar(100),     
    @Sort varchar(200)=null,     
    @CurrentPage bigint=1,     
    @PageSize bigint=10,     
    @Fields varchar(1000)='*',     
    @Filter varchar(1000)=null,     
    @Group varchar(1000)=null,     
    @GetCount bit=0 
    as     
    if(@GetCount=0)         
    begin
    	/*Ordering Of Default */             
    	if @Sort is null or @Sort=''
    	set @Sort=@PrimaryKey
    	declare @SortTable varchar(100)
    	declare @SortName varchar(100) 
    	declare @strSortColumn varchar(200) 
    	declare @operator char(2)    
    	declare @type varchar(100)    
    	declare @prec int            
    	/*Setting Condition Of Ordering*/  
    	if charindex('desc',@Sort)>0      
    	begin        
    		set @strSortColumn=replace(@Sort,'desc','')        
    		set @operator='<='        
    	end        
    	else          
    	begin      
    		if charindex('asc',@Sort)=0         
    		set @strSortColumn=replace(@Sort,'asc','')     
    		set @operator='>='                 
    	end                      
    	if charindex('.',@strSortColumn)>0                 
    	begin                 
    		set @SortTable=substring(@strSortColumn,0,charindex('.',@strSortColumn))          
    		set @SortName=substring(@strSortColumn,charindex('.',@strSortColumn)+1,len(@strSortColumn))                 
    	end             
    	else              
    	begin           
    		set @SortTable=@Tables               
    		set @SortName=@strSortColumn                 
    	end                      
    	select @type=t.name,@prec=c.prec from sysobjects o join syscolumns c on o.id=c.id join systypes t on c.xusertype=t.xusertype where o.name=@SortTable and c.name=@SortName
    	if charindex('char',@type)>0                 
    	set @type=@type+'('+cast(@prec as varchar)+')'               
    	declare @strPageSize varchar(50)             
    	declare @strStartRow varchar(50)             
    	declare @strFilter varchar(1000)             
    	declare @strSimpleFilter varchar(1000)             
    	declare @strGroup varchar(1000)                      
    	/*CurrentPage Of Default*/             
    	if @CurrentPage<1                 
    	set @CurrentPage=1                      
    	/*Setting Paging param*/             
    	set @strPageSize=cast(@PageSize as varchar(50))             
    	set @strStartRow=cast(((@CurrentPage-1)*@PageSize+1) as varchar(50))                      
    	/*Condition Of Filter And Group*/             
    	if @Filter is not null and @Filter!=''                 
    	begin                 
    		set @strFilter=' where '+@Filter+' '                 
    		set @strSimpleFilter=' and '+@Filter +' '                 
    	end             
    	else                 
    	begin                 
    		set @strSimpleFilter=''                 
    		set @strFilter=''                 
    	end                      
    	if @Group is not null and @Group!=''                 
    	set @strGroup=' group by '+@Group+' '             
    	else                 
    	set @strGroup=''                      
    	exec(' declare @SortColumn '+ @type + ' set RowCount ' + @strStartRow+ ' select @SortColumn=' + @strSortColumn + ' from ' + @Tables+ @strFilter + ' ' + @strGroup + ' Order by ' + @Sort+ ' set rowcount ' + @strPageSize + ' select ' + @Fields + ' from ' + @Tables + ' where ' + @strSortColumn + @operator+ '@SortColumn ' + @strSimpleFilter + ' ' + @strGroup + ' Order by ' + @Sort + ' ')         
    	end     
    	else         
    	begin             
    		declare @strSQL varchar(5000)             
    		if @Filter !=''                 
    		set @strSQL = 'select count(' + @PrimaryKey + ') as Total from [' + @Tables + '] where ' + @Filter             
    		else                 
    		set @strSQL = 'select count(' + @PrimaryKey + ') as Total from [' + @Tables + ']'             
    		exec(@strSQL)         
    	end 
    

    效果:


  • 相关阅读:
    排序算法之冒泡排序的思想以及Java实现
    排序算法之希尔排序的思想以及Java实现
    c# npoi分批往excel追加数据
    c# Timer按月执行任务
    windows服务+定时任务(quartz.net)+nancy
    c# linq分组 lambda分组
    批量插入sql技巧
    解决windows server 2008R2自动关机
    c# DataGridView在使用DataSource时,只显示指定的列或禁止自动生成列
    c# mongodb时间类型字段保存时相差八个小时解决办法
  • 原文地址:https://www.cnblogs.com/lxjshuju/p/7135774.html
Copyright © 2011-2022 走看看