Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net 为什么formview会在编辑模式下消失_Asp.net_Formview - Fatal编程技术网

Asp.net 为什么formview会在编辑模式下消失

Asp.net 为什么formview会在编辑模式下消失,asp.net,formview,Asp.net,Formview,我知道我一定错过了一些简单的东西,但我找不到,所以我会在这里提出问题。我有一个带有两个模板(item和edititem)的formview 表单被绑定到page\u Load事件中的itemtemplate,工作正常。但是,如果是,请使用!IsPostBack在代码隐藏中,单击编辑按钮时formview将消失。如果我从page\u load中删除回发检查,则单击编辑按钮后会显示表单视图 该页未启用viewstate 通常,需要哪些步骤才能使formview在模式之间正确转换 protected

我知道我一定错过了一些简单的东西,但我找不到,所以我会在这里提出问题。我有一个带有两个模板(item和edititem)的formview

表单被绑定到
page\u Load
事件中的itemtemplate,工作正常。但是,如果是,请使用
!IsPostBack
在代码隐藏中,单击编辑按钮时formview将消失。如果我从
page\u load
中删除回发检查,则单击编辑按钮后会显示表单视图

该页未启用viewstate

通常,需要哪些步骤才能使formview在模式之间正确转换

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

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


我的建议是将您的
ObjectDataSource
移动到代码的声明部分,并将
FormView
上的
DataSourceID
设置为
ObjectDataSource
ID
。这既干净又简单,而且装订总是很有效。

Zychia感谢您的反馈。我发现我没有选择添加数据源,所以我在代码中添加了一行,见上文。关于在我的代码的声明性部分添加数据源ID,我没有在页面加载中这样做,因为我根据某些条件使用不同的源,正如您在if(source==LifeLineDS)语句中看到的那样。有没有更好的方法来处理这样的情况?很抱歉在我上面的评论中把你的名字弄乱了:)
fvSubscriber.ChangeMode(FormViewMode.Edit);
fvSubscriber.DataBind();