在pageload事件中加 
 If Page.IsPostBack = False Then
    ...........
 End If
这样的话,datagrid只在页面第一次加载的时候被绑定,接下来的刷新都依赖于viewstate了

解决方案 »

  1.   

    还有如果你还需要分页的话:
    1.要就一次把记录都进来,用自动分页,这样数据绑定就能写成Page.IsPostBack里
    2.用自定义分页,分解函数
    if (!Page.IsPostBack)
    {
    SetVirtualItemCount();
                       OnLoadData();
    }public void OnLoadData(Object sender, EventArgs e)
    {
    grid.DataSource = CreateDataSource(0);
    grid.DataBind();
    dr.Close();
    }public void SetVirtualItemCount()
    {
    // Set up the connection
    String strConn = "DATABASE=Northwind;SERVER=localhost;UID=sa;PWD=;";
    SqlConnection conn = new SqlConnection(strConn); // Set up the command
    String strCmd = "SELECT COUNT(*) FROM products";
    SqlCommand cmd = new SqlCommand(strCmd, conn);

    // Execute the command
    conn.Open();
    int nItemCount = (int) cmd.ExecuteScalar();
    conn.Close(); grid.VirtualItemCount = nItemCount;
    return;
    }
    在Datagird的的事件再做绑定
    public void PageIndexChanged(Object sender, DataGridPageChangedEventArgs e)
    {
    grid.CurrentPageIndex = e.NewPageIndex;
    grid.DataSource = CreateDataSource(grid.CurrentPageIndex);
    grid.DataBind();
    dr.Close();
    }
    SqlDataReader dr;
    private SqlDataReader CreateDataSource(int nPageIndex)
    {
    // page index is assumed to be 0-based
    int nPageSize = grid.PageSize;
    int nBaseProductID = nPageSize * nPageIndex;
    // Set up the connection
    String strConn = "DATABASE=Northwind;SERVER=localhost;UID=sa;PWD=;";
    SqlConnection conn = new SqlConnection(strConn); // Set up the command
    String strCmd = "SELECT TOP " + nPageSize + " " +
    "productid, productname, quantityperunit, unitsinstock " + 
    "FROM products " + 
    "WHERE productid >" + nBaseProductID;
    SqlCommand cmd = new SqlCommand(strCmd, conn);

    // Execute the command
    conn.Open();
    dr = cmd.ExecuteReader(CommandBehavior.CloseConnection);
    return dr;
    }
      

  2.   

    如果不依赖于viewstate[],如何保持对象状态?如果只是 
     If Page.IsPostBack = False Then
        Bind系列动作
     End If
    的话,只有第一次运行可以绑定,再刷新就什么都绑定不上,因为以前的对象状态都丢失了,又没有重新初始之,当然为空了。因为我关心的是对象状态如何保持的问题,比如DATAVIEW或者DATATABLE,不用VIEWSTATUS能保持对象状态么?
      

  3.   

    if(!IsPostBack)
    {
      你要的代码;
    }
      

  4.   

    TO 楼上,我知道if(!IsPostBack)的用法,我要的是对象的页面间保持!如何做到?????
      

  5.   

    我靠,CSDN不让我提前帖子。大家帮帮忙啊,高手哪去了?
    我用VIEWSTATUS保存不了对象,提示对象需要序列化,怎么解决啊 ??????
      

  6.   

    首先你所要的保持对象是指得虾米?如果如你开头所言,前面的大虾已经为你解决了问题,如果你是要把一个对象传递到其他的页面,你可以把这个对象放在session里面去。如果仅仅是当前页刷新or Postback,那么当前页的对象不会消失,通过viewstate可以保持当前对象的状态,这里所说的用viewstate不是叫你viewstate[XX]=objXX这样子用,你在低当前页面的属性中让enableviewstate=true就可以了,其实你可以什么都不用做,默认的每个页面的viewstate都是启用了的,我估计你认为viewstate保存不了对象要让你序列化就是你把这里理解错了,viewstate只在同一个页面生效,跨页面要么用session,要么用缓存,缓存效率更高些
      

  7.   

    我检查了一下,页面的enableviewstate是TRUE的,关键我保存的对象不是用户控件,而是普通的对象,比如DATASET DS,DATAVIEW DV,如何办呢,请明示
      

  8.   

    保存时
    ViewState["DataSouce"] = DV;取出时DataView dv = (DataView)ViewState["DataSouce"];
      

  9.   

    to:luckyfool(酷酷小狼) ,我就是按你这样写的,提示DV不是可串行化对象,不能用于页面视图的。