情况是这样的
假设有abc.aspx页面
页面上部分是一个GridView,页面下部分是很多文本框
当点击GridView中某一条数据时,对应的详细信息要在页面下部的文本框中显示出来
GridView中的每一条数据并不完全一样,所以下部的文本框要依据数据的实际情况隐藏
假设GridView中的数据“A”没有Name,那么下部的Name文本框隐藏,然后我又点了GridView中的数据“B”,B有Name属性,所以下部的Name文本框不需要隐藏,但是因为上一次操作数据“A”的时候隐藏了页面下部的Name文本框,Name文本框的隐藏属性被ViewState记录下来了,如不我不主动的给Name文本框的Visible赋值为TRUE,那么Name文本框会继续保持隐藏状态有什么办法能重置ViewState中某个控件的状态,使控件恢复到页面刚打开时的默认状态?

解决方案 »

  1.   

    用脚本控制比较好吧,没有必要用ViewState
      

  2.   

    gridview单击行显示详细信息

     protected void gv_SelectedIndexChanging(object sender, GridViewSelectEventArgs e)
            {
                string str= ((TextBox)gv.Rows[e.NewSelectedIndex].FindControl("txt")).Text.Trim();
    //设置Visible
              
            }
      

  3.   

    用js去修改textbox的属性为隐藏或显示
      

  4.   

    你写的代码太多了。可以先看看入门资料:http://www.cnblogs.com/ilovejolly/archive/2006/10/04/521400.html一个GridView控制另一个FormView,你可以在FormView中相应字段的Visible绑定到数据上。
      

  5.   

    http://www.cnblogs.com/webabcd/archive/2008/08/21/672587.htmlasp.net 2.0中通过压缩ViewState改善性能 这个也值得看看
      

  6.   


    根本不需要考虑这些,根本不需要考虑那么多手动代码。当你在GridView上选择了一行,FormView或者DetailsView就重新绑定了,它重新绑定时跟之前的ViewState没有关系,是直接根据GridView上选择的行来创建的。
      

  7.   

    回复1/2/3/4/6楼,老代码维护问题,现在改用js控制,代码量太大。
    回复5楼,TextBox没在GridView中。
    回复7楼,因为是代码维护,现在改用其他方式实现,时间上不允许。
    “有什么办法能重置ViewState中某个控件的状态,使控件恢复到页面刚打开时的默认状态?”,如果可以的话,这应该是解决这次问题最快的方法了。
      

  8.   

    这不是ViewState重置问题,ViewState本身就是记录控件视图状态的你这个问题可以在gridview的selected事件中写根据gridview中的值来控制textbox的显示,你可以写成一样方法
      

  9.   

    每次触发事件就重新绑定下就可以了嘛,好像跟viewstate重不重置没多大关系吧
      

  10.   

    这不是ViewState重置问题,ViewState本身就是记录控件视图状态的你这个问题可以在gridview的selected事件中写根据gridview中的值来控制textbox的显示,你可以写成一样方法
      

  11.   

    现在就是想在gridview的selected事件重置ViewState,因为是老代码维护,所以不想现在提取出来单独控制文本框显示隐藏,而且老代码结构并不好,在一个时间不允许,如果弄重置ViewState,是最好的,只是我不如何在gridview的selected事件中重置ViewState
      

  12.   


    如果只是数据,重新绑定不会有问题,但如果之前操作过某一个textbox的属性,例如visible,如果上一次设置为FALSE,绑定时如果不重置,那么那个textbox的visible就还是FALSE,类似于这样的逻辑比较多,如果全部都单独列出来设置,就需要对老代码进行比较大的改动,时间上真的不够