使惯了GirdView最近又重新用了一下DataGird,发现没有分页功能的DataGird确实写起分页来,有些困难。所以,我在此作一下总结!
先在全局变两种声明:
       DataTable dtSource;
        int PageCount;
        int maxRec;
        int pageSize;
        int currentPage=1;
        int recNo;
        DataRowView drv;//
如果要从DataGird中读取数据!
        DataTable dtTemp;
写一个方法:
       private void LoadPage()
        {
            int i;
            int startRec;
            int endRec;
            dtTemp = dtSource.Clone();

            if (currentPage == PageCount)
            {
                endRec = maxRec;
            }
            else
            {
                endRec = pageSize * currentPage;
            }
            startRec = recNo;

            if (dtSource.Rows.Count > 0)
            {
                for (i = startRec; i < endRec; i++)
                {

                    try//没有这个在删除每页最后一行时将报错
                    {

                        dtTemp.ImportRow(dtSource.Rows[i]);

                        recNo += 1;
                    }
                    catch
                    {
 
                    }
                }
            }
            dataGrid1.DataSource = dtTemp;
           DisplayPageInfo()//
显示分页信息,在下面书写
            DataGridTableStyle ts = new DataGridTableStyle();

            DataGridTextBoxColumn cs1 = new DataGridTextBoxColumn();
            cs1.HeaderText = "ID";
            cs1.MappingName = "Buyer_id";
            cs1.Width = 50;
            cs1.Alignment = HorizontalAlignment.Left;

            DataGridTextBoxColumn cs2 = new DataGridTextBoxColumn();
            cs2.HeaderText = "
姓名";
            cs2.MappingName = "Buyer_Name";
            cs2.Width = 50;
            cs2.Alignment = HorizontalAlignment.Left;

            ts.GridColumnStyles.Add(cs1);
            ts.GridColumnStyles.Add(cs2);
            ts.MappingName = dtTemp.TableName;
            try
            {
                dataGrid1.TableStyles.Add(ts);
            }
            catch
            {
 
            }
          
}
       private void DisplayPageInfo()//
显示分页信息
        {
            this.textBox1.Text = currentPage.ToString() + "/ " +                            PageCount.ToString();
        }

        private void btnFirstPage_Click(object sender, EventArgs e)//首页

        {

             if (currentPage == 1)

            {

                MessageBox.Show("您已经在首页!");

                return;

            }

          currentPage = 1;

            recNo = 0;

            LoadPage();

    }        

        private void btnPreviousPage_Click(object sender, EventArgs e)//前一页

        {

            if (currentPage == PageCount)

            {

                recNo = pageSize * (currentPage - 2);

            }

            currentPage -= 1;

            if (currentPage < 1)

            {

                MessageBox.Show("您已经在首页!");

                currentPage = 1;

                return;

            }

            else

            {

                recNo = pageSize * (currentPage - 1);

            }

            LoadPage();

        }

 

        private void btnNextPage_Click(object sender, EventArgs e)//下一页

        {

            currentPage += 1;

            if (currentPage > PageCount)

            {

                currentPage = PageCount;

                if (recNo == maxRec)

                {

                    MessageBox.Show("您已经在末页!");

                    return;

                }

            }

            LoadPage();

        }

 

        private void btnLastPage_Click(object sender, EventArgs e)//末页

        {

            if (recNo == maxRec)

            {

                MessageBox.Show("您已经在末页!");

                return;

            }

            currentPage = PageCount;

            recNo = pageSize * (currentPage - 1);

            LoadPage();

        }

在本窗体的Load事件中书写:

      private void BuyerControl_Load(object sender, EventArgs e)

        {

            dtSource = //自己的数据源Formconfig.TableBind("tbBuyer_Info", "select * from tbBuyer_Info");

            pageSize = 10;

           maxRec = dtSource.Rows.Count;

            PageCount = maxRec / pageSize;

            if ((maxRec % pageSize) > 0)

            {

                PageCount += 1;

            }

           recNo = (currentPage-1)*pageSize;//保持显示当前页

            LoadPage();

       }         

 

DataGirdclick事件中书写:

drv= (DataRowView)(this.BindingContext[dtTemp].Current);

drv[“名称”]以调用当前行数据!

在每次添加删除修改中调用窗体的Load事件,即可刷新

 

                 

           

   

 

 

             

 

       

posted on 2007-04-03 11:16  Happy Miao  阅读(201)  评论(0)    收藏  举报