команда удаления gridview внутри панели обновления и отдельные функции __doPostback () - PullRequest
2 голосов
/ 03 декабря 2010

У меня есть сетка в панели обновления, у строк есть кнопка удаления, которая удаляет эту строку.

В другом месте я запускаю код для вставки строки.После этой вставки я запускаю __doPostback () с идентификатором панели обновления, затем в событии load () панели обновления я вызываю databind () для gridview.

Как только я реализую __doPostback () и databind,перестает работать встроенное удаление gridview!:( Фактическое обновление / привязка данных при добавлении строки работает хорошо.

Как я могу преодолеть это? Я думаю, что-то может быть не так в том, что при нажатии на кнопку удаления привязка данных конфликтует с встроенной удалить /обновить функциональность?

Спасибо!

РЕДАКТИРОВАТЬ: Извинения, если вопрос не описан хорошо ...

По сути, я хочу иметь сетку с встроенным удалитьфункциональность через источник данных, столбец команд и т. д. внутри панели обновления. Я также хочу обновить эту панель отдельно, но когда я добавляю этот отдельный код обновления (gridview.databind в updatepanel.load), это нарушает стандартную функциональность удаления.это понятно :)

Ответы [ 3 ]

0 голосов
/ 13 сентября 2011

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

Для этого используется метод RegisterAsyncpostBackControl.

Вот общее представление о том, как это сделать.

<asp:ScriptManager ID="ScriptManager1" runat="server" />
<asp:UpdatePanel ID="UpdatePanel1" UpdateMode="Conditional" runat="server">
  <ContentTemplate>
    <asp:GridView ID="GridView1" runat="server">
      <%-- your fields, etc --%>
    </asp:GridView>
  </ContentTemplate>
</asp:UpdatePanel>

В вашем коде позади вы делаете

protected void Page_Load()
{
    ScriptManager1.RegisterAsyncPostBackControl(GridView1);
}

Прошло много времени с тех пор, как я это сделал, но я верю, что это позволит GridView функционировать так, как вы ожидаете, за исключением того, что вам не нужен дополнительный DataBind (), в который я не верю.

Вы также можете установить для UpdatePanel значение Conditional и запустить UpdatePanel1.Update () поверх этого, как предложил Jeison.

Вы можете найти некоторые дополнительные детали на http://msdn.microsoft.com/en-us/library/bb386452.aspx

Если у вас все еще есть проблемы, сообщите нам, что случилось.

0 голосов
/ 13 сентября 2011

Кажется, что вы вызываете DataBind() GridView каждый раз, когда UpdatePanel загружается после нажатия кнопки вставки, он перезагружает данные, прежде чем удаление достигает источника данных.Таким образом, вы можете добавить логический eventArgument в __doPostBack (updatePanelId, "true").И с помощью этого вы можете добавить условие в событие загрузки панели обновлений, например

if(this.updatepanel1.Page.Request.Params["__EVENTARGUMENT"] == "true"]
   this.gridview.databind()

Надеюсь, это решит проблему.

0 голосов
/ 10 сентября 2011

Вы пытались установить UpdatePanelMode как Условный и использовать UpdatePanel.Update () помимо ClientScript.RegisterStartupScript во время блока вставки?

...