zoukankan      html  css  js  c++  java
  • c# DataGridView分页功能的实现

    首先,拖两个控件BindingNavigate、BindingSource;

    1.定义公共变量

            int pageCount;//总页数
            int pageRSize;//每页显示的行数
            int RowMax;//总共行数
            int currentR;//当前行号
            int currentP;//当前页号
            DataTable dat = new DataTable();

    2.  获取数据

                DataBaseConnection connection = new DataBaseConnection();
                //建立数据库引擎连接,注意数据表(后缀为.db)应放在DEBUG文件下
                string sql = ("select 测线名称,起始桩号,X坐标,Y坐标,方向角,间隔,个数,线号增量,测线间距 from line where 所属项目='" + project + "'");
                //建立适配器,通过SQL语句去搜索数据库
                DataSet myds = connection.getDataSet(sql);
                dat = myds.Tables[0];
                SetIni();

    3.设置

      private void SetIni(int p)
            {
                pageRSize = 10;
                if (p == 1)
                {
                   
                    currentP = 1;
                    currentR = 0;
    
                }
                else
                {
                    currentP = p;
                    currentR = pageRSize * (currentP - 1);
                }
                RowMax = dat.Rows.Count;
                pageCount = RowMax / pageRSize;
                if (RowMax % pageRSize > 0)
                {
                    pageCount++;
                }
    
                ncount_Label3.Text = "/" + pageCount.ToString();
                enbut();
            }
     private void enbut()
            {
                int nStartR = 0;   //当前页面开始行
                int nEndR = 0;     //当前页面结束行
                if (dat.Rows.Count == 0)
                {
                    Describ_dataGridView.DataSource = null;
                    return;
                }
                else
                {
                   
                    if (currentP == 1)
                    {
                        bindingNavigatorMoveFirstItem.Enabled = false;
                        bindingNavigatorMovePreviousItem.Enabled = false;
                    }
                    else
                    {
                        bindingNavigatorMoveFirstItem.Enabled = true ;
                        bindingNavigatorMovePreviousItem.Enabled = true ;
                    }
    
                    if (currentP == pageCount)
                    {
                      
                        nEndR = RowMax;
                        bindingNavigatorMoveNextItem.Enabled = false;
                        bindingNavigatorMoveLastItem.Enabled = false;
                    }
                    else
                    {
                        nEndR = pageRSize * currentP;//当前页号*每页显示的行数
                        bindingNavigatorMoveNextItem.Enabled = true ;
                        bindingNavigatorMoveLastItem.Enabled = true;
                    }
                    nStartR = currentR;
                    bindingNavigatorPositionItem.Text = currentP.ToString();
                    De_Yetxt.Text = currentP.ToString();
    
                    getdata(nStartR, nEndR, currentR);
                    
                }
            }
    private void getdata(int nStartR,int nEndR,int currentR) 
            {
                DataTable dat2 = dat.Clone();//克隆DataTable结构,即将字段名称进行复制
                for (int i = nStartR; i < nEndR; i++)
                {
                   
                    dat2.ImportRow(dat.Rows[i]);
                    currentR++;
                }
                bindingSource1.DataSource = dat2;
                bindingNavigator1.BindingSource = bindingSource1;
                Describ_dataGridView.DataSource = bindingSource1;
                Describ_dataGridView.ClearSelection();
            }

    设置点击事件和输入限制

      private void bindingNavigator1_ItemClicked(object sender, ToolStripItemClickedEventArgs e)
            {
                if(e.ClickedItem.Text=="移到上一页")
                {
                    currentP--;
                    if (currentP <= 0)
                    {
                        MessageBox.Show("已经是第一页了!");
                        currentP++;
                        return;
                    }
                    else 
                    {
                       currentR=pageRSize*(currentP-1);
                    }
                    enbut();
                }
                if (e.ClickedItem.Text == "移到下一页")
                {
                    currentP++;
                    if (currentP > pageCount)
                    {
                        MessageBox.Show("已经是最后一页了!");
                        currentP--;
                        return;
                    }
                    else
                    {
                        currentR = pageRSize * (currentP - 1);
                    }
                    enbut();
                }
                if (e.ClickedItem.Text == "首页")
                {
    
                    currentP = 1;
    
                    currentR = 0;
    
                    enbut();
    
                }
    
                if (e.ClickedItem.Text == "尾页")
                {
    
                    currentP = pageCount;
    
                    currentR = pageRSize * (currentP - 1);
    
                    enbut();
    
                }
                 if (e.ClickedItem.Text == "确定")
                {
                    
                    int a=Convert.ToInt32(De_Yetxt.Text.Trim());
                    if (a > pageCount)
                    {
                        currentP = pageCount;
                        currentR = pageRSize * (currentP - 1);
                        enbut();
                    }
                    else if (a < 0)
                    {
                        currentP = 1;
    
                        currentR = 0;
    
                        enbut();
                    }
                    else
                    {
                        currentP = a;
                        currentR = pageRSize * (currentP - 1);
                        enbut();
                    }
                }
            }
    
          
    
            private void De_Yetxt_TextChanged(object sender, EventArgs e)
            {
                bool IsNum = true;
    
                foreach (char c in De_Yetxt.Text.Trim())
                {
    
                    if (!char.IsNumber(c))
                    {
                        IsNum = false;
                        break;
                    }
    
                }
    
                if (IsNum == false)
                {
    
                    De_Yetxt.Text = currentP.ToString();
    
                }
            }
           

    平时:

    如果需要在已有的的数据上增加:、

     dat.Rows.Add(new object[]{newLineName, startPile, nextLng1,nextLat1, azimuth, Interval, count});
     SetIni();

    删除时

     string sq = ("select 测线名称,起始桩号,X坐标,Y坐标,方向角,间隔,个数 from line where 所属项目='" + project + "'");
                //建立适配器,通过SQL语句去搜索数据库
                DataSet myds = connection.getDataSet(sq);
                dat = myds.Tables[0];
                SetIni(Convert.ToInt32(bindingNavigatorPositionItem.Text));
  • 相关阅读:
    Git Cannot rebase: You have unstaged changes.
    importError: DLL load failed when import matplotlib.pyplot as plt
    install tushare in python 3.6
    pd.qcut, pd.cut, df.groupby()等在分组和聚合方面的应用
    从池子里的beta看秋香, 个性迥异
    个股和股票池的beta系数的估算
    检验两个随机序列的beta系数
    spyder里的"查找文件里的特定字符串"非常方便
    地图上道路编号中的G S X Y
    场内的代码表, 感觉水很深
  • 原文地址:https://www.cnblogs.com/janeaiai/p/5082813.html
Copyright © 2011-2022 走看看