Winform中用bindingNavigator和bingdingSource实现分页

BindingNavigator控件介绍

可以使用BindingNavigator控件来创建标准化的方法,以便用户搜索和更改 Windows 窗体上的数据。BindingNavigator 控件由包含一系列 ToolStripItem 对象的ToolStrip组成,可以实现:添加数据,删除数据,分也显示等。结合BindingSource,可以便用户能够在窗体上数据记录之间移动并与记录进行交互。

BindingSource控件介绍

BindingSource控件是.NET Framework 2.0提供的新控件之一。BindingSource控件与数据源建立连接,然后将窗体中的控件与BindingSource控件建立绑定关系来实现数据绑定,简化数据绑定的过程。

BindingNavigator与BindingSource联合使用

BindingNavigator 控件一般要与BindingSource 控件一同使用较为方便,因为对于 BindingNavigator 控件上的每个按钮,都有一个对应的 BindingSource 组件成员,其以编程方式允许有相同功能。
比如要实现bindingnavigator如何与datagridview绑定,定义一个BindingSource ,并将BindingNavigator 和DataGridView的数据源都设置为BindingSource ,可保证BindingNavigator 和DataGridView的数据同步。

    BindingSource bs = new BindingSource();
    bs.DataSource = dateTabel1;
    bindingNavigator1.BindingSource = bs;
    dataGridView1.DataSource = bs ;

实现分页

 //定义分页需要的变量
        int cRows = 0;
        int RowCurrent = 0;
        int cPages = 0;
        int PageCurrent = 0;
        const int PageSize = 7;

        private void LoadData()
        {
            if (PageCurrent == 1)
            {
                ts_PagePrevious.Enabled = false;
            }
            else
            {
                ts_PagePrevious.Enabled = true;
            }
            if (cPages == PageCurrent)
            {
                ts_PageNext.Enabled = false;
            }
            else
            {
                ts_PageNext.Enabled = true;
            }
            ts_PagePostion.Text = PageCurrent.ToString();
            ts_Pages.Text = cPages.ToString();
            int startRow = (PageCurrent - 1) * PageSize;
            int endRow = PageCurrent == cPages ? cRows : PageCurrent * PageSize;
            DataTable dtTemp = table1.Clone();
            if (table1.Rows.Count != 0)
            {
                for (int i = startRow; i < endRow; i++)
                {
                    dtTemp.ImportRow(table1.Rows[i]);
                }
                bindingSource1.DataSource = dtTemp;
                dataGridView1.DataSource = bindingSource1;

            }

        }

        private void bindingNavigator1_ItemClicked(object sender, ToolStripItemClickedEventArgs e)
        {
            if (e.ClickedItem.Text == "上一页")
            {
                ts_PageNext.Enabled = true;
                if (PageCurrent == 1)
                {
                    ts_PagePrevious.Enabled = false;
                    MessageBox.Show("已经是第一页了");
                    return;
                }
                PageCurrent--;
                LoadData();
            }
            if (e.ClickedItem.Text == "下一页")
            {
                ts_PagePrevious.Enabled = true;
                if (PageCurrent == PageSize)
                {
                    ts_PageNext.Enabled = false;
                    MessageBox.Show("已经是最后一页了");
                    return;
                }
                PageCurrent++;
                LoadData();
            }
        }

        private void bindingNavigatorMoveFirstPage_Click(object sender, EventArgs e)
        {
            PageCurrent = 1;
            bindingNavigatorMoveFirstPage.Enabled = false;
            bindingNavigatorMoveLastPage.Enabled = true;
            ts_PagePrevious.Enabled = false;
            ts_PageNext.Enabled = true;
            LoadData();
        }

        private void bindingNavigatorMoveLastPage_Click(object sender, EventArgs e)
        {
            PageCurrent = cPages;
            bindingNavigatorMoveFirstPage.Enabled = true;
            bindingNavigatorMoveLastPage.Enabled = false;
            ts_PagePrevious.Enabled = true;
            ts_PageNext.Enabled = false;
            LoadData();
        }

        private void ts_PagePostion_TextChanged(object sender, EventArgs e)
        {
            try
            {
                if (Convert.ToInt32(ts_PagePostion.Text) > 0 && Convert.ToInt32(ts_PagePostion.Text) <= cPages)
                {
                    PageCurrent = Convert.ToInt32(ts_PagePostion.Text);
                    LoadData();
                }
                else
                {
                    throw new Exception();
                }
            }
            catch (System.Exception ex)
            {
                PageCurrent = 1;
                LoadData();
            }
        }

然后在显示数据的时候调用LoadData方法:

table1 = selectIp.SelectAllIp();

            cRows = table1.Rows.Count;
            cPages = cRows % PageSize == 0 ? cRows / PageSize : cRows / PageSize + 1;
            PageCurrent = 1;
            LoadData();

            dataGridView1.Columns[0].HeaderText = "考场";
            dataGridView1.Columns[1].HeaderText = "ip段";
            dataGridView1.Columns[2].HeaderText = "ip起始段";
            dataGridView1.Columns[3].HeaderText = "ip截至段";

效果如下:

这里写图片描述

内容概要:本文围绕“梯级水电+混合式抽水蓄能+源网荷储”多能协同系统开展深入研究,提出一种集成梯级水电站、混合式抽水蓄能电站及风、光等新能源的源网荷储一体化协同优化运行模型,并基于Matlab平台完成仿真代码实现。研究重点在于构建多时间尺度下考虑电力平衡、水量约束、机组运行特性及可再生能源波动性的联合调度机制,通过优化能量流分配提升系统灵活性、运行经济性与可再生能源消纳能力。模型充分考虑梯级水电站间的水力耦合关系与抽水蓄能的双向调节能力,实现对复杂多能源系统的协调控制与综合性能提升。; 适合人群:具备电力系统分析、优化调度及可再生能源并网等相关基础知识,熟练掌握Matlab编程语言,从事水电能源系统、综合能源系统、储能配置与调度优化等领域研究的科研人员与工程技术人员,特别适合高校研究生及以上层次的研究者。; 使用场景及目标:①应用于梯级水电与混合式抽水蓄能电站的联合调度策略设计;②支撑高比例新能源接入背景下电力系统调峰调频与灵活性提升研究;③为源网荷储一体化系统的建模、仿真与优化决策提供可复现的代码框架与技术参考,助力科研成果转化与实际工程应用。; 阅读建议:建议结合文中提供的Matlab代码进行逐模块调试与仿真分析,重点关注目标函数构建、约束条件设置及求解算法实现细节,同时可拓展至不同流域梯级电站与多种储能形式的集成场景,深化对多能协同机理的理解与应用能力。
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

木子松的猫

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值