更新表单视图 asp.net 中的问题

本文关键字:问题 net asp 表单 视图 更新 | 更新日期: 2023-09-27 18:34:22

我已通过查询字符串将值发送到此页面。之后,我无法在模式更改事件上获得编辑模式。当我单击"编辑"按钮时,它只是回发,没有任何反应。如果第二次单击编辑,则会出现错误:

(Failed to load viewstate.  The control tree into which viewstate is being loaded must match the control tree that was used to save viewstate during the previous request.  For example, when adding controls dynamically, the controls added during a post-back must match the type and position of the controls added during the initial request.)

请告诉我我错在哪里。

源代码 -

<asp:FormView ID="formview1" runat="server" AllowPaging="true" Caption="FireBrigade" DataKeyNames="FireBrigadeID" OnModeChanging="formview1_ModeChanging"
        OnPageIndexChanging="formview1_PageIndexChanging">
        <ItemTemplate>
            FireBrigade ID :<asp:Label ID="lblFID" runat="server" Text='<%# Eval("FireBrigadeID") %>'></asp:Label><br />
            Name :<asp:Label ID="Label3" runat="server" Text='<%# Eval("FBName") %>'></asp:Label><br />
            LatLong:<asp:Label ID="Label1" runat="server" Text='<%# Eval("LatLng") %>'></asp:Label><br />
            Address: <asp:Label ID="Label2" runat="server" Text='<%# Eval("Address") %>'></asp:Label><br />
            Contact: <asp:Label ID="Label4" runat="server" Text='<%# Eval("ContactNumber") %>'></asp:Label><br />
            <asp:LinkButton ID="EditButton" Text="Edit" CommandName="Edit" RunAt="server"/>
        </ItemTemplate>
        <EditItemTemplate>
            FireBrigade ID :<asp:TextBox ID="txtFID" runat="server" Text='<%# Bind("FireBrigadeID") %>'></asp:TextBox><br />
            Name :<asp:TextBox ID="txtname" runat="server" Text='<%# Bind("FBName") %>'></asp:TextBox>
            LatLong:<asp:TextBox ID="txtlatlong" runat="server" Text='<%# Bind("LatLng") %>'></asp:TextBox><br />
            Address: <asp:DropDownList ID="ddlAddress" runat="server" OnDataBound="ddlAddress_DataBound" AppendDataBoundItems="true">
                         <asp:ListItem Text="Select" Value="0"></asp:ListItem>
                       </asp:DropDownList> <br />
            Contact: <asp:TextBox ID="txtcontact" runat="server" Text='<%# Bind("ContactNumber") %>'></asp:TextBox><br />
            <asp:LinkButton ID="UpdateButton"
                Text="Update"
                CommandName="Update"
                runat="server" />
            &nbsp;
                    <asp:LinkButton ID="CancelUpdateButton"
                        Text="Cancel"
                        CommandName="Cancel"
                        runat="server" />
        </EditItemTemplate>
    </asp:FormView>

C# 代码 -

public partial class Fifthpage : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {
        if (!IsPostBack)
        {
            lblshow.Text = Request.QueryString["q"].ToString();
Dataset ds = new Dataset();                
ds = bind();
            da.Fill(ds);
            formview1.DataSource = ds;
            formview1.DataBind();
        }
    }
    public DataSet bind()
    {
        SqlConnection con = new SqlConnection();
        con.ConnectionString = "Data Source=SYSTEM-PC;Initial Catalog=DB;Integrated Security=True";
        SqlCommand cmd = new SqlCommand("select * from FireBrigade",con);
        SqlDataAdapter da = new SqlDataAdapter(cmd);
        DataSet ds = new DataSet();
        da.Fill(ds);
        return ds;
    }
    protected void ddlAddress_DataBound(object sender, EventArgs e)
    {
        DataSet ds = new DataSet();
        ds = bind();
        List<string> ls = new List<string>();
        foreach (ListItem lst in ds.Tables[0].Rows)
        {
            //lst.Value = ds.Tables[0].Rows[0]["Address"].ToString();
            ls.Add(ds.Tables[0].Rows[0]["Address"].ToString());
        }
        DropDownList ddladd = (DropDownList)formview1.FindControl("ddlAddress");
        ddladd.DataSource = ls;
    }
    protected void formview1_ModeChanging(object sender, FormViewModeEventArgs e)
    {
        formview1.ChangeMode(e.NewMode);
        bind();
    }
    protected void formview1_PageIndexChanging(object sender, FormViewPageEventArgs e)
    {
        formview1.PageIndex = e.NewPageIndex;
        bind();
    }
}

更新表单视图 asp.net 中的问题

您应该在编辑后重新分配 FormView 的数据源,因此只需按如下方式更改代码即可

protected void formview1_ModeChanging(object sender, FormViewModeEventArgs e)
{
    formview1.ChangeMode(e.NewMode);
    formview1.DataSource = bind();
    formview1.DataBind();
}