最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

c#常用表格控件dataGridView的分頁(yè)顯示

 更新時(shí)間:2022年10月28日 11:14:00   作者:Yyuanyuxin  
最近項(xiàng)目需要自己寫(xiě)了一個(gè)用來(lái)給DataGridView分頁(yè)用的控件,下面這篇文章主要給大家介紹了關(guān)于c#常用表格控件dataGridView的分頁(yè)顯示,文中通過(guò)實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下

前言

dataGridView是常用的表格控件,實(shí)現(xiàn)分頁(yè)的方式也有很多種,例如直接使用sql語(yǔ)言,配合存儲(chǔ)方式,直接讀取某一頁(yè)的內(nèi)容,大家如果有興趣的話,下次整理出來(lái)與大家分享,本次,采用另一種方式,即控制表格在接收所有數(shù)據(jù)后,不再使用滾輪展示,而是通過(guò)控制定位行來(lái)實(shí)現(xiàn)。

使用該方法需要注意的是,大數(shù)據(jù)量還是不建議使用,因?yàn)榇髷?shù)據(jù)量會(huì)導(dǎo)致表格UI卡頓,還是采用sql查詢(xún)的方式較為可靠。

下面就簡(jiǎn)單的使用控件分頁(yè)的方式與大家分享。

1.讓垂直滾動(dòng)條消失

dataGridView1.ScrollBars =ScrollBars.None;

2.確定每頁(yè)顯示多少行

如果表格是固定大小,此步驟可省略,直接用行數(shù)進(jìn)行下面的操作即可,此方法針對(duì)表格大小可調(diào)整自適應(yīng)的時(shí)候,通過(guò)計(jì)算獲取能顯示的最大行。

int rowCount;//每一頁(yè)多少行
int maxCount;//所有頁(yè)數(shù)
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);
}

以上方法是針對(duì)表格內(nèi)容還沒(méi)有添加,如果表格已經(jīng)有內(nèi)容,是無(wú)法通過(guò)模板(RowTemplate)修改高度的。

那可以使用:

(1)ColumnHeadersHeaderSize屬性設(shè)為 EnableResizing

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

(3)RowTemplate屬性下的Height,把值也設(shè)置為 需要的高度

3.控制表格定位

使用FirstDisplayedScrollingRowIndex屬性調(diào)整顯示內(nèi)容。

dataGridView1.FirstDisplayedScrollingRowIndex = 0;//定位到第一頁(yè)
dataGridView1.FirstDisplayedScrollingRowIndex = dataGridView1.Rows.Count- rowCount;//定位到最后一頁(yè)

例如:

以上就是簡(jiǎn)單利用dataGridView的分頁(yè)顯示,總結(jié)來(lái)說(shuō)就是計(jì)算每一頁(yè)顯示多少行,計(jì)算dataGridView每次定位到哪里。

補(bǔ)充:datagridview分頁(yè)讀取,定時(shí)循環(huán)翻頁(yè)

在VB中使用C# 語(yǔ)言,datagridview和計(jì)時(shí)器。

這里我假設(shè)datagridview一頁(yè)顯示五行,兩秒變換一次。

拖一個(gè)時(shí)間控件到頁(yè)面上,設(shè)置Interval屬性為2000.

我寫(xiě)好了注釋和流程,大家都能看懂的

