Asp.net 为什么formview会在编辑模式下消失
我知道我一定错过了一些简单的东西,但我找不到,所以我会在这里提出问题。我有一个带有两个模板(item和edititem)的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
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();