2016-06-09 5 views
0

У меня есть один и тот же вопрос:GridView не связывание данных на постбэка из DetailsView

GridView contents don’t update when underlying data changes

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

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

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

При нажатии на edit DetailsView переходит в режим «Редактирование».

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

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

Проблема, несмотря на 100 сообщений, в которых используется 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. Кажется, что ничего не обновляет его содержимое, если я не нажму кнопку «Отмена». Благодарю.

+0

Когда вы нажимаете «Отмена», происходит обратная передача. Я бы попытался удалить: if (! IsPostBack) { ... } else { }, и я оставил бы SqlDataSource1.DataBind(); GridView1.DataBind(); дайте мне знать, если это решение – Alexandre

+0

Как вы заполняете данные в DetailsView и обновляете его? покажите, что код – naveen

+0

Спасибо за ваши комментарии, добавив его в корень Page_Load, просто остановил gridview, чтобы его можно было выбрать. Я добавил свой ответ ниже – FlashTrev

ответ

0

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

Моя функция, которую я называю в конце моего 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(); 
} 

работает удовольствие.