using System.Data;
using System.Data.SqlClient;//使用到這個(gè)類(lèi),先添加命名空間,訪問(wèn)數(shù)據(jù)庫(kù)
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;//總行數(shù)
        private int PageCount = 0;//滿頁(yè)頁(yè)數(shù)
        private int residualRowsCount = 0;//除去滿頁(yè),最后一頁(yè)的數(shù)據(jù),余數(shù)
        private int TakeCount = 0;//當(dāng)前頁(yè)頁(yè)數(shù)
        public Form1()
        {
            InitializeComponent();
        }
        //public string myConnectString = "server=192.168.50.50;uid=sa;pwd=123;database=111";  //使用IP地址連接數(shù)據(jù)庫(kù)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數(shù)據(jù)源    initial catalog數(shù)據(jù)庫(kù)  Persist Security Info是否保存安全信息            
            SqlConnection myConn = new SqlConnection(myConnectString);       //創(chuàng)建數(shù)據(jù)庫(kù)連接對(duì)象
            myConn.Open();                          //打開(kāi)數(shù)據(jù)庫(kù)
            SqlCommand myComm = new SqlCommand("select * from Table_1 order by ID asc", myConn);
            //用sql語(yǔ)句實(shí)現(xiàn)查詢(xún)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中的數(shù)據(jù)行數(shù)
            PageCount = DataRowsCountTotal / 5;            //求商  PageCount滿頁(yè)的頁(yè)數(shù)
            residualRowsCount = DataRowsCountTotal % 5;     //取余residualRowsCount最后一頁(yè)的數(shù)據(jù)行數(shù)
            DataGrieDataBind(0);
            timer1.Enabled = true;//計(jì)時(shí)器是否正在運(yùn)行  
            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);                      //位置坐標(biāo)
            label2.Text = DateTime.Now.ToLongTimeString();          //顯示當(dāng)前的時(shí)間
            label2.Location = new Point(a, this.Size.Height-30);    //位置最下,居中
            dataGridView1.AutoGenerateColumns = false; //不允許bai自動(dòng)創(chuàng)建列,
            dataGridView1.RowHeadersVisible = false;//刪除最左邊一列,把控件的 RowHeadVisible屬性設(shè)置為false
            this.FormBorderStyle = FormBorderStyle.None;    //無(wú)邊框
            this.WindowState = FormWindowState.Maximized;   //窗體最大化
            //dataGridView1.Dock = DockStyle.Fill;            //控件最大化
            dataGridView1.AllowUserToAddRows = false;       //不同意用戶(hù)添加行,這樣就不會(huì)出現(xiàn)最后一行空白行,大多數(shù)時(shí)候表格只是用來(lái)展示數(shù)據(jù)而非用戶(hù)錄入數(shù)據(jù)(錄入數(shù)據(jù)神馬的用EXCEL更方便吧)
            /*    設(shè)置屬性AutoSizeColumnsMode = Fill;列表頭的寬度均勻分配,填滿表格空間。
                  設(shè)置屬性BackgroundColor = White; 背景色設(shè)置為白色
            timer1.Interval = 2000; 定時(shí)器間隔時(shí)間            */           
            //toolStripStatusLabel1.Text = "登錄用戶(hù):" + Form1.strName;//顯示登錄用戶(hù),顯示登錄時(shí)間
        }
        /*  DataSet.Tables[0].Rows[0][1]表示DataSet中第一張表(因?yàn)門(mén)ables[0]就是第一張表的意思)中第一行(Rows[0][]) 第二列(Rows[][1])的數(shù)據(jù)。     
            DataSet.Tables["tableName"] 是指定獲取特定的表名。如果DataSet只有一張表,則為DataSet.Tables[0].  */
        private void DataGrieDataBind(int TakeCount)
        {
            DataTable myDt = new DataTable();       //創(chuàng)建一個(gè)DataTable的對(duì)象,虛擬表
            myDt = myDataSet.Tables[0].Clone();     //克隆表
                                                    //  myDt.Clear();//清除行信息為0
            if (TakeCount + 1 > PageCount)//如果 當(dāng)前頁(yè)數(shù) >滿頁(yè)頁(yè)數(shù),即最后一頁(yè)
            {
                for (int i = 5 * TakeCount; i <= DataRowsCountTotal - 1; i++)
                {//     i=5n-1——總行數(shù)-1,i++
                    myDt.ImportRow(myDataSet.Tables[0].Rows[i]);//顯示第一張表,第i行的數(shù)據(jù)
                }
            }
            else    //否則執(zhí)行
            {
                for (int i = 5 * TakeCount; i <= 5 * TakeCount + 4; i++)
                {//i=5n——5n+4,
                    myDt.ImportRow(myDataSet.Tables[0].Rows[i]);//顯示數(shù)據(jù)
                }
            }
            myDt.AcceptChanges();
            this.dataGridView1.DataSource = myDt; // 為dataGridView1指定數(shù)據(jù)源
        }
        private void timer1_Tick(object sender, EventArgs e)
        {//定時(shí)器循環(huán)翻頁(yè)
            TakeCount = TakeCount + 1;//翻頁(yè)
                                      // MessageBox.Show(TakeCount.ToString());
            if (TakeCount > PageCount)//如果  當(dāng)前頁(yè) >滿頁(yè)頁(yè)數(shù)
            {
                TakeCount = 0;//顯示第一頁(yè)
            }
            DataGrieDataBind(TakeCount);
        }
        private void dataGridView1_CellContentClick(object sender, DataGridViewCellEventArgs e)
        {        }
 }
 }

邏輯結(jié)構(gòu)大概是這個(gè)
private int DataRowsCountTotal = 0;//總行數(shù)
        private int PageCount = 0;//滿頁(yè)頁(yè)數(shù)
        private int residualRowsCount = 0;//除去滿頁(yè),最后一頁(yè)的數(shù)據(jù),余數(shù)
        private int TakeCount = 0;//當(dāng)前頁(yè)頁(yè)數(shù)
DataRowsCountTotal = myDataSet.Tables[0].Rows.Count;//=MyDataSet中的數(shù)據(jù)行數(shù)
        PageCount = DataRowsCountTotal / 5;            //求商  PageCount滿頁(yè)的頁(yè)數(shù)
        residualRowsCount = DataRowsCountTotal % 5;     //取余residualRowsCount最后一頁(yè)的數(shù)據(jù)行數(shù)``
