2013-11-19 3 views
0

Я знаю, что, должно быть, мне не хватает чего-то простого, но я не могу найти его, поэтому поставил бы здесь вопрос. У меня есть formview с двумя шаблонами (item и edititem).Почему в режиме редактирования исчезло вид формы

Форма привязана к элементу itemmemplate в событии page_Load и отлично работает. Однако, если используется код !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(); 
    } 
} 

ответ

0

Этот

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

, кажется, не установить источник данных. Правило заключается в том, что либо у вас есть DataSourceID, который указан в декларативной части вашего кода (*.aspx, *.ascx), и привязка выполняется автоматически после каждого возврата или вы программно связываете, что связано с настройкой источника данных и вызовом DataBind().

Моя рекомендация будет двигаться ваш ObjectDataSource декларативной части кода и установите DataSourceID на FormView к ID в ObjectDataSource. Это чисто и легко, и привязка работает всегда.

+0

Zychia благодарит вас за отзыв. Я обнаружил, что я не хотел добавлять источник данных, поэтому добавляю строку в свой код, см. Выше. Что касается добавления идентификатора источника данных в декларативную часть моего кода, я не делал этого для загрузки страницы, потому что я использую другой источник в зависимости от определенных условий, как вы можете видеть в инструкции if (source == LifeLineDS) , Есть ли лучший способ справиться с такой ситуацией? – Jason

+0

извинения за испортить ваше имя в моем комментарии выше :) – Jason

Смежные вопросы