自动分页 也要写分页代码的
DataGridPageIndexChanged
部分写
YoruDataGrid.CurrentPageIndex = e.NewPageIndex;
YoruBindMethod();
比如
private void dg_EditUser_PageIndexChanged(object source, System.Web.UI.WebControls.DataGridPageChangedEventArgs e)
{
this.dg_EditUser.CurrentPageIndex = e.NewPageIndex;
this.BindGrid();
}

解决方案 »

  1.   

    我知道要写代码。
    if(!Page.IsPostBack)
    {

    con = new OleDbConnection();
    con.ConnectionString = Application["strcon"].ToString();
    con.Open();
    string sql = "select * from netpartdepttree";
    adapter = new OleDbDataAdapter(sql,con);
    ds = new DataSet();
    adapter.Fill(ds,"test");
    FillDataGrid(ds);
    //DataGrid1.DataSource = ds.Tables[0];
    //DataGrid1.DataBind();
    con.Close();

    }
    } private void FillDataGrid(DataSet ds)
    {
    DataGrid1.AutoGenerateColumns = false;
    BoundColumn col;

    col = new BoundColumn();
    col.DataField = "id";
    col.HeaderText = "ID";
    DataGrid1.Columns.Add(col); DataGrid1.DataSource = ds.Tables[0];
    DataGrid1.DataBind();


    }
    private void DataGrid1_PageIndexChanged(object source, System.Web.UI.WebControls.DataGridPageChangedEventArgs e)
    {
    //Response.Write(e.CommandSource.ToString());
    DataGrid1.CurrentPageIndex = e.NewPageIndex;

    con = new OleDbConnection();
    con.ConnectionString = Application["strcon"].ToString();
    con.Open();
    string sql = "select * from netpartdepttree";
    adapter = new OleDbDataAdapter(sql,con);
    ds = new DataSet();
    adapter.Fill(ds,"test");
    FillDataGrid(ds);
    con.Close();

    }
    不好用。大家帮忙。十分感谢!!!
      

  2.   

    同意xiahouwen(活靶子.NET) 说的没错
      

  3.   

    在DataGrid的 属性生成器 中设置 分页 不可以吗?
      

  4.   

    要是不用FillDataGrid这个方法绑定,而用
    DataGrid1.DataSource = ds.Tables[0];
                               DataGrid1.DataBind();
    进行绑定,就没有问题。但是如果用了FillDataGrid,就OVER了。哭啊
      

  5.   

    搂主:你的代码写得太繁琐了,实际上用
    DataGrid1.DataSource = ds.Tables[0];
    DataGrid1.DataBind();
    就可以了,你为什么还要用FillDataGrid呢?
    xiahouwen(活靶子.NET) 说得很对,你参考参考。
      

  6.   

    用FillDataGrid这个方法,原因是因为有的列不想要显示,而且有的列的格式要进行修改。所以用这个。希望大家帮忙!
      

  7.   

    你的
    DataGrid1_PageIndexChanged部分
    好像没有DataGrid的DataBind方法
    建议你把绑定数据部分写在一个方法理
    比如BindGrid()
    在PageLoad内
    if(!Page.IsPostBack)
    {
    BindGrid
    }
    在PageIndexChanged内
    YourDataGrid.CurrentPageIndex = e.NewPageIndex;
    BindGrid();
      

  8.   

    private void DataGrid1_PageIndexChanged(object source, System.Web.UI.WebControls.DataGridPageChangedEventArgs e)
                    {
                          DataGrid1.CurrentPageIndex = e.NewPageIndex;
                          DataGrid1.DataBind();
                    }
    分页代码如上
      

  9.   

    这个办法应该没有问题啊!
    1.DataGrid1.AutoGenerateColumns = false;这个属性可以在页面里设置!
    2.(对于数据量不大的表)你可以用缓存来保存已经查询出来的表,那么在分页的时候就不需要再次查询了!
      

  10.   

    回复人: xiahouwen(活靶子.NET) ( ) 信誉:95  2004-7-5 9:36:39  得分: 0  
     
     
       
    你的
    DataGrid1_PageIndexChanged部分
    好像没有DataGrid的DataBind方法
    建议你把绑定数据部分写在一个方法理
    比如BindGrid()
    在PageLoad内
    if(!Page.IsPostBack)
    {
    BindGrid
    }
    在PageIndexChanged内
    YourDataGrid.CurrentPageIndex = e.NewPageIndex;
    BindGrid();  
     
    ---------------------
    支持活靶子.NET的这个。
      

  11.   

    自动分页跟<asp:BoundColumn>没关系的
      

  12.   

    我写的DataGrid 绑定,是在
    private void FillDataGrid(DataSet ds)
    {
    DataGrid1.AutoGenerateColumns = false;
    BoundColumn col;

    col = new BoundColumn();
    col.DataField = "id";
    col.HeaderText = "ID";
    DataGrid1.Columns.Add(col); DataGrid1.DataSource = ds.Tables[0];
    DataGrid1.DataBind();


    }
    绑定的。
    janssenkm(正在贴鬼故事,却碰见了鬼)(!@#$%) 
    xiahouwen(活靶子.NET) 你们可以试着写代码试试啊。
      

  13.   

    if(!Page.IsPostBack)
    {
    //Response.Write("123123");
    //Response.Write("Page.IsPostBack");
    con = new OleDbConnection();
    con.ConnectionString = Application["strcon"].ToString();
    con.Open();
    string sql = "select * from CompactManage";
    adapter = new OleDbDataAdapter(sql,con);
    ds = new DataSet();
    adapter.Fill(ds,"plan");
    if(ds.Tables["plan"].Rows.Count>0)
    {
    AddColumn(ds,DataGrid1,"plan"); }
    else
    {
    DataGrid1.Visible = false;
    }
    con.Close();
    //Response.Write(DataGrid1.PageCount);
    }
    } private void AddColumn(DataSet ds,DataGrid dg,string tablename)
    {
    DataGrid1.CurrentPageIndex = 1;
    dg.AutoGenerateColumns = false;

    BoundColumn col = new BoundColumn(); //col.SortExpression = "vendor";
    col = new BoundColumn();
    col.HeaderText="厂家"; 
    col.DataField="vendor";
    dg.Columns.Add(col);  col = new BoundColumn();
    col.HeaderText="id"; 
    col.DataField="id";
    //col.DataFormatString = "{0:yyyy-MM-dd}";
    dg.Columns.Add(col);  col = new BoundColumn();
    col.HeaderText="开始时间"; 
    col.DataField="beginservicetime";
    col.DataFormatString = "{0:yyyy-MM-dd}";
    dg.Columns.Add(col);  col = new BoundColumn();
    col.HeaderText="结束时间"; 
    col.DataField="EndServiceTime";
    col.DataFormatString = "{0:yyyy-MM-dd}";
    dg.Columns.Add(col);  col = new BoundColumn();
    col.HeaderText="范围"; 
    col.DataField="Scope";
    dg.Columns.Add(col);  col = new BoundColumn();
    col.HeaderText="内容"; 
    col.DataField="Content";
    dg.Columns.Add(col);  col = new BoundColumn();
    col.HeaderText="考核"; 
    col.DataField="Assess";
    dg.Columns.Add(col);  col = new BoundColumn();
    col.HeaderText="签订时间"; 
    col.DataField="Signtime";
    col.DataFormatString = "{0:yyyy-MM-dd}";
    dg.Columns.Add(col);  col = new BoundColumn();
    col.HeaderText="价格"; 
    col.DataField="Price";
    dg.Columns.Add(col);  col = new BoundColumn();
    col.HeaderText="付款状态"; 
    col.DataField="PayState";

    dg.Columns.Add(col); 
    dg.DataSource = ds.Tables[tablename];
    dg.DataBind();
    //Response.Write(DataGrid1.PageIndexChanged } private void DataGrid1_PageIndexChanged(object source, System.Web.UI.WebControls.DataGridPageChangedEventArgs e)
    {
    //this.ViewState.Add("CurrentPageIndex",e.NewPageIndex);
    DataGrid1.CurrentPageIndex = e.NewPageIndex;
    //Response.Write("DataGrid1_PageIndexChanged");


    //Response.Write(DataGrid1.CurrentPageIndex.ToString());
    con = new OleDbConnection();
    con.ConnectionString = Application["strcon"].ToString();
    con.Open();
    string sql = "select * from CompactManage";
    adapter = new OleDbDataAdapter(sql,con);
    ds = new DataSet();
    adapter.Fill(ds,"plan1");
    if(ds.Tables["plan1"].Rows.Count>0)
    {
    DataGrid1.Visible = true;
    AddColumn(ds,DataGrid1,"plan1");
    }
    else
    {
    DataGrid1.Visible = false;
    }
    con.Close(); }第一次呈现时候,完全正常。但在点了“下一页”按钮后,DataGrid1就消失了。
      

  14.   

    应该是点击下一页没有绑定,所以就消失了
    ----------------------------------------------------------------------
    欢迎试用ASP.NET大文件上传组件(AspnetUpload 1.0 Release & 无刷新进度条)
    http://bestcomy.europe.webmatrixhosting.net
    ----------------------------------------------------------------------
      

  15.   

    点“下一页”的代码private void DataGrid1_PageIndexChanged(object source, System.Web.UI.WebControls.DataGridPageChangedEventArgs e)里,我调用了AddColumn(ds,DataGrid1,"plan1");
    方法,里面有绑定啊。我设断点,用单步执行时发现个问题,根本没有执行private void DataGrid1_PageIndexChanged(object source, System.Web.UI.WebControls.DataGridPageChangedEventArgs e)这个事件(里面都的response.write都不执行。)奇怪了
      

  16.   

    动态生成的数据在点下一页的时候是不会被保存的,建意使用ViewState保存状态!
      

  17.   

    把AddColumns 加到if(!isPostBack)
    外边去!!
      

  18.   

    如果点击后没有显示,那肯定是数据没有绑定,你先不要将DataGrid1.Visible属性初始成false,一直用ture试试看
      

  19.   

    哦哟。楼主你写的太烦锁了。同意 hongxua(聪明的木头) And xiahouwen(活靶子.NET) 两位的意见。
      

  20.   

    同意:yananfu2000(安子)你应该把自定义列写在 Page_load 中的 !Page.IsPostBack 外面。
    Page_Load()
    {
        BoundColumn col = new BoundColumn;
        col.......;    If(!Page.IsPostBack)
        {
           //绑定你的数据
        }
    }
      

  21.   

    你的DataGrid1_PageIndexChanged(object source, system.Web.UI.WebControls.DataGridPageChangedEventArgs e)这个事件没有加到Initial Component()里.
    或者在DataGrid的属性框里选中事件页,在PageIndexChanged()事件中指定你得DataGrid1_PageIndexChanged程序
      

  22.   

    到sdk中找相關的代碼看一看就可以了吧.
    給你一個例子看一看吧:
    <%@ Page Language="VB" AutoEventWireup="True" Debug="true"%>
    <%@ Import Namespace="System.Data" %>
    <%@ Import Namespace="System.Data.OleDb" %><html>
       <script runat="server">
         dim MyConnection as OleDbConnection      Sub Page_Load(sender As Object, e As EventArgs) 
          MyConnection = New OleDbConnection( "Provider=Microsoft.Jet.OLEDB.4.0; Data Source =" + Server.MapPath(".")+"/db/data.mdb")         If Not IsPostBack Then 
                BindGrid()
             End If
          End Sub      Sub MyDataGrid_Page(sender as Object, e As DataGridPageChangedEventArgs) 
             MyDataGrid.CurrentPageIndex = e.NewPageIndex
             BindGrid()
          End Sub      Sub BindGrid() 
          Dim MyCommand As OleDbDataAdapter = new OleDbDataAdapter("select * from [min]", MyConnection)
              Dim DS As DataSet = new DataSet()
              MyCommand.Fill(DS,"min") 
              MyDataGrid.DataSource = DS.Tables("min").DefaultView
              MyDataGrid.DataBind()
          End Sub</script>
    <form runat="server">
        <asp:DataGrid id="MyDataGrid" 
               AllowPaging="True" 
               PageSize="20" 
               OnPageIndexChanged="MyDataGrid_Page" 
               runat="server"
       AutoGenerateColumns="False"
       Width="200">
             <HeaderStyle BackColor="Navy" 
                          ForeColor="White" 
                          Font-Bold="True" />
             <PagerStyle Mode="NumericPages" 
                         HorizontalAlign="Right" />
          <Columns>
             <asp:BoundColumn DataField="id" HeaderText="ID"/>
     <asp:TemplateColumn HeaderText="zhuti">
    <ItemTemplate>
            <asp:Label ID="lblTotalPrice"  Text='<%#(Container.DataItem("zhuti"))%>' Runat=server />
    </ItemTemplate> 
    </asp:TemplateColumn> 
          </Columns>
          </asp:DataGrid>
    </form>
      

  23.   

    用手动分页吧,可以解决你的全部需求。.net的帮助那里就有例子,你可以看看。
      

  24.   

    dataset的数据是不保存的(也就是常说的无状态),每次页面刷新,即每次执行了服务器端的代码,dataset的数据就会消失。所以需要重新填充dataset,建议将数据邦定做成一个函数
    数据绑定()
    {
    建立DataSet();
    填充DateSet();
    DataGrid绑定();
    其他邦定();
    }
      

  25.   

    if(!Page.IsPostBack)
    {
    //Response.Write("123123");
    //Response.Write("Page.IsPostBack");
    con = new OleDbConnection();
    con.ConnectionString = Application["strcon"].ToString();
    con.Open();
    string sql = "select * from CompactManage";
    adapter = new OleDbDataAdapter(sql,con);
    ds = new DataSet();
    adapter.Fill(ds,"plan");
    if(ds.Tables["plan"].Rows.Count>0)
    {
    AddColumn(ds,DataGrid1,"plan"); }
    else
    {
    DataGrid1.Visible = false;
    }
    con.Close();
    //Response.Write(DataGrid1.PageCount);
    }
    } private void AddColumn(DataSet ds,DataGrid dg,string tablename)
    {
    DataGrid1.CurrentPageIndex = 1;
    dg.AutoGenerateColumns = false;

    BoundColumn col = new BoundColumn(); //col.SortExpression = "vendor";
    col = new BoundColumn();
    col.HeaderText="厂家"; 
    col.DataField="vendor";
    dg.Columns.Add(col);  col = new BoundColumn();
    col.HeaderText="id"; 
    col.DataField="id";
    //col.DataFormatString = "{0:yyyy-MM-dd}";
    dg.Columns.Add(col);  col = new BoundColumn();
    col.HeaderText="开始时间"; 
    col.DataField="beginservicetime";
    col.DataFormatString = "{0:yyyy-MM-dd}";
    dg.Columns.Add(col);  col = new BoundColumn();
    col.HeaderText="结束时间"; 
    col.DataField="EndServiceTime";
    col.DataFormatString = "{0:yyyy-MM-dd}";
    dg.Columns.Add(col);  col = new BoundColumn();
    col.HeaderText="范围"; 
    col.DataField="Scope";
    dg.Columns.Add(col);  col = new BoundColumn();
    col.HeaderText="内容"; 
    col.DataField="Content";
    dg.Columns.Add(col);  col = new BoundColumn();
    col.HeaderText="考核"; 
    col.DataField="Assess";
    dg.Columns.Add(col);  col = new BoundColumn();
    col.HeaderText="签订时间"; 
    col.DataField="Signtime";
    col.DataFormatString = "{0:yyyy-MM-dd}";
    dg.Columns.Add(col);  col = new BoundColumn();
    col.HeaderText="价格"; 
    col.DataField="Price";
    dg.Columns.Add(col);  col = new BoundColumn();
    col.HeaderText="付款状态"; 
    col.DataField="PayState";

    dg.Columns.Add(col); 
    dg.DataSource = ds.Tables[tablename];
    dg.DataBind();
    //Response.Write(DataGrid1.PageIndexChanged } private void DataGrid1_PageIndexChanged(object source, System.Web.UI.WebControls.DataGridPageChangedEventArgs e)
    {
    //this.ViewState.Add("CurrentPageIndex",e.NewPageIndex);
    DataGrid1.CurrentPageIndex = e.NewPageIndex;
    //Response.Write("DataGrid1_PageIndexChanged");


    //Response.Write(DataGrid1.CurrentPageIndex.ToString());
    con = new OleDbConnection();
    con.ConnectionString = Application["strcon"].ToString();
    con.Open();
    string sql = "select * from CompactManage";
    adapter = new OleDbDataAdapter(sql,con);
    ds = new DataSet();
    adapter.Fill(ds,"plan1");
    if(ds.Tables["plan1"].Rows.Count>0)
    {
    DataGrid1.Visible = true;
    AddColumn(ds,DataGrid1,"plan1");
    }
    else
    {
    DataGrid1.Visible = false;
    }
    con.Close(); }第一次呈现时候,完全正常。但在点了“下一页”按钮后,DataGrid1就消失了。我在分页的事件里,调用了绑定的事件。为什么还不行?
      

  26.   

    你的DataGrid1_PageIndexChanged重复了..DataGrid1.CurrentPageIndex = e.NewPageIndex;
    DataGrid1.DataBind();即可
      

  27.   

    DataGrid的绑定不要放在!ispostback里面
      

  28.   

    帮Proyang(小过) 顶一下。偶是lzr
      

  29.   

    用DataGrid.CurrentPageIndex=e.NewPageIndex;时,最好再加上数据绑定的语句,如“DataGrid.DataBind();”等。