DataGridView使用bindingNavigator实现分页功能(应用存储过程)

article/2025/8/24 7:58:29

想法是这样的:使用bindingNavigator+存储过程实现DataGridView的分页功能,其中包含简单的查询。

存储过程如下:

--创建分页查询存储过程(含输出参数,输入参数(含搜索功能))
use HotelDB
if exists(select * from sys.procedures where name='pro_getGuestRecord')
drop procedure pro_getGuestRecord
go

create procedure pro_getGuestRecord
    @pageSize int,
    @pageIndex int,
    @beginTime datetime,
    @endTime datetime,
    @ResideID int,
    @RecordCount int output
as
begin
    declare @sqlStr0 nvarchar(max);
    set @sqlStr0 = 'SELECT @RecordCount=count(a.GuestID) 
    FROM GuestRecord AS a INNER JOIN
        Room AS b ON a.RoomID = b.RoomID INNER JOIN
        ResideState AS e ON a.ResideID = e.ResideID INNER JOIN
        RoomType AS d ON b.RoomTypeID = d.TypeID INNER JOIN
        RoomState AS c ON b.RoomStateID = c.RoomStateID'
    set @sqlStr0 +=' WHERE (a.ResideDate BETWEEN ''' + CAST(@beginTime as nvarchar)+ ''' AND '''+ CAST(@endTime as nvarchar)+ ''')';
    if(@ResideID <> 0)
    begin
        set @sqlStr0 += ' AND (e.ResideID = '+CAST(@ResideID AS nvarchar)+')';
    end
    
    declare @sqlStr1 varchar(max);
    set @sqlStr1 = 'select * from(
        select row_number() over(order by a.GuestID asc) as num,
        a.GuestID, a.GuestName, a.ResideDate, a.Reposit, a.LeaveDate, a.TotalMoney, b.RoomID, d.TypeName, 
        c.RoomStateName, b.RoomStateID 
        FROM GuestRecord AS a INNER JOIN Room AS b ON a.RoomID = b.RoomID
        INNER JOIN ResideState AS e ON a.ResideID = e.ResideID
        INNER JOIN RoomType AS d ON b.RoomTypeID = d.TypeID
        INNER JOIN RoomState AS c ON b.RoomStateID = c.RoomStateID'
        set @sqlStr1 +=' WHERE (a.ResideDate BETWEEN ''' + CAST(@beginTime as varchar)+ ''' AND '''+ CAST(@endTime as nvarchar)+ ''')';
        if(@ResideID <> 0)
        begin
            set @sqlStr1 += ' AND (e.ResideID = '+CAST(@ResideID AS nvarchar)+')';
        end
    set @sqlStr1 +=') as GuestRecordInfo';
    set @sqlStr1 +=' where num between '+CAST(@pageSize as nvarchar)+'*('+CAST(@pageIndex as nvarchar)+'-1)+1 and '+CAST(@pageSize as nvarchar)+'*'+CAST(@pageIndex as nvarchar)+'';
    execute sp_executesql @sqlStr0,N'@RecordCount int output',@RecordCount output
    --execute sp_executesql @sqlStr1
    exec(@sqlStr1);
end

winform界面设计如下:

 

主要的CS代码如下:

//每页显示记录数
        private int pageSize = 2;
        //当前页码
        private int pageIndex = 1;
        //总页数
        private int pageCount = 0;
        //总记录数
        private int RecordCount = 0;

        //默认显示当天的全部入住状态的数据。
        //开始时间
        private DateTime beginTime = DateTime.Now.Date;
        //截止时间
        private DateTime endTime = DateTime.Now.Date.AddDays(1);
        //入住状态ID
        private int ResideID = 0;

private void Form_Load(object sender, EventArgs e)
        {
            Bind();

            //绑定DataGridView数据。
            setDGVData();
            //设置分页显示数据
            setPageDate();
            //设置下拉选择可选内容
            setComboBoxDataSource();
        }

//绑定查询处ComboBox数据源
        private void Bind()
        {
            this.cbbResideState.DataSource = ResideStateManager.GetResideStateList();
            this.cbbResideState.ValueMember = "ResideID";
            this.cbbResideState.DisplayMember = "ResideName";
        }

//查询
        private void btnQuery_Click(object sender, EventArgs e)
        {
            pageIndex = 1;
            beginTime = Convert.ToDateTime(dtpStartTime.Text.Trim());
            endTime = Convert.ToDateTime(dtpEndTime.Text.Trim()).AddDays(1);
            ResideID = Convert.ToInt32(cbbResideState.SelectedValue);

            //绑定DataGridView数据。
            setDGVData();
            //设置分页显示数据
            setPageDate();
            //设置下拉选择可选内容
            setComboBoxDataSource();
        }

//绑定DataGridView数据。
        private void setDGVData()
        {
            DataTable GuestInfo = GuestRecordManager.GetGuestInfoByPage(beginTime, endTime, ResideID, pageSize, pageIndex, ref RecordCount);
            dgvRecordInfo.DataSource = GuestInfo;
            //设置“入住时间”、“离开时间”的显示格式 
            dgvRecordInfo.Columns[2].DefaultCellStyle.Format = "yyyy-MM-dd HH:mm:ss";
            dgvRecordInfo.Columns[4].DefaultCellStyle.Format = "yyyy-MM-dd HH:mm:ss";            
        }

//设置分页显示数据
        private void setPageDate()
        {
            //计算总页数
            if (RecordCount % pageSize == 0)
            {
                pageCount = RecordCount / pageSize;
            }
            else
            {
                pageCount = RecordCount / pageSize + 1;
            }

            //设置显示的当前页码
            this.bindingNavigatorPositionItem.Text = pageIndex.ToString();
            //设置显示的总页数
            this.bindingNavigatorCountItem.Text = "/ {" + pageCount.ToString() + "}";
            //设置显示的总记录数
            this.toolStripLabel_totalRecord.Text = "共" + RecordCount.ToString() + "条记录";

            //设置“首页”、“前一页”、“下一页”、“尾页”按钮的可用性
            if (RecordCount == 0)
            {
                this.bindingNavigatorMoveFirstItem.Enabled = false;
                this.bindingNavigatorMovePreviousItem.Enabled = false;
                this.bindingNavigatorMoveNextItem.Enabled = false;
                this.bindingNavigatorMoveLastItem.Enabled = false;
            }
            else
            {
                setPageButtonEnable();
            }
        }

//设置“首页”、“前一页”、“下一页”、“尾页”按钮的可用性
        private void setPageButtonEnable()
        {
            if (pageIndex <= 1 && pageIndex == pageCount)//只有1页数据时
            {
                this.bindingNavigatorMoveFirstItem.Enabled = false;
                this.bindingNavigatorMovePreviousItem.Enabled = false;
                this.bindingNavigatorMoveNextItem.Enabled = false;
                this.bindingNavigatorMoveLastItem.Enabled = false;
            }
            else if (pageIndex <= 1)
            {
                this.bindingNavigatorMoveFirstItem.Enabled = false;
                this.bindingNavigatorMovePreviousItem.Enabled = false;
                this.bindingNavigatorMoveNextItem.Enabled = true;
                this.bindingNavigatorMoveLastItem.Enabled = true;
            }
            else if (pageIndex >= pageCount)
            {
                this.bindingNavigatorMoveFirstItem.Enabled = true;
                this.bindingNavigatorMovePreviousItem.Enabled = true;
                this.bindingNavigatorMoveNextItem.Enabled = false;
                this.bindingNavigatorMoveLastItem.Enabled = false;
            }
            else
            {
                this.bindingNavigatorMoveFirstItem.Enabled = true;
                this.bindingNavigatorMovePreviousItem.Enabled = true;
                this.bindingNavigatorMoveNextItem.Enabled = true;
                this.bindingNavigatorMoveLastItem.Enabled = true;
            }
        }

//设置toolStripComboBox1下拉选择可选内容
        private void setComboBoxDataSource()
        {
            List<ClassIntString> comboBoxDataList = new List<ClassIntString>();
            ClassIntString data;
            for (int i = 1; i <= pageCount; i++)
            {
                data = new ClassIntString();
                data.id = i;
                data.name = "第" + i + "页";
                comboBoxDataList.Add(data);
            }
            this.toolStripComboBox1.ComboBox.DataSource = comboBoxDataList;
            this.toolStripComboBox1.ComboBox.ValueMember = "id";
            this.toolStripComboBox1.ComboBox.DisplayMember = "name";
            this.toolStripComboBox1.ComboBox.SelectedValue = 1;
        }

//自定义类ClassIntString:

    //public class ClassIntString
    //{
    //    public int id { get; set; }
    //    public string name { get; set; }
    //}

//首页
        private void bindingNavigatorMoveFirstItem_Click(object sender, EventArgs e)
        {
            this.toolStripComboBox1.SelectedIndex = 0;
        }
        //上一页
        private void bindingNavigatorMovePreviousItem_Click(object sender, EventArgs e)
        {
            this.toolStripComboBox1.SelectedIndex = pageIndex - 2;
        }
        //下一页
        private void bindingNavigatorMoveNextItem_Click(object sender, EventArgs e)
        {
            this.toolStripComboBox1.SelectedIndex = pageIndex;
        }
        //尾页
        private void bindingNavigatorMoveLastItem_Click(object sender, EventArgs e)
        {
            this.toolStripComboBox1.SelectedIndex = pageCount - 1;
        }
        //下拉切换到指定分页
        private void toolStripComboBox1_SelectedIndexChanged(object sender, EventArgs e)
        {
            pageIndex = this.toolStripComboBox1.SelectedIndex + 1;
            //绑定DataGridView数据。
            setDGVData();
            //设置分页显示数据
            setPageDate();
            this.toolStripComboBox1.ComboBox.SelectedValue = pageIndex;
        }

声明:设计过程主要从以下文章得到启发:https://blog.csdn.net/xiazhipeng1000/article/details/78378613


http://chatgpt.dhexx.cn/article/TFG5eCNF.shtml

相关文章

配置bind

安装bind yum install bind-* service firewalld stop #暂时关闭防火墙 vim /etc/named.conf Linsten-on port 53 {any;}; 监听除了自己以外的ip Allow-query{any&#xff1b;} 允许任意的ip来访问 配置正向解析 /etc/named.rfc1912.zones #直接在底部添加 zone "s…

Android dataBinding和viewBinding的混淆配置

在最近重构过的项目中有使用dataBinding或viewBinding&#xff0c;在调试的时候没有问题&#xff0c;但是在混淆过后出现了崩溃&#xff1a; 我们知道viewbinding的初始化是ActivityMainBinding.inflate() 而我是通过反射去初始化viewbinding的 很明显&#xff0c;布局所生成的…

viewBinding和@BindView的用法的简单使用

viewBinding 1.module下的build.gradle&#xff0c;在闭包android{ }里面添加 viewBinding {enabled true} 2.使用方法 用视图绑定功能后&#xff0c;系统会为该模块中包含的每个 XML 布局文件生成一个绑定类。这个类的类名是以xml布局文件名去掉下换线后&#xff0c;单词…

BindingNavigator控件

WinForm之中BindingNavigator控件的使用 在微软WinForm中&#xff0c;BindingNavigator控件主要用来绑定数据。可以将一个数据集合与该控件绑定&#xff0c;以进行数据 联动的显示效果。如图下图所示&#xff1a; 那么&#xff0c;下面我们就来用BindingNavigator控件做一下上图…

WinForm控件之【BindingNavigator】【DataSet】【BindingSource】【DataGridView】

基本介绍 数据类控件&#xff0c;数据加载绑定便捷应用相当广泛&#xff0c;具体看例子自行扩展吧&#xff1b; 常设置属性 BindingNavigator--BindingSource&#xff1a;数据来源&#xff0c;绑定后默认项会根据相应的操作按钮执行操作&#xff1b; BindingNavigator--Items&a…

WinForm之中BindingNavigator控件的使用

在微软WinForm中&#xff0c;BindingNavigator控件主要用来绑定数据。可以将一个数据集合与该控件绑定&#xff0c;以进行数据联动的显示效果。如图下图所示&#xff1a; 那么&#xff0c;下面我们就来用BindingNavigator控件做一下上图所示的效果。 分析&#xff1a;该案例以B…

winform控件之BindingNavigator

BindingNavigator控件可以为我们绑定的数据提供一个导航的功能&#xff0c;默认的工具是这个样子的&#xff0c;我们可以根据需求再增加功能 1.BindingNavigator用法 1.1界面布局 界面布局如下 一个BindingNavigator名为bindingNavigator1 一个DataGridView名为DataGridVie…

C#开发之——ToolStrip(10.22)

一 概述 在C# WinForm开发中添加工具栏(ToolStrip)和添加菜单栏类似&#xff0c;在工具箱中将ToolStrip控件直接拖到Windows窗体中即可 <!--more--> 二 ToolStrip操作 从工具箱拖拽ToolStrip控件到Windows窗体后&#xff0c;如下图所示(在添加了ToolStrip控件之后&…

C#winform窗体控件之toolStrip

C#winform窗体控件之toolStrip 在做窗体时我们可能需要一个工具栏&#xff0c;那这时最简单的方法就是添加一个toolStrip控件。 如何完成一个上图的工具栏呢? 首先&#xff0c;需要添加一个toolStrip控件&#xff0c;然后点击控件上的添加按钮&#xff0c;添加你需要的控件&…

C#如何让ToolStrip工具栏按钮分别靠左和靠右对齐分布

ToolStrip工具栏按钮默认靠左对齐&#xff0c;如何让ToolStrip工具栏按钮分别靠左和靠右对齐分布&#xff1f;&#xff01; 第一步&#xff0c;选择要靠右对齐的工具栏上的按钮&#xff0c;属性&#xff0c;设置“Alignment: Right” 即&#xff0c;this.toolStripSysInfoBut…

ToolStrip

&#xfeff;&#xfeff; 效果实现&#xff1a; 1.添加ToolStrip控件 2.点击ToolStrip控件添加button,设置Imagine,对ToolStripButton的Text进行设置,DisplayStyle设置为ImagineAndText即可。

ToolStrip控件中如何添加功能按钮

1&#xff0c;在工具箱中选择ToolStrip控件 2&#xff0c;在属性框&#xff0c;选择item 3,进入该界面&#xff0c;选择添加类型 4&#xff0c;指定选定控件的类型 name:控件的名字&#xff0c;相当于对象名。 text&#xff1a;指定控件中内容限制字段 image&#xff1a;指…

c# ToolStrip控件图片和文字显示

如上图达到这样的效果 首先我们给属性Image和Text分别赋予需要显示的图片和文字 然后设置DisplyStyle属性为ImageAndText&#xff0c;意为同时显示图片和文字 各种设置ImageAlign和TextAlign&#xff0c;调整图片和文字的位置 设置ImageTextRelation属性&#xff0c;获取或…

C# toolstrip按钮的图片不显示

toolstrip按钮的图片不显示 一、设置图片尺寸异常无法正常显示出图片。 以为没正常设置toolStrip尺寸照成图片无法正常显示的效果&#xff0c;如下图&#xff1a; 修改为正常尺寸后可以正常先显示图图片 显示正常 二、按钮没有选择图片显示模式&#xff0c;DisplayStyle:No…

C# ToolStrip 图标大小设置

VS-C 系列&#xff1a;所有相关C文章链接. VS-C# 系列&#xff1a;所有相关C#文章链接. bat 系列&#xff1a;所有相关bat文章链接. Keil 系列&#xff1a;所有相关文章链接 所有内容均以最小系统调试成功&#xff1b;逐步提供低分源码工程下载&#xff01; 保证每行代码都经过…

C# 遍历toolStrip控件

VS-C 系列&#xff1a;所有相关C文章链接. VS-C# 系列&#xff1a;所有相关C#文章链接. bat 系列&#xff1a;所有相关bat文章链接. Keil 系列&#xff1a;所有相关文章链接 所有内容均以最小系统调试成功&#xff1b;逐步提供低分源码工程下载&#xff01; 保证每行代码都经过…

C#toolStrip使用

1、添加toolStrip控件 2、属性栏中将显示方式改为以下属性 3、增加选项卡时选择Button&#xff0c;双击Button就可以编辑事件了

C#中使用ToolStrip制作展示图标菜单

1. ToolStrip工具栏控件 工具栏主要属性 属性说明ImageScalingSize工具栏中的项显示的图像的大小Items在工具栏上显示的项的集合 工具栏项的主要属性和事件 属性说明DisplayStyle设置图像和文本的显示方式Image按钮标签上显示的图片ImageScaling是否调整按钮标签上显示的图…

【C#语言】ToolStrip控件

在项目实战中&#xff0c;页面布局常使用ToolStrip控件。 属性 BackColor&#xff1a;组件的背景色。 Items&#xff1a;在ToolStrip上的显示项的集合。 TextDirection&#xff1a;指定项的文本绘制方向。