Gridview编辑状态无法取消,并且出现”未能加载视图状态。正在向其中加载视图状态的控件树必须与前一请求期间用于保存视图状态的控件树相匹配“错误
- HTML code
<asp:GridView ID="GridView1" runat="server" AllowPaging="True" AutoGenerateColumns="False" CellPadding="4" OnRowEditing="RowEditing" OnRowDeleting="GridView_RowDeleting" ForeColor="#333333" GridLines="None" OnRowCommand="GridView_RowCommand" OnRowUpdating="OnRowUpdating" OnDataBound = "GridView_DataBind" OnRowDataBound = "GridView_RowDataBound" Width="760px" HorizontalAlign="Center" onrowcancelingedit="GridView1_RowCancelingEdit" onpageindexchanging="GridView1_PageIndexChanging" EnableViewState="True"> <FooterStyle BackColor="#990000" Font-Bold="True" ForeColor="White" /> <RowStyle BackColor="#FFFBD6" ForeColor="#333333" HorizontalAlign="Center" /> <PagerStyle BackColor="#FFCC66" ForeColor="#333333" HorizontalAlign="Center" /> <SelectedRowStyle BackColor="#FFCC66" Font-Bold="True" ForeColor="Navy" /> <HeaderStyle BackColor="#990000" Font-Bold="True" ForeColor="White" /> <AlternatingRowStyle BackColor="White" /> <Columns> <asp:TemplateField HeaderText="审核状态" SortExpression="F_Audit"> <ItemTemplate> <asp:Label ID="lblaudit" runat="server" Text='<%# Eval("F_Audit").ToString() == "1"?"已审核":"未审核"%>' Width="120px" /> </ItemTemplate> <EditItemTemplate> <asp:RadioButtonList ID="AuditRBL" runat="server" RepeatDirection="Horizontal" Width="120px" > <asp:ListItem Value="0" Text="未通过"></asp:ListItem> <asp:ListItem Value="1" Text="已通过"></asp:ListItem> </asp:RadioButtonList> <asp:HiddenField ID="HF1" runat="server" Value='<%# Eval("F_Audit") %>'/> </EditItemTemplate> </asp:TemplateField> <asp:TemplateField HeaderText="级别"> <ItemTemplate> <asp:Label ID="lbllevel" runat="server" Text='<%# Eval("F_Level") %>' Width="100px" ></asp:Label> </ItemTemplate> <EditItemTemplate> <asp:RadioButtonList ID="LevelRBL" runat="server" RepeatDirection="Horizontal" Width="100px" > <asp:ListItem Value="0" Text="普通会员"></asp:ListItem> <asp:ListItem Value="1" Text="ViP"></asp:ListItem> </asp:RadioButtonList> <asp:HiddenField ID="HF2" runat="server" Value='<%# Eval("F_Level") %>'/> </EditItemTemplate> </asp:TemplateField> <asp:TemplateField HeaderText="查询详细资料"> <ItemTemplate> <asp:LinkButton ID="LBInfo" runat="server" CommandName="info" CommandArgument='<%# Eval("Member_ID") %>' Text="详细资料" Width="80px" /> </ItemTemplate> <ControlStyle Width="80px" /> </asp:TemplateField> <asp:TemplateField HeaderText="修改"> <ItemTemplate> <asp:Button ID="Button3" runat="server" Text="修改" CommandName="edit" Width="40px" /> </ItemTemplate> <EditItemTemplate> <asp:Button ID="Button1" CommandName="update" runat="server" Text="更新" CommandArgument="<%# ((GridViewRow)Container).RowIndex %>" OnClientClick="return confirm('您确定要更新现有数据吗?')" Width="35px" /> <asp:Button ID="Button2" runat="server" CommandName="Cancel" Text="取消" Width="35px" /> </EditItemTemplate> <ItemStyle Width="80" /> </asp:TemplateField> <asp:TemplateField HeaderText="删除"> <ItemTemplate> <asp:LinkButton ID="LinkButton1" runat="server" CommandName="delete" CommandArgument='<%#Eval("Member_ID") %>' Text="删除" OnClientClick="return confirm('您确定要删除此项数据吗?')"></asp:LinkButton> </ItemTemplate> </asp:TemplateField> </Columns>
- C# code
OleDbConnection olecon = new OleDbConnection((ConfigurationManager.ConnectionStrings["access_con"].ConnectionString + HttpContext.Current.Server.MapPath(ConfigurationManager.ConnectionStrings["access_path"].ConnectionString))); OleDbCommand olecmd = null; protected void Page_Load(object sender, EventArgs e) { if (!IsPostBack) { pagebind(); } } private void pagebind() { string str = "SELECT * FROM T_Member"; DataSet ds = new DataSet(); OleDbDataAdapter da = new OleDbDataAdapter(str, olecon); da.Fill(ds,"T_Member"); GridView1.DataSource = ds; GridView1.DataKeyNames = new string[]{"Member_ID"}; GridView1.DataBind(); olecon.Close(); } protected void NavigateToPage(object sender, CommandEventArgs e) { } protected void GridView_DataBind(object sender, EventArgs e) { } protected void GridView_RowDataBound(object sender,GridViewRowEventArgs e) { if (e.Row.RowType == DataControlRowType.DataRow) { if ((e.Row.RowState == (DataControlRowState.Edit |DataControlRowState.Alternate)) || (e.Row.RowState ==DataControlRowState.Edit)) { RadioButtonList LevelRBL = (RadioButtonList)e.Row.Cells[4].FindControl("LevelRBL"); RadioButtonList AuditRBL = (RadioButtonList)e.Row.Cells[3].FindControl("AuditRBL"); HiddenField HF2 = (HiddenField)e.Row.FindControl("HF2"); HiddenField HF1 = (HiddenField)e.Row.FindControl("HF1"); if (LevelRBL.Items[0].Value.Equals(HF2.Value)) LevelRBL.Items[0].Selected = true; else LevelRBL.Items[1].Selected = true; if (AuditRBL.Items[0].Value.Equals(HF1.Value)) AuditRBL.Items[0].Selected = true; else AuditRBL.Items[1].Selected = true; } } } protected void RowEditing(object sender,GridViewEditEventArgs e) { GridView1.EditIndex = e.NewEditIndex; pagebind(); } protected void GridView_RowCommand(object sender,GridViewCommandEventArgs e) { if (e.CommandName == "info") { Response.Redirect("Member.aspx?id=" + Convert.ToInt32(e.CommandArgument)); } if (e.CommandName == "delete") { string id = e.CommandArgument.ToString(); string str = "DELETE FROM T_Member WHERE Member_ID=" + id + ";"; olecmd = new OleDbCommand(str, olecon); olecon.Open(); olecmd.ExecuteNonQuery(); olecon.Close(); GridView1.EditIndex = -1; pagebind(); } if (e.CommandName == "go") { try { TextBox tb = (TextBox)GridView1.BottomPagerRow.FindControl("inPageNum"); int num = Int32.Parse(tb.Text); GridViewPageEventArgs ea = new GridViewPageEventArgs(num - 1); GridView1_PageIndexChanging(null, ea); } catch { } } } protected void GridView_RowDeleting(object sender, GridViewDeleteEventArgs e) { } protected void OnRowUpdating(object sender, GridViewUpdateEventArgs e) { int i = e.RowIndex; RadioButtonList LevelRBL = (RadioButtonList)GridView1.Rows[i].Cells[4].FindControl("LevelRBL"); RadioButtonList AuditRBL = (RadioButtonList)GridView1.Rows[i].Cells[3].FindControl("AuditRBL"); string id = ((Label)GridView1.Rows[i].Cells[0].FindControl("Labelid1")).Text; string show = LevelRBL.SelectedValue.ToString(); string lclass = AuditRBL.SelectedValue.ToString(); string ins = "UPDATE T_Member SET [F_Audit] =" + lclass + ",[F_Level] =" + show + " WHERE Member_ID=" + id + ";"; olecmd = new OleDbCommand(ins, olecon); olecon.Open(); olecmd.ExecuteNonQuery(); olecon.Close(); GridView1.EditIndex = -1; pagebind(); } protected void GridView1_RowCancelingEdit(object sender, GridViewCancelEditEventArgs e) { GridView1.EditIndex = -1; e.Cancel = true; bind(); } protected void GridView1_PageIndexChanging(object sender, GridViewPageEventArgs e) { }望各位大大帮忙看看
[解决办法]
解决:在页面的 Page 项添加 EnableViewState="false" 即可
<%@ Page Language="C#" ValidateRequest="false" EnableViewState="false" AutoEventWireup="true" CodeFile="News.aspx.cs" Inherits="Admin_News" Title="Untitled Page" %>