我用一个session缓存一个datatable ,然后传给gridview,用的翻页是gridview自带的,我要进行的操作是添加数据到session中,由于开始要定义datatable的列,所以我开始放入session的是一个空数据集,然后当取到数据后,用datatable.copy()的方式存入session中,比如说我有25行数据,每页显示12行数据,结果是只显示第一页的,翻页的按钮却看不见了,我查看了当前页的源代码,发现gridview已经创建了分页按钮的行,但是页面上却没显示,但如果是开始就将数据插入到session中(也就是开始的时候不放入空数据集,直接放一个有数据的datatable),则可以正常显示,我不知道是什么原因,麻烦高手帮忙解决下~~~

解决方案 »

  1.   

    存入session中有没有重新绑定一下?
      

  2.   

    你翻页的时候要重新绑定数据才行的,你试着重新绑定下session存的数据集。
      

  3.   

    重新绑定了,如果没绑定的话,数据肯定无法显示在gridview里~碰到这种问题还真郁闷啊,我把源码贴出来,你看看~等会啊
      

  4.   

    这是在页面pageload里相关代码
    strSql=select 字段1。字段N from 表名;
    DataTable dt = SqlHelper.ExcuteDataTable(strSql + " where 1=2 ");
    Session["So"] = dt;
    BindCard();
    然后这是BindCard()方法
    private void BindCard()
            {

                if (Session["So"] != null)
                {
                   DataTable dtSelected = (DataTable)Session["So"];               GridView1.DataSource = dtSelected;

                    GridView1.DataBind();

                }
            }        protected void GridView1_PageIndexChanging(object sender, GridViewPageEventArgs e)
            {
                GridView1.PageIndex = e.NewPageIndex;
                BindCard();
            }最后是加载数据
       Session["So"] = dtCard.Copy();由于用的button是server控件,可以触发事件的时候是肯定会使页面重新加载的,所以不存在没有绑定数据的问题
      

  5.   

    dtCard这个是哪里的啊。你定义了吗?
      

  6.   

    dtCard是后面需要显示在gridview上的数据啊
    就是datatable dtCard = SqlHelper.ExcuteDataTable(sql语句);
      

  7.   

    你最后的dtCard.copy() 没有意义吧?感觉问题就出在这里
      

  8.   

    。。,copy是将dtCard中的数据复制到指定的datatable中啊。,datatable不能象普通的变量一样直接进行附值,因为他是在开始创建时就定义了规则的,也就是你定义的列,所以你只能填充啊,不能直接附值啊
      

  9.   

    变量可以用 int i = i+ N;
    可是datatable 不行