文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

c#常用表格控件dataGridView的分页显示

2022-11-13 19:01

关注

前言

dataGridView是常用的表格控件,实现分页的方式也有很多种,例如直接使用sql语言,配合存储方式,直接读取某一页的内容,大家如果有兴趣的话,下次整理出来与大家分享,本次,采用另一种方式,即控制表格在接收所有数据后,不再使用滚轮展示,而是通过控制定位行来实现。

使用该方法需要注意的是,大数据量还是不建议使用,因为大数据量会导致表格UI卡顿,还是采用sql查询的方式较为可靠。

下面就简单的使用控件分页的方式与大家分享。

1.让垂直滚动条消失

dataGridView1.ScrollBars =ScrollBars.None;

2.确定每页显示多少行

如果表格是固定大小,此步骤可省略,直接用行数进行下面的操作即可,此方法针对表格大小可调整自适应的时候,通过计算获取能显示的最大行。

int rowCount;//每一页多少行
int maxCount;//所有页数
private void uc_table_Resize(object sender, EventArgs e)
{
    this.Invalidate();
    rowCount = (dataGridView1.Height - dataGridView1.ColumnHeadersHeight) / dataGridView1.RowTemplate.Height;
    maxCount = (int)Math.Ceiling(dataGridView1.Rows.Count / rowCount * 1.0);
}

以上方法是针对表格内容还没有添加,如果表格已经有内容,是无法通过模板(RowTemplate)修改高度的。

那可以使用:

(1)ColumnHeadersHeaderSize属性设为 EnableResizing

(2)ColumnHeadersHeader 的值改为 需要的高度

(3)RowTemplate属性下的Height,把值也设置为 需要的高度

3.控制表格定位

使用FirstDisplayedScrollingRowIndex属性调整显示内容。

dataGridView1.FirstDisplayedScrollingRowIndex = 0;//定位到第一页
dataGridView1.FirstDisplayedScrollingRowIndex = dataGridView1.Rows.Count- rowCount;//定位到最后一页

例如:

以上就是简单利用dataGridView的分页显示,总结来说就是计算每一页显示多少行,计算dataGridView每次定位到哪里。

补充:datagridview分页读取,定时循环翻页

在VB中使用C# 语言,datagridview和计时器。

这里我假设datagridview一页显示五行,两秒变换一次。

拖一个时间控件到页面上,设置Interval属性为2000.

我写好了注释和流程,大家都能看懂的

using System.Data;
using System.Data.SqlClient;//使用到这个类,先添加命名空间,访问数据库
using System.Drawing;
using System.Text;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.Xml;
namespace WindowsFormsApp1
{
    public partial class Form1 : Form
     {
        private DataSet myDataSet = new DataSet();
        private int DataRowsCountTotal = 0;//总行数
        private int PageCount = 0;//满页页数
        private int residualRowsCount = 0;//除去满页,最后一页的数据,余数
        private int TakeCount = 0;//当前页页数
        public Form1()
        {
            InitializeComponent();
        }
        //public string myConnectString = "server=192.168.50.50;uid=sa;pwd=123;database=111";  //使用IP地址连接数据库192.168.50.50
        private void Form1_Load(object sender, EventArgs e)
        {
            string myConnectString = "Server=AUTOBVT-EMECSND;User Id=sa;Pwd=123;DataBase=111;Persist Security Info=True";
            //    "Persist Security Info=True";// Data Source数据源    initial catalog数据库  Persist Security Info是否保存安全信息            
            SqlConnection myConn = new SqlConnection(myConnectString);       //创建数据库连接对象
            myConn.Open();                          //打开数据库
            SqlCommand myComm = new SqlCommand("select * from Table_1 order by ID asc", myConn);
            //用sql语句实现查询SELECT * FROM 表名 WHERE ID NOT IN (SELECT TOP(I) ID FROM 表名)
            SqlDataAdapter myAdap = new SqlDataAdapter();
            myAdap.SelectCommand = myComm;
            myAdap.Fill(myDataSet, "Table_1");
            DataRowsCountTotal = myDataSet.Tables[0].Rows.Count;//=MyDataSet中的数据行数
            PageCount = DataRowsCountTotal / 5;            //求商  PageCount满页的页数
            residualRowsCount = DataRowsCountTotal % 5;     //取余residualRowsCount最后一页的数据行数
            DataGrieDataBind(0);
            timer1.Enabled = true;//计时器是否正在运行  
            int a = (this.Size.Width - label1.Size.Width) / 2;          //控件的水平居中位置
            //int b = (this.Size.Height - 2 * label1.Size.Height) / 2 ;//控件的垂直居中位置
            label1.Location = new Point(a, 1);                      //位置坐标
            label2.Text = DateTime.Now.ToLongTimeString();          //显示当前的时间
            label2.Location = new Point(a, this.Size.Height-30);    //位置最下,居中
            dataGridView1.AutoGenerateColumns = false; //不允许bai自动创建列,
            dataGridView1.RowHeadersVisible = false;//删除最左边一列,把控件的 RowHeadVisible属性设置为false
            this.FormBorderStyle = FormBorderStyle.None;    //无边框
            this.WindowState = FormWindowState.Maximized;   //窗体最大化
            //dataGridView1.Dock = DockStyle.Fill;            //控件最大化
            dataGridView1.AllowUserToAddRows = false;       //不同意用户添加行,这样就不会出现最后一行空白行,大多数时候表格只是用来展示数据而非用户录入数据(录入数据神马的用EXCEL更方便吧)
                       
            //toolStripStatusLabel1.Text = "登录用户:" + Form1.strName;//显示登录用户,显示登录时间
        }
        
        private void DataGrieDataBind(int TakeCount)
        {
            DataTable myDt = new DataTable();       //创建一个DataTable的对象,虚拟表
            myDt = myDataSet.Tables[0].Clone();     //克隆表
                                                    //  myDt.Clear();//清除行信息为0
            if (TakeCount + 1 > PageCount)//如果 当前页数 >满页页数,即最后一页
            {
                for (int i = 5 * TakeCount; i <= DataRowsCountTotal - 1; i++)
                {//     i=5n-1——总行数-1,i++
                    myDt.ImportRow(myDataSet.Tables[0].Rows[i]);//显示第一张表,第i行的数据
                }
            }
            else    //否则执行
            {
                for (int i = 5 * TakeCount; i <= 5 * TakeCount + 4; i++)
                {//i=5n——5n+4,
                    myDt.ImportRow(myDataSet.Tables[0].Rows[i]);//显示数据
                }
            }
            myDt.AcceptChanges();
            this.dataGridView1.DataSource = myDt; // 为dataGridView1指定数据源
        }
        private void timer1_Tick(object sender, EventArgs e)
        {//定时器循环翻页
            TakeCount = TakeCount + 1;//翻页
                                      // MessageBox.Show(TakeCount.ToString());
            if (TakeCount > PageCount)//如果  当前页 >满页页数
            {
                TakeCount = 0;//显示第一页
            }
            DataGrieDataBind(TakeCount);
        }
        private void dataGridView1_CellContentClick(object sender, DataGridViewCellEventArgs e)
        {        }
 }
 }

逻辑结构大概是这个
private int DataRowsCountTotal = 0;//总行数
        private int PageCount = 0;//满页页数
        private int residualRowsCount = 0;//除去满页,最后一页的数据,余数
        private int TakeCount = 0;//当前页页数
DataRowsCountTotal = myDataSet.Tables[0].Rows.Count;//=MyDataSet中的数据行数
        PageCount = DataRowsCountTotal / 5;            //求商  PageCount满页的页数
        residualRowsCount = DataRowsCountTotal % 5;     //取余residualRowsCount最后一页的数据行数``
第几行  0	 0-4	   1页	  1-5
	1	 5-9	   2页	  6-10
	2	 10-14
	n页	 5n/5n+4   n+1页  5n+1/5n+5
	尾页	 5n/N	   尾页+1 	

总结

到此这篇关于c#常用表格控件dataGridView分页显示的文章就介绍到这了,更多相关c# dataGridView分页显示内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