Как перейти в режим редактирования в FormView?

У меня есть FormView:

<asp:FormView ID="fvReport" runat="server" DefaultMode="ReadOnly" AllowPaging="false" OnModeChanging="fvReport_ModeChanging" DataKeyNames="id">

protected void fvReport_ModeChanging(Object sender, FormViewModeEventArgs e)
    {
        switch (e.NewMode)
        {
            case FormViewMode.Edit:
                fvReport.AllowPaging = false;
                break;
        }
    }

в ItemTamplate ставлю LinkButton:

<asp:LinkButton ID="lbEdit" runat="server" CausesValidation="true" CommandName="Edit" CommandArgument='<%# Eval("id") %>'>Редактировать</asp:LinkButton>

конечно, FormView имеет раздел EditItemTemplate.

когда я нажимаю кнопку, FormView обновляется и остается только для чтения. Что я делаю не так?

3 ответов


вы должны вызвать метод ChangeMode FormView и передать mode

fvReport.ChangeMode(DetailsViewMode.Edit);

другой вариант, который я обычно использую для перехода в режим редактирования из formView, - это добавить и определить элемент EditItemTemplate. Это значительно упрощает редактирование приложения.

в вашем formView вам может потребоваться изменить свой DefaultMode редактировать. Также в вашем коде за try:

protected void fvReport_ModeChanging(Object sender, FormViewModeEventArgs e)
{

}

protected void lbEdit_Click(object sender, EventArgs e)
{
    LinkButton lbEdit = (LinkButton)fvReport.FindControl("lbEdit");

    if (sender == lbEdit)
    {
        fvReport.DataBind();
        fvReport.ChangeMode(FormViewMode.Edit);
    }
}

могут быть и другие причины, почему ваш FormView не переключение. Обычно это плохо отформатированный HTML. Ваш дизайнер иногда говорит вам о деформированных разделах, отображая что-то вроде этого...

enter image description here

в тех случаях, когда вы не получаете этот очевидный сообщения FormView не переключение обычно сводится к чему-то менее очевидному, например bad AssociatedControlId атрибуты. Я бы рекомендовал посмотреть на вас ярлыки, валидаторы и все, что связано с одним элементом управления с другим. Что-то как малые, как это...

<asp:Label runat="server"
    ID="labelAccessGrantedBy"
    Text="Access Granted By"
    AssociatedControlID="textAccessGranted" />
<asp:TextBox runat="server"
    ID="textAccessGrantedBy"
    CssClass="wmioSmall wFull"
    Text='<%# Bind("access_granted_by") %>' />

обратите внимание на преднамеренное использование textAccessGranted выше, а не фактический textAccessGrantedBy TextBox? Вот где обработка команд не удалась для меня в прошлом.