更新FormView asp.net中的问题。

时间:2013-10-07 07:50:21

标签: c# asp.net formview

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

(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();
    }
}

1 个答案:

答案 0 :(得分:1)

您应该在编辑后重新分配FormView的DataSource,因此只需更改您的代码,如下所示

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