今天做了个试验,发现,下面的代码中:public partial class _Default : System.Web.UI.Page
{
    int[] a = new int[] { 1, 2, 3, 4 };
    protected void Page_Load(object sender, EventArgs e)
    {
        if (!IsPostBack)
        {
            
            int f = 9;
            GridView1.DataSource = a;
            DataBind();
        }
    }protected void Button1_Click(object sender, EventArgs e)
    {
        DataBind();
    }}然后一点button1gridview的数据就没了。。我的理解是:在回发后,根据页面生命周期,button1单击后回发到服务器,先加载视图状态使gridview的datasource值为a,然后再执行click事件处理程序中的databind,这样的话数据应该还在啊,为什么会一点击就消失了呢?请指教!谢谢。。!

解决方案 »

  1.   


    你不知道click事件到底做什么啦。
    页面又刷新拉。
      

  2.   

    千万要注意:
        webForm和winForm运行机制完全不一样!!!
      

  3.   


    click就是放了个databind()进去而已哦。。
      

  4.   

    protected void Button1_Click(object sender, EventArgs e)
    {
    GridView1.DataSource = a;
    DataBind();
    }
     postback之后要重新绑定数据
      

  5.   

    click里面什么都不放,这种情况下,页面也会刷新
      

  6.   

    不是页面刷新的问题。
    是DataBind();的问题。
    按按钮时DataBind()没有数据源就没了。
    如果楼主把DataBind()这句注释掉。那数据还是有的。
      

  7.   

    楼主把GridView1.DataSource = a;放在if (!IsPostBack)外面也可以的
    不知楼主知不知道!IsPostBack的意思
      

  8.   


    知道。
    我知道是databind的问题,但是视图状态不是保存了datasource的属性值吗,databind的作用是把datasource的属性值加载到gridview控件里显示出来吧?为什么显示的数据会没有呢?
      

  9.   

    可能试图状态不保存DataSoruce属性,只保存GridView的显示内容。所以绑定后就没了。
    只是推测。
      

  10.   

    a并不保存在viewstate中。关于为什么asp.net页面可以保存状态,而不需要保存a数据,我回复在你的另一帖子:http://topic.csdn.net/u/20100318/00/9a1c119d-8d68-4ee8-b8fe-ab7c6e3b2145.html?20156