GridView не связывает данные при обратной передаче DetailsView

У меня такой же вопрос:

Содержимое GridView не обновляется при изменении базовых данных

но предоставленные ответы не работают для меня, мне нужны идеи, пожалуйста, потому что до сих пор я потратил 3 дня, пытаясь обновить GridView при обратной передаче DetailsView.

Ситуация такая: -

У меня есть GridView, который при выборе строки DetailsView отображает подробную информацию. в.

При нажатии кнопки редактирования DetailsView переходит в режим редактирования.

Я редактирую его и нажимаю кнопку «Обновить».

Обновление запускает событие и правильно обновляет мою таблицу базы данных SQL.

Проблема заключается в том, что в сотнях сообщений говорится об использовании GridView1.Databind (); он не обновится, пока я не нажму кнопку «Отмена».

Я знаю, что он отправляется обратно, потому что я его отлаживал и видел в постбэке Page_load (...).

я добавил

SqlDataSource1.DataBind ();

и

GridView1.DataBind ()

в следующие места, и, похоже, ни один из них не обновляет мой GridView.

protected void Page_Load(object sender, EventArgs e)
{
    if (!IsPostBack)
    {
        ...
    }
    else
    {
    SqlDataSource1.DataBind();
    GridView1.DataBind();
    }
}

также

protected void DetailsView1_ItemUpdating(object sender,   DetailsViewUpdateEventArgs e)
{
   GridView1.DataBind();
}

также

protected void DetailsView1_ItemUpdated(object sender, DetailsViewUpdatedEventArgs e)
{
    //GridView.SelectedIndex = -1;
   SqlDataSource1.EnableCaching = false;
    // UpdatePanel14.Update();
    SqlDataSource1.DataBind();
    GridView1.DataBind();
    SqlDataSource1.EnableCaching = true;
    // EndEditingGridView();
}

Итак, как вы можете видеть, я пробовал выполнить обратную передачу в разделе Page_Load (), а также при обновлении и обновлении DetailsView. Я также пробовал установить ViewState = Disabled в GridView. Кажется, ничто не заставит его обновить свое содержимое, если я не нажму кнопку «Отмена». Спасибо.


person FlashTrev    schedule 09.06.2016    source источник
comment
Когда вы нажимаете "Отмена", происходит обратная передача. Я бы попытался удалить: if (! IsPostBack) {...} else {}, и я бы оставил SqlDataSource1.DataBind (); GridView1.DataBind (); дайте мне знать, если это решение   -  person Alexandre    schedule 09.06.2016
comment
Как вы вводите данные в DetailsView и обновляете их? пожалуйста, покажите этот код   -  person naveen    schedule 10.06.2016
comment
Спасибо за ваши комментарии, добавление его в корень Page_Load, просто остановило возможность выбора gridview. Я добавил свой ответ ниже   -  person FlashTrev    schedule 11.06.2016
comment
@naveen, добавлять код здесь немного, так как у меня есть отдельный источник SQLDatasource для DetailsView, который OnSelecting запускает событие для получения значения IDKey для команды выбора, которая является SelectCommand = SELECT * FROM [DriversID] WHERE DriverIDKey = @ DriverID. У меня также есть параметр Control, который ссылается на GridiView плюс некоторый код за событиями. Я могу поделиться им, если вам интересно для себя, но если это просто помочь найти ответ, я все готов его. Спасибо.   -  person FlashTrev    schedule 11.06.2016


Ответы (1)


Я нашел ответ из некоторой предыдущей работы, которую я сделал. Я нашел, что работает, так это удалить источник данных Gridviews, сбросить его индекс и привязать его к данным. Затем обновите UpdatePanel, затем повторно подключите gridview и снова свяжите его с данными.

Моя функция, которую я вызываю в конце события DetailsView1_ItemUpdated ():

private void EndEditingDetailsView1()
{
    GridView.DataSourceID = null;
    GridView.EditIndex = -1;
    GridView.DataBind();

    DetailsUpdatePanel.DataBind();
    DetailsUpdatePanel.Update(); 

    GridView.DataSourceID = "SqlDataSource";
    GridView.EditIndex = -1;
    GridView.DataBind();
}

работает угощение.

person FlashTrev    schedule 11.06.2016