注册 登录
编程论坛 ASP.NET技术论坛

关于gridview的enableviewstate的问题!

hijk1984 发布于 2008-12-05 09:25, 1624 次点击
<asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False" DataKeyNames="ApplicationId,LoweredRoleName" DataSourceID="SqlDataSource1" EnableViewState="false">
            <Columns>
                <asp:BoundField DataField="ApplicationId" HeaderText="ApplicationId" ReadOnly="True"
                    SortExpression="ApplicationId" />
                <asp:BoundField DataField="RoleId" HeaderText="RoleId" SortExpression="RoleId" />
                <asp:BoundField DataField="RoleName" HeaderText="RoleName" SortExpression="RoleName" />
                <asp:BoundField DataField="LoweredRoleName" HeaderText="LoweredRoleName" ReadOnly="True"
                    SortExpression="LoweredRoleName" />
                <asp:BoundField DataField="Description" HeaderText="Description" SortExpression="Description" />
            </Columns>
        </asp:GridView>
……………………………………
……………………………………
<asp:Button ID="Button2" runat="server" Text="Add1" OnClick="Button2_Click" />上面是我的代码,我在点击按钮以后为什么gridview中的数据还有啊……。不是EnableViewState="false"后viewstate就不能保存提交前的数据了吗?我的Page的EnableViewState也设置为false了。
1 回复
#2
hijk19842008-12-05 09:47

自己给自己解答吧呵呵!我明白了!
刚开始对EnableViewState这个概念理解的不好,上面那段代码的GridView的绑定操作是在aspx页面中就写好了,
DataSourceID="SqlDataSource1"
如此GridView的绑定操作也不是在Load的if(!IsPostBack)代码段中执行的,所以当页面回传再次刷新页面的时候通过
DataSourceID="SqlDataSource1"
语句还是要重新绑定一次数据,所以仍能够看到数据!
如果把DataSourceID="SqlDataSource1"
这句话去掉,然后放到Load的if(!IsPostBack)代码段中写一个GridView的数据绑定操作,那么就会看到效果了!


下面以Lable为例再简述一下:
情况一:
<asp:Label ID="Label3" runat="server" Text="viewstatetestInit"  EnableViewState="false"></asp:Label>
此时点击提交按钮,无论如何Label的Text都是
viewstatetestInit,这个跟我提出的问题效果是一样的。
情况二:
<asp:Label ID="Label3" runat="server" Text="viewstatetestInit"  EnableViewState="false"></asp:Label>
然后在load事件中写
        if (!IsPostBack)
        {
            this.Label3.Text = "TextHasChanged!";
        }
此时第一次加载Label的Text是TextHasChanged!
提交后Label的Text是viewstatetestInit
这就是EnableViewState="false"的效果。
情况三:
<asp:Label ID="Label3" runat="server" Text="viewstatetestInit"  EnableViewState="true"></asp:Label>
然后在load事件中写
        if (!IsPostBack)
        {
            this.Label3.Text = "TextHasChanged!";
        }

此时第一次加载Label的Text是TextHasChanged!
提交后Label的Text是TextHasChanged
这就是EnableViewState="true"的效果。
1