【问题标题】:Why would formview disappear in Edit Mode为什么formview会在编辑模式下消失
【发布时间】:2013-11-19 00:14:09
【问题描述】:

我知道我一定遗漏了一些简单的东西,但我找不到它,所以我将在这里提出问题。我有一个带有两个模板(项目和编辑项目)的表单视图。

表单绑定到 page_Load 事件中的 itemtemplate 并且工作正常。但是,如果在代码隐藏中使用!IsPostBack,则单击编辑按钮时表单视图会消失。如果我从page_load 中删除回发检查,则单击编辑按钮后会出现表单视图。

页面确实启用了视图状态。

一般来说,要让表单视图在模式之间正确转换需要哪些步骤?

protected void Page_Load(object sender, EventArgs e)
{
    if (!IsPostBack)
    {
        source = Session["Source"].ToString();
        acctType = Session["AccountType"].ToString();
        acctNumber = Convert.ToInt32(Session["AccountNumber"]);

        if (source == "LifeLineDS")
        {
            ObjectDataSource fvObjDS = new ObjectDataSource();
            fvObjDS.TypeName = "LifelineDataAccess.LifelineSubscriber";
            fvObjDS.SelectMethod = "GetLifelineDSSubscriber";

            fvObjDS.SelectParameters.Add(new Parameter("AcctType", TypeCode.String, acctType));
            fvObjDS.SelectParameters.Add(new Parameter("AcctNumber", TypeCode.String, Session["AccountNumber"].ToString()));
            fvObjDS.DataBind();

            if (fvObjDS != null)
            {
                fvSubscriber.DataSource = fvObjDS;  //subscriber.ToString();
                fvSubscriber.DataBind();

                initialProgramValue = (fvSubscriber.FindControl("txtEligibility") as TextBox).Text;
            }                
        }
// more code for other sources...
}

protected void btnEdit_Click(object sender, EventArgs e)
{
    fvSubscriber.ChangeMode(FormViewMode.Edit);
    fvSubscriber.DataSource = Session["subscriber"];  //Adding this line resolved !IsPostBack problem
    fvSubscriber.DataBind();

    ObjectDataSource programsObjDS = new ObjectDataSource();
    programsObjDS.TypeName = "LifelineDataAccess.LifelineSubscriber";
    programsObjDS.SelectMethod = "GetPrograms";

    DropDownList ddlEligibility = ((DropDownList)(fvSubscriber.FindControl("ddlEligibility")));

    if (ddlEligibility != null)
    {
        ddlEligibility.DataSource = programsObjDS;
        ddlEligibility.DataTextField = "ProgramName";
        ddlEligibility.DataValueField = "ProgramName";

        ddlEligibility.SelectedValue = initialProgramValue; // Set selected value to subscribers current program
        ddlEligibility.DataBind();
    }
} 

【问题讨论】:

    标签: asp.net formview


    【解决方案1】:

    这个

    fvSubscriber.ChangeMode(FormViewMode.Edit);
    fvSubscriber.DataBind();
    

    似乎没有设置数据源。规则是,要么您在代码的声明部分(*.aspx*.ascx)中设置了DataSourceID,并且绑定在每次回发时自动完成,或者您以编程方式绑定,这涉及设置数据源并调用DataBind().

    我的建议是将您的ObjectDataSource 移至代码的声明部分,并将@​​987654328@ 上的DataSourceID 设置为IDObjectDataSource。这既干净又简单,而且绑定始终有效。

    【讨论】:

    • Zychia 感谢您的反馈。我发现我没有选择添加数据源,所以我在代码中添加了一行,见上文。关于在我的代码的声明部分添加数据源 ID,我没有为页面加载执行此操作,因为我根据某些条件使用不同的源,如您在 if (source == LifeLineDS) 语句中所见.有没有更好的方法来处理这种情况?
    • 很抱歉在我上面的评论中弄乱了你的名字:)
    猜你喜欢
    • 2021-09-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-02-11
    • 2021-08-31
    • 1970-01-01
    • 2010-09-20
    相关资源
    最近更新 更多