2012-02-08 2 views
1

У меня есть ModalPopupExtender, который, между прочим, заполнен gridview (из DataTable).Удалить из GridView в ModalpopupExtender

В этом GridView У меня есть кнопка удаления, прикрепленная к каждой строке, которая должна удалить строку. Можно ли в любом случае удалить выбранную строку из datatable, а затем обновить GridView без закрытия ModalPopupExtender?

Вот мой GridView:

<ajaxToolkit:ModalPopupExtender ID="ModalPopupExtender1" runat="server" PopupDragHandleControlID="divPopupReport" TargetControlID="btnHidden" PopupControlID="divPopupReport" CancelControlID="btnCloseReport" BackgroundCssClass="modalBackground"></ajaxToolkit:ModalPopupExtender> 
<asp:UpdatePanel runat="server" ID="upReport"> 
<ContentTemplate> 
<div id="divPopupReport" runat="server" style="text-align:left; padding-right:0px; background-color:White; border: 2px solid #87d000; display:none;" > 

<asp:GridView ID="GridView2" runat="server" CssClass="list listExtended" 
         DataKeyNames="DocumentGuid" Width="100%" OnRowCommand="GridView2_RowCommand" AutoGenerateColumns="false"> 
         <Columns> 
          <asp:BoundField DataField="DocumentName" HeaderText="Dokumentname"> 
           <ItemStyle CssClass="list"></ItemStyle> 
          </asp:BoundField> 
          <asp:BoundField DataField="CardName" HeaderText="Reference"> 
           <ItemStyle CssClass="list"></ItemStyle> 
          </asp:BoundField> 
          <asp:BoundField DataField="DocumentDate" HeaderText="Date"> 
           <ItemStyle CssClass="list"></ItemStyle> 
          </asp:BoundField> 
          <asp:TemplateField HeaderText=""> 
           <ItemStyle CssClass="list" /> 
           <ItemTemplate> 
           </ItemTemplate> 
          </asp:TemplateField> 
          <asp:TemplateField HeaderText=""> 
           <ItemStyle CssClass="list" /> 
           <ItemTemplate> 
            <asp:ImageButton ID="btnDelete" CssClass="image" runat="server" CommandName="Delete" CommandArgument='<%# Eval("DocumentGuid") %>' ImageUrl="~/delete.gif" Width="16" Height="16" /> 
           </ItemTemplate> 
          </asp:TemplateField> 
         </Columns> 
        </asp:GridView> 
</div>  
</ContentTemplate> 
</asp:UpdatePanel> 

И ниже моей RowCommand.

protected void GridView2_RowCommand(object sender, GridViewCommandEventArgs e) 
{ 
    if (e.CommandName == "Delete") 
    { 
     DataTable SelectedDataTable = Session["SelectedDataTable"] as DataTable; 
     string guid = Convert.ToString(e.CommandArgument); 
     DataRow[] dr = SelectedDataTable.Select("DocumentGuid = '" + guid + "'"); 
     SelectedDataTable.Rows.Remove(dr[0]); 
     Session["SelectedDataTable"] = SelectedDataTable; 
     GridView2.DataSource = SelectedDataTable; 
     GridView2.DataBind(); 
    } 
} 

ответ

1

Сменный upReport панель с divPopupReport DIV (то есть место upReport UpdatePanel в divPopupReport дел).

+0

Спасибо за ответ. Но это не так - строка все еще находится в GridView (когда я пытаюсь отлаживать, строка IS удаляется из DataTable). Я добавил upReport и ContentTemplate внутри тега divPopupReport. – Thomas

+0

Изменен «Удалить» RowCommand вместо onClick-слушателя, который сделал трюк. благодаря – Thomas

2

Вам необходимо обернуть UpdatePanel вокруг сетки. Это должно решить проблему.

Другой вариант - использовать ajax. Использование JavaScript/JQuery, чтобы удалить строку таблицы вручную в комбинации с WebMethod: http://encosia.com/using-jquery-to-directly-call-aspnet-ajax-page-methods/

Другим простым решением является повторно показать всплывающее окно после поста назад.