0

このページにクエリ文字列を介して値を送信しました。その後、モード変更イベントで編集モードを取得できません。[編集] ボタンをクリックすると、単にポストバックされ、何も起こりません。2 回目の編集をクリックすると、エラーが発生します。

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

1 に答える 1

1

編集後に FormView の DataSource を再割り当てする必要があるため、次のようにコードを変更するだけです

protected void formview1_ModeChanging(object sender, FormViewModeEventArgs e)
{
    formview1.ChangeMode(e.NewMode);
    formview1.DataSource = bind();
    formview1.DataBind();
}
于 2013-10-07T09:00:35.107 に答える