第幾行  0	 0-4	   1頁(yè)	  1-5
	1	 5-9	   2頁(yè)	  6-10
	2	 10-14
	n頁(yè)	 5n/5n+4   n+1頁(yè)  5n+1/5n+5
	尾頁(yè)	 5n/N	   尾頁(yè)+1 	

總結(jié)

到此這篇關(guān)于c#常用表格控件dataGridView分頁(yè)顯示的文章就介紹到這了,更多相關(guān)c# dataGridView分頁(yè)顯示內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 關(guān)于C#委托三種調(diào)用的分享使用

    關(guān)于C#委托三種調(diào)用的分享使用

    這篇文章主要介紹了關(guān)于C#委托三種調(diào)用的分享使用,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-11-11
  • C#迭代器方法介紹

    C#迭代器方法介紹

    這篇文章主要介紹了C#迭代器方法,可以使用foreach循環(huán)語(yǔ)句進(jìn)行的迭代的方法,稱(chēng)為可迭代方法,或者迭代器方法,方法操作,想了解更多內(nèi)容得小伙伴可以學(xué)習(xí)下面文章內(nèi)容,希望給你的學(xué)習(xí)帶來(lái)幫助
    2022-03-03
  • Unity 從UI中拖拽對(duì)象放置并拖動(dòng)效果 附demo

    Unity 從UI中拖拽對(duì)象放置并拖動(dòng)效果 附demo

    最近新接了個(gè)需求,要求模擬場(chǎng)景并生成3D對(duì)象,對(duì)象可以跟隨鼠標(biāo)移動(dòng)效果,今天小編把我實(shí)現(xiàn)的demo分享到腳本之家平臺(tái),對(duì)Unity UI拖拽相關(guān)知識(shí)感興趣的朋友跟隨小編一起學(xué)習(xí)吧
    2021-05-05
  • C#編程總結(jié)(六)詳解異步編程

    C#編程總結(jié)(六)詳解異步編程

    本篇文章主要介紹了C#異步編程,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧。
    2016-12-12
  • C#絕對(duì)路徑拼接相對(duì)路徑的實(shí)例代碼

    C#絕對(duì)路徑拼接相對(duì)路徑的實(shí)例代碼

    C#絕對(duì)路徑拼接相對(duì)路徑的實(shí)例代碼,需要的朋友可以參考一下
    2013-03-03
  • C# WinForm窗口最小化到系統(tǒng)托盤(pán)

    C# WinForm窗口最小化到系統(tǒng)托盤(pán)

    C#編寫(xiě)最小化時(shí)隱藏為任務(wù)欄圖標(biāo)的 Window appllication.
    2008-11-11
  • C#批量插入數(shù)據(jù)到sqlserver的方法詳解

    C#批量插入數(shù)據(jù)到sqlserver的方法詳解

    這篇文章主要為大家詳細(xì)介紹了C#中四種可以批量插入數(shù)據(jù)到sqlserver的方法,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以參考一下
    2025-02-02
  • C#去掉字符串中所有匹配的字符String.Replace方法

    C#去掉字符串中所有匹配的字符String.Replace方法

    在C#中,如果你想要去掉字符串中所有匹配的字符,你可以使用String.Replace方法,本文主要介紹了C#去掉字符串中所有匹配的字符String.Replace方法,具有一定的參考價(jià)值,感興趣的可以了解一下
    2024-04-04
  • C#算法之羅馬數(shù)字轉(zhuǎn)整數(shù)

    C#算法之羅馬數(shù)字轉(zhuǎn)整數(shù)

    本文詳細(xì)講解了C#算法之羅馬數(shù)字轉(zhuǎn)整數(shù),文中通過(guò)示例代碼介紹的非常詳細(xì)。對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-01-01
  • C#?WPF實(shí)現(xiàn)播放音頻文件的示例詳解

    C#?WPF實(shí)現(xiàn)播放音頻文件的示例詳解

    這篇文章主要為大家詳細(xì)介紹了利用C#?WPF實(shí)現(xiàn)播放音頻文件的相關(guān)知識(shí),文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2024-03-03

最新評(píng)論

台中市| 吐鲁番市| 固原市| 三门峡市| 苗栗县| 汝南县| 甘肃省| 若尔盖县| 南宫市| 通道| 壤塘县| 淮安市| 娱乐| 江口县| 遂昌县| 黔东| 晋江市| 武乡县| 广元市| 安达市| 高州市| 郸城县| 界首市| 庆城县| 宣汉县| 卢湾区| 驻马店市| 望奎县| 澜沧| 贵港市| 白玉县| 镇巴县| 芒康县| 永胜县| 富宁县| 桂平市| 双城市| 馆陶县| 定日县| 城口县| 开封县|