winform自定义分页控件及datagridview数据绑定

author author     2022-08-26     697

关键词:

 

技术分享

 

分页效果如上图所示,用到的控件均为基本控件 ,其方法如下

右击项目-添加-新建项 选择用户控件 然后在用户控件中拖入所需要的Label,Button,Text

技术分享

用户控件全部代码:

 

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Drawing;
using System.Data;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace One.UI
{
    public partial class PagerControl : UserControl
    {
        public PagerControl()
        {
            InitializeComponent();
        }
        #region 分页字段和属性

        private int pageIndex = 1;
        /// <summary>  
        /// 当前页数  
        /// </summary>  
        public virtual int PageIndex
        {
            get { return pageIndex; }
            set { pageIndex = value; }
        }

        private int pageSize = 100;
        /// <summary>  
        /// 每页记录数  
        /// </summary>  
        public virtual int PageSize
        {
            get { return pageSize; }
            set { pageSize = value; }
        }

        private int recordCount = 0;
        /// <summary>  
        /// 总记录数  
        /// </summary>  
        public virtual int RecordCount
        {
            get { return recordCount; }
            set { recordCount = value; }
        }

        private int pageCount = 0;
        /// <summary>  
        /// 总页数  
        /// </summary>  
        public int PageCount
        {
            get
            {
                if (pageSize != 0)
                {
                    pageCount = GetPageCount();
                }
                return pageCount;
            }
        }

        #endregion
        #region 页码变化时触发事件
        public event EventHandler OnPageChanged;

        #endregion

        #region 分页及相关事件功能实现

        /// <summary>  
        /// 设窗体控件全部可用  
        /// </summary>  
        private void SetFormCtrEnabled()
        {
            linkFirst.Enabled = true;
            linkPrevious.Enabled = true;
            linkNext.Enabled = true;
            linkLast.Enabled = true;
                   }

        /// <summary>  
        /// 计算总页数  
        /// </summary>  
        /// <returns></returns>  
        private int GetPageCount()
        {
            if (PageSize == 0)
            {
                return 0;
            }
            int pageCount = RecordCount / PageSize;
            if (RecordCount % PageSize == 0)
            {
                pageCount = RecordCount / PageSize;
            }
            else
            {
                pageCount = RecordCount / PageSize + 1;
            }
            return pageCount;
        }
        /// <summary>  
        /// 用于客户端调用  
        /// </summary>  
        public void DrawControl(int count)
        {
            recordCount = count;
            DrawControl(false);
        }
        /// <summary>  
        /// 根据不同的条件,改变页面控件的呈现状态  
        /// </summary>  
        private void DrawControl(bool callEvent)
        {

            txtCurrentPage.Text = PageIndex.ToString();//当前页
            lblPageCount.Text = PageCount.ToString();//总页数
            lblTotalCount.Text = RecordCount.ToString();//总记录数
            txtPageSize.Text = PageSize.ToString();//每页记录数

            if (callEvent && OnPageChanged != null)
            {
                OnPageChanged(this, null);//当前分页数字改变时,触发委托事件  
            }
            SetFormCtrEnabled();
            if (PageCount == 1)//有且仅有一页时  
            {
                linkFirst.Enabled = false;
                linkPrevious.Enabled = false;
                linkNext.Enabled = false;
                linkLast.Enabled = false;
                           }
            else if (PageIndex == 1)//当前页为第一页时  
            {
                linkFirst.Enabled = false;
                linkPrevious.Enabled = false;
            }
            else if (PageIndex == PageCount)//当前页为最后一页时  
            {
                linkNext.Enabled = false;
                linkLast.Enabled = false;
            }
        }

        #endregion

        #region 相关控件事件

        //首页按钮  
        private void linkFirst_Click(object sender, EventArgs e)
        {
            PageIndex = 1;
            DrawControl(true);
        }

        //上一页按钮  
        private void linkPrevious_Click(object sender, EventArgs e)
        {
            PageIndex = Math.Max(1, PageIndex - 1);
            DrawControl(true);
        }

        //下一页按钮  
        private void linkNext_Click(object sender, EventArgs e)
        {
            PageIndex = Math.Min(PageCount, PageIndex + 1);
            DrawControl(true);
        }

        //尾页按钮  
        private void linkLast_Click(object sender, EventArgs e)
        {
            PageIndex = PageCount;
            DrawControl(true);
        }

        /// <summary>  
        /// 按下enter键,执行跳转页面功能  
        /// </summary>  
        private void txtPageNum_KeyPress(object sender, KeyPressEventArgs e)
        {
             int num = 0;
            if (int.TryParse(txtCurrentPage.Text.Trim(), out num) && num > 0)
            {
                PageIndex = num;
                DrawControl(true);
            }
        }

        /// <summary>  
        /// 跳转页数限制  
        /// </summary>  
        private void txtCurrentPage_TextChanged(object sender, EventArgs e)
        {
            int num = 0;
            if (int.TryParse(txtCurrentPage.Text.Trim(), out num) && num > 0)
            {   //TryParse 函数,将字符串转换成等效的整数,返回bool型,判断是否转换成功。  
                //输入除数字以外的字符是转换不成功的  

                if (num > PageCount)   //输入数量大于最大页数时,文本框自动显示最大页数  
                {
                    txtCurrentPage.Text = PageCount.ToString();
                }
            }
        }

      
        #endregion
        bool isTextChanged = false;
        /// <summary>  
        /// 每页显示的记录数改变时  
        /// </summary>  
        private void txtPageSize_TextChanged(object sender, EventArgs e)
        {
            int num = 0;
            //输入不符合规范时,默认设置为100  
            if (!int.TryParse(txtPageSize.Text.Trim(), out num) || num <= 0)
            {
                num = 100;
                txtPageSize.Text = "100";
            }
            else
            {
                isTextChanged = true;

            }
            pageSize = num;
        }
        /// <summary>  
        /// 光标离开 每页设置文本框时,显示到首页  
        private void txtPageSize_Leave(object sender, EventArgs e)
        {
            if (isTextChanged)
            {
                isTextChanged = false;
                linkFirst_Click(null, null);
            }
        }

          }
}

用户控件完成后,生成解决方案就会在左侧工具栏中看到刚写好的分页控件,拖入到需要分页的窗体中赋值调用即可;

在窗体加载事件中激活分页控件方法

 private void OneForm_Load(object sender, EventArgs e)
        {
                       ShowData();
            //激活OnPageChanged事件  
            pagerControl1.OnPageChanged += new EventHandler(pagerControl1_OnPageChanged);

        }

分页控件页码发生变化时执行方法

 private void pagerControl1_OnPageChanged(object sender, EventArgs e)
        {
            ShowData();
        }

绑定Datagridview方法

 private void ShowData()
        {
            int count;///4.6日
            string strWhere = " 1=1 ";          
//可以添加where条件
                      
            pagerControl1.PageSize = 30;//设置显示记录数
            ds = bll.GetList(pagerControl1.PageIndex, pagerControl1.PageSize, strWhere, out count);//4.6
            dataGridViewX1.DataSource = ds.Tables[0];
            pagerControl1.DrawControl(count);
        }

bll.GetList为数据读取返回dataset类型

 public DataSet GetList(int PageIndex, int PageSize, string strWhere, out int count)
        {
            StringBuilder strSql = new StringBuilder();
            //strSql.Append(" select * from ( ");
            strSql.Append(" select   ROW_NUMBER() over(order by Material_TimeAdd) num,*  ");
            strSql.Append("  FROM tabel");
if (strWhere.Trim() != "")
            {
                strSql.Append(" where " + strWhere);
            }
            count = DbHelperSQL.Query(strSql.ToString()).Tables[0].Rows.Count;

            strSql.Append(" ) t where t.num between " + ((PageIndex - 1) * PageSize + 1) + " and " + PageSize * PageIndex);
            DataSet ds = DbHelperSQL.Query(" select * from ( " + strSql.ToString());

            return ds;


        }

第一次写东西,希望能够帮助需要的人。。。。。。

c#做的winform窗体程序把一个form给为自定义控件?

比如把Form2给成UserControl2要怎么做??修改你的类,从继承自Form改为继承自UserControl他就变成UserControl了参考技术Aform窗体是继承了windows.form,将此处改为CONTROL即可。或者重新创建一个控件,将窗体的控件及代码内容复制到自定义... 查看详情

winform创建自定义控件

虽然VS为我们提供了很多控件可以使用,但有时候这些控件仍然不能满足我们的要求,比如我们要对部分控件进行一些个性化的定制,例如美化控件,这时候就需要自己绘制控件,或是在原有控件的基础上进行修改自定义控件分... 查看详情

自定义 Winforms 设计器控件同时缩放和平移控件

】自定义Winforms设计器控件同时缩放和平移控件【英文标题】:ZoomandPancontrolssimultaneouslyforacustomWinformsdesignercontrol【发布时间】:2021-10-1514:59:00【问题描述】:我正在尝试在winforms中创建一个“设计师”。这将向用户呈现一个所见... 查看详情

winform自定义控件中其他遮挡控件点击事件(代码片段)

自定义控件在其他窗口调用时,里面的lable阻挡了控件的点击事件解决方法自定义控件中lable的 点击事件privatevoidLable1_Click(objectsender,EventArgse)base.OnClick(e);//触发控件点击事件  查看详情

c#winform制作自定义控件

在winform中,我想制作一个自定义的控件,自定义的控件里就一个label控件和一个panel控件,想实现的其实就是一个有标题的panel容器。请问怎么为自定义的控件添加属性和事件,如添加一个Txt属性用来设定label的值。还有一个问题... 查看详情

使用自定义 WinForms 控件,我可以更改嵌套控件停靠在里面的矩形吗?

】使用自定义WinForms控件,我可以更改嵌套控件停靠在里面的矩形吗?【英文标题】:WithacustomWinFormscontrol,canIchangetherectanglethatnestedcontrolsdockinside?【发布时间】:2016-02-1719:01:57【问题描述】:我正在尝试创建一个行为类似于GroupBo... 查看详情

winform自定义控件基础

1.设置图像和文字以抗锯齿的方式呈现1g.SmoothingMode=SmoothingMode.AntiAlias;2g.TextRenderingHint=TextRenderingHint.AntiAlias; 2.指定区域绘图(常见于OnPaint函数中:g.DrawImage(...))1//参数:2//image:3//要绘制的System.Drawing.Image。4// 查看详情

winform自定义控件:imagebutton(转)

原文地址:https://www.codeproject.com/Articles/29010/WinForm-ImageButton 自定义winfrom图片按钮:支持鼠标正常、悬停、按下更改图片,支持文本。首先,创建没有按钮文本的图片,这样的:正常:    悬停:   &nb... 查看详情

winform自定义自动完成控件(代码片段)

...,很多优秀的前端框架都会带有自动完成控件,同样的,winform也有,在我们的TextBox和ComboBox中,只需要设置AutoCompleteSource属性为CustomSource,然后将值加入到AutoCompleteCustomSource中就可以了  比如:  string[]dataSource=newstring[]"appl... 查看详情

需要 C# Winforms 自定义 WebBrowser 控件

】需要C#Winforms自定义WebBrowser控件【英文标题】:C#WinformsCustomWebBrowserControlNeeded【发布时间】:2011-04-2816:10:09【问题描述】:我最近一直在网上搜索一个现有的控件,该控件的作用类似于网络浏览器控件,具有一些我需要的特定... 查看详情

winform日历控件

 分享一个漂亮的winform自定义控件,做考勤、日程管理、计划最好的自定义控件了,能够添加备注等等。 查看详情

wpf使用winform自定义控件(代码片段)

...引用WindowsFormsIntegration.dllSystem.Windows.Forms.dll2、在要使用WinForm控件的WPF窗体的XAML文件中添加如下内容:xmlns:wf="clr-namespace:System.Windows.Forms;assembly=System.Windows.Forms"xmlns:wfi="clr-namespace:System.Windows.Forms.Integration;assembly=WindowsFormsIntegration... 查看详情

自定义 WinForms ErrorProvider 以在控件条目中显示其图标

】自定义WinFormsErrorProvider以在控件条目中显示其图标【英文标题】:CustomizingWinFormsErrorProvidertodisplayitsiconinsidecontrol\'sentry【发布时间】:2010-11-1103:52:07【问题描述】:我有一些自定义/用户控件,在大多数情况下都有标签和条目... 查看详情

winform自定义控件的使用

  c#的自定义控件还是很方便的,至少相对于c++而言。  1,当然是建立一个windows窗体空间库,我这里就是用vs2015,工程名MyControl  第二步。在自定义空间窗体内,拖放这样一组空间。我们发送编辑框的内容给父窗体,然后... 查看详情

如何让 WinForm 设计器完全忽略自定义控件上的属性?

】如何让WinForm设计器完全忽略自定义控件上的属性?【英文标题】:HowdoIgettheWinFormDesignertototallyignoreapropertyonacustomcontrol?【发布时间】:2011-02-0514:59:06【问题描述】:这一定是常见问题解答,但我找不到重复的问题!有很多不同... 查看详情

将自定义控件 dll 添加到我的 Form(WinForm) 时出现问题

】将自定义控件dll添加到我的Form(WinForm)时出现问题【英文标题】:ProblemswhenaddingcustomcontroldllintomyForm(WinForm)【发布时间】:2011-06-3008:54:48【问题描述】:将自定义控件从我的工具箱添加到表单中可以正常工作,但是当我尝试构建... 查看详情

首次放置在表单上时如何获取要遵守的 WinForms 自定义控件的默认值

】首次放置在表单上时如何获取要遵守的WinForms自定义控件的默认值【英文标题】:HowtogetWinFormscustomcontrol\'sdefaultvaluetoberespectedwhenfirstdroppedonaform【发布时间】:2018-06-2900:33:04【问题描述】:我有一个包含自定义控件的类库:using... 查看详情

c#用户自定义控件的问题winform

环境vs2008新建了一个用户控件在里面放了个datagridview然后将这个用户控件放到窗体中没有了datasource这个属性翻了下datasource这个属性是来自datagridview用户控件就没有继承到这个属性要怎么弄下?请教参考技术A你使用用户控件肯定... 查看详情