本帖最后由 sw19810913 于 2010-11-20 22:39:13 编辑

解决方案 »

  1.   

    BindingNavigator 控件,不过效果没有那么多可选的。Winform下自己做一个也不难。不像Web的考虑的东西多。
      

  2.   


    //1、定义几个所需的公有成员
    int pageSize = 0;     //每页显示行数        
    int nMax = 0;         //总记录数        
    int pageCount = 0;    //页数=总记录数/每页显示行数        
    int pageCurrent = 0;   //当前页号       
     int nCurrent = 0;      //当前记录行        
    DataSet ds = new DataSet();        
    DataTable dtInfo = new DataTable();//2、在窗体载入事件中,从数据源读取记录到DataTable中
    string strConn = "SERVER=127.0.0.1;DATABASE=NORTHWIND;UID=SA;PWD=ULTRATEL";   
    //数据库连接字符串           
    SqlConnection conn = new SqlConnection(strConn);            
    conn.open();           
    string strSql = "SELECT * FROM CUSTOMERS";            
    SqlDataAdapter sda = new SqlDataAdapter(strSql,conn);            
    sda.Fill(ds,"ds");            
    conn.Close();            
    dtInfo = ds.Tables[0];            
    InitDataSet();//3、用当前页面数据填充DataGridView
    private void InitDataSet()        
    {            
    pageSize = 20;      //设置页面行数            
    nMax = dtInfo.Rows.Count;            
    pageCount=(nMax/pageSize);    //计算出总页数            
    if ((nMax % pageSize) > 0) pageCount++;           
    pageCurrent = 1;    //当前页数从1开始            
    nCurrent = 0;       //当前记录数从0开始            
    LoadData();        
    }
    private void LoadData()        
    {            
    int nStartPos = 0;   //当前页面开始记录行            
    int nEndPos = 0;     //当前页面结束记录行            
    DataTable dtTemp = dtInfo.Clone();   //克隆DataTable结构框架            
    if (pageCurrent == pageCount)                
    nEndPos = nMax;            
    else                
    nEndPos = pageSize * pageCurrent;            
    nStartPos = nCurrent;            
    lblPageCount.Text = pageCount.ToString();            
    txtCurrentPage.Text = Convert.ToString(pageCurrent);    //从元数据源复制记录行            
    for (int i = nStartPos; i < nEndPos; i++)            
    {                
    dtTemp.ImportRow(dtInfo.Rows[i]);                
    nCurrent++;            
    }            
    bdsInfo.DataSource = dtTemp;            
    bdnInfo.BindingSource = bdsInfo;            
    dgvInfo.DataSource = bdsInfo;        
    }
    //4、菜单响应事件
    private void bdnInfo_ItemClicked(object sender, ToolStripItemClickedEventArgs e)        
    {            
    if (e.ClickedItem.Text == "关闭")            
    {                
    this.Close();            
    }            
    if (e.ClickedItem.Text == "上一页")            
    {                
    pageCurrent--;                
    if (pageCurrent <= 0)                
    {                    
    MessageBox.Show("已经是第一页,请点击“下一页”查看!");                    .
    return;                
    }                
    else                
    {                    
    nCurrent = pageSize * (pageCurrent - 1);                
    }                
    LoadData();           
     }            
    if (e.ClickedItem.Text == "下一页")            
    {                
    pageCurrent++;                
    if (pageCurrent > pageCount)                
    {                    
    MessageBox.Show("已经是最后一页,请点击“上一页”查看!");                    
    return;                
    }                
    else                
    {                    
    nCurrent=pageSize*(pageCurrent-1);                
    }                
    LoadData();            
    }        
    }这样就可以实现分页了 不过代码写起来比较麻烦而已
      

  3.   

    对了 当然 还需要DataGridView、BindingNavigate、BindingSource控件才行。
      

  4.   

    参考WinForm界面开发之“分页控件”
      

  5.   

    分页确实不难,但一般的Winform下是不做分页的吧。
      

  6.   

    呵呵,winform那东西实用性不高,不过以前见过有!自己找吧.