[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: 2010\06\11
--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:
--	2010\06\09 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 @[email protected]
	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 @[email protected]
		set @[email protected]
	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 [email protected] and [email protected]
	if charindex(‘char‘,@type)>0
	set @[email protected]+‘(‘+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 ‘[email protected]+‘ ‘
		set @strSimpleFilter=‘ and ‘[email protected] +‘ ‘
	end
	else
	begin
		set @strSimpleFilter=‘‘
		set @strFilter=‘‘
	end
	if @Group is not null and @Group!=‘‘
	set @strGroup=‘ group by ‘[email protected]+‘ ‘
	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

效果:

时间: 2024-08-04 18:52:52

[DevExpress]GridControl分页的实现的相关文章

[DevExpress]GridControl 根据RowIndex和VisibleColumnsIndex来获取单元格值

关键代码: /// <summary> /// 根据rowIndex和visibleColumnsIndex来获取单元格可见值 /// </summary> /// <param name="view">GridView</param> /// <param name="rowIndex">rowIndex</param> /// <param name="visibleColu

实现DevExpress GridControl 只有鼠标双击后才进行修改数据

1. 实现DevExpress GridControl 只有鼠标双击后才进行修改数据:修改GridView.OptionsBehavior.EditorShowMode属性为Click 2. 实现DevExpress GridControl 只有鼠标双击后才进行修改数据:修改GridView.OptionsBehavior.EditorShowMode属性为MouseDownFocused 然后实现下面代码: private void gridView1_MouseDown(object sen

[Devexpress]GridControl 绑定DataSource时GridView列不变化

Devexpress  GridControl 绑定DataSource时GridView列不变化 1.使用VS自带的DataGridView替代 2.数据绑定以后调用 gridView.PopulateColumns()  函数 重新创建列 gcSummary.DataSource = _dtData; gvSummary.PopulateColumns();

[DevExpress]GridControl 删除所有行

关键代码: /// <summary> /// 删除全部行 /// </summary> /// <param name="gridView">GridView</param> public static void ClearRows(this GridView gridView) { bool _mutilSelected = gridView.OptionsSelection.MultiSelect;//获取当前是否可以多选 if (

DevExpress GridControl功能总结

原文:DevExpress GridControl功能总结 写在前面,Dev控件已经很久了,功能也很强大,截止到现在我编写文档出来的Dev的版本已经到了14.1了,看了Demo真的很强大,效果也很好,结合自己这一个月开发,分享一下自己研究过后的经验,不让大家走更多的弯路 DevExpress安装顺序 GridControl基本样式设置 GridControl常用事件和描述 GridControl右键菜单 GridControl全选和反选 GridControl添加小计功能 GridControl

[Irving] Wpf DevexPress GridControl 获取选中行

WPF前台绑定事件代码: <RelayAction TargetControl="{Binding ElementName=GCInstoragePart}" MethodName="GridClick" MethodParameter="{XParamBinding me}" TriggerEvent="Click" /> 后台事件代码: public void GridClick(RelayAction r,

[WinForm][DevExpress][GridControl]CustomColumnDisplayText Helper

在实际开发中,有时候需要对GridControl中列值进行转义,譬如1转义成完成等等,一般在诸如CustomColumnDisplayText事件中能够轻松完成,为了提高代码复用性,所以对CustomColumnDisplayText进行包装 关键代码: /// <summary> /// CustomColumnDisplayText Helper /// </summary> /// <param name="girdview">GridView

关于DevExpress GridControl控件中新增复选按钮一事

关于DevExpress GridControl新增复选按钮的事情,查了一下网上的文档,发现都是在查询的数据集[table]中新增一列供checkbox绑定使用.偶尔的一瞬间,我在DevExpress 的Demo上发现有使用CheckBox的例子,找了半天Demo的代码,还是没找到.然后就找到了设置的属性. 晚上的时候,想了想,感觉能试出来简直是运气.如下配置即可: 设置GridView中的[OptionsSelection]->[MultiSelectMode]设置为CheckBoxRowSe

[DevExpress]GridControl 同步列头checkbox与列中checkbox状态

关键代码: /// <summary> /// 同步列头checkbox与列中checkbox状态 /// </summary> /// <param name="view">GridView</param> /// <param name="fieldeName">需要绘制Checkbox的列名</param> /// <param name="e">Mouse