DetailsView не обновляется и изменяется только после 2-х нажатий, Отмена не показывает редактируемые значения только для чтения - PullRequest
4 голосов
/ 28 апреля 2011

Я создал подробное представление, которое появляется после выбора даты в календаре.Это подробное представление заполняется с помощью оператора выбора в коде позади.Вот список моих проблем, которые я приветствую:

  1. Я должен дважды щелкнуть по кнопке редактирования, чтобы получить подробное представление в режиме редактирования.
  2. После перехода в режим редактирования я вижу обновлениеи кнопку отмены, но мне также нужно дважды нажать кнопку отмены, чтобы вернуться в состояние только для чтения.
  3. Когда я нахожусь в режиме редактирования, у меня есть 3 строки, которые можно редактировать, когда я дважды нажимаю кнопку отмены вВ режиме readOnly значения этих 3-х строк больше не отображаются, они просто являются пустыми полями, хотя данные все еще находятся в базе данных.
  4. Когда я что-то изменяю в режиме редактирования и нажимаю Обновить, мое представление сведений просто исчезает.

Код-за:

protected void DetailView1_ModeChanging(Object sender, DetailsViewModeEventArgs e)
{
    if (e.NewMode == DetailsViewMode.Edit)
    {
        DetailsView1.ChangeMode(e.NewMode);
    }
    if (e.CancelingEdit)
    {
        DetailsView1.ChangeMode(DetailsViewMode.ReadOnly);   
    }
}

protected void DetailView1_ItemUpdating(Object sender, DetailsViewUpdateEventArgs e)
{
    DetailsView1.DataBind();
}

protected void DetailsView1_ItemUpdated(object sender, DetailsViewUpdatedEventArgs e)
{
    DetailsView1.DataBind();
}

Разметка:

<asp:DetailsView ID="DetailsView1" runat="server" AutoGenerateRows="False" 
    OnModeChanging="DetailView1_ModeChanging" OnItemUpdating="DetailView1_ItemUpdating"
    OnItemUpdated="DetailsView1_ItemUpdated"
    AllowPaging="True" PageSize="5" HeaderText="Agenda"  CellPadding="10" 
    ForeColor="#333333" />

1 Ответ

1 голос
/ 28 апреля 2011

Ваша проблема в DetailView1_ModeChanging

Событие ModeChanging возникает, когда элемент управления DetailsView пытается переключиться между режимами редактирования, вставки и только для чтения, но до обновления свойства CurrentMode. Это позволяет вам предоставлять обработчик событий, который выполняет пользовательскую процедуру, такую ​​как отмена изменения режима, всякий раз, когда происходит это событие.

С MSDN

вам нужно использовать Item Command event

protected void DetailsView1_ItemCommand(object sender, DetailsViewCommandEventArgs e)
{
    if (e.CommandName == "Edit")
    {
        DetailsView1.ChangeMode(DetailsViewMode.Edit);
    }
}

Edit:

 protected void DetailView1_ModeChanging(Object sender, DetailsViewModeEventArgs e)
    {
        if (e.NewMode == DetailsViewMode.Edit)
        {
            DetailsView1.ChangeMode(e.NewMode);
            DetailsView1.Datebind(); // add this and check
        }
        if (e.CancelingEdit)
        {
            DetailsView1.ChangeMode(DetailsViewMode.ReadOnly);   
            DetailsView1.Datebind(); // add this and check
        }
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...