2012-02-13 32 views
8

Tôi có một Updatepanel và GridView bên trong nó.Sử dụng GridView bên trong UpdatePanel

<asp:UpdatePanel ID="uplPanel" UpdateMode="Conditional" runat="server" OnLoad="uplPanel_Load"> 
<ContentTemplate> 
<asp:GridView ID="gvPrList" runat="server" AutoGenerateColumns="false" AllowPaging="false" 
     AllowSorting="false" CssClass="list-table" HeaderStyle-CssClass="header"> 
     <Columns> 
    <ItemTemplate> 
       <asp:Button ID="btnEdit" runat="server" Text="Edit" CssClass="button save" OnCommand="onPrItemCmd" 
        CommandName="editRow" CommandArgument='<%#Bind("ID") %>' Style="width: 80px" /> 
       <asp:Button ID="btnDelete" runat="server" Text="Delete" CssClass="button save" OnCommand="onPrItemCmd" 
        CommandName="deleteRow" CommandArgument='<%#Bind("ID") %>' Style="width: 80px" /> 
      </ItemTemplate> 
     </asp:TemplateField> 
    </Columns> 

Khi tôi bấm vào nút của tôi bên trong Griview, nó không cháy các sự kiện. Bất kỳ ý tưởng nào?

Trả lời

2

tôi đã làm như sau và nó hoạt động

tôi thay thế nút asp với nút html và gọi phương thức javascript để bắn Cập nhật panal tải sự kiện.

<input id="btnDelete1" type="button" onclick="javascript:DeletePrItem('<%# Eval("ID") %>');" value="Delete" class="button save" style="width: 80px" /> 

My Js:

function DeletePrItem(_Id) { 
     __doPostBack('<%= uplPanel.ClientID %>', _Id); 
    } 

Mã My đằng sau:

protected void uplPanel_Load(object sender, EventArgs e) 
    { 
     var arg = Request.Params.Get("__EVENTARGUMENT"); 

     if (arg != null) 
     { 
      if (arg != "") 
      { 
       string recordId = arg.ToString(); 
       //Do deletetion and rebind data grid 

    } 
    } 
} 
4

Bạn cần phải thêm OnCommand sự kiện của GridView và sau đó xử lý mà bên trong trường hợp như thế này:

OnRowCommand="gvPrList_OnRowCommand" 

hoặc cách khác thêm một sự kiện click cho nút cá nhân và sau đó xử lý trong các mã sau file:

<asp:Button ID="btnEdit" runat="server" OnClick="btnEdit_Click" Text="Edit" CssClass="button save" 
        OnCommand="onPrItemCmd" CommandName="editRow" CommandArgument='<%#Bind("ID") %>' Style="width: 80px" /> 
+0

Cảm ơn. Tôi đã có mã của tôi đằng sau phương thức xử lý cho sự kiện onPrItemCmd. – Roshe

+0

Bạn đã thử thêm trình xử lý sự kiện 'onclick' vào nút rồi kiểm tra xem nó có hoạt động không ??? –

0

Đây sẽ là sự kiện Handler cho lệnh của bạn trong codebehind:

protected void onPrItemCmd(object sender, CommandEventArgs e) 
    { 
     //do whatever you want 
     //probably you will need the "ID" or "CommandArgument": 
     string myArgumentID = e.CommandArgument.ToString(); 

     uplPanel.Update(); //since the UpdatePanel is set *UpdateMode="Conditional"* 
    } 

CẬP NHẬT:

Có thể, bạn có thể thực hiện một số xác thực khi bạn nhấp vào nút. Nếu vậy, bạn cần phải thêm CausesValidation = "false" vào các thuộc tính của nút hoặc liên kết của bạn

+0

Tôi vẫn gặp phải vấn đề tương tự, tôi đã thử nó. – Roshe

+0

@Nilaa xin vui lòng xem các cập nhật trong câu trả lời của tôi – aleafonso

+0

Có .. đã thử vẫn còn cùng một vấn đề – Roshe

0

Vui lòng thêm mã này vào UpdatePanel.

</ContentTemplate> 
<Triggers> 
    <asp:PostBackTrigger ControlID="gvPrList" EventName="Click" /> 
</Triggers> 
</asp:UpdatePanel> 
+0

Tôi nhận được lỗi này: Gõ 'System.Web.UI.PostBackTrigger' không có thuộc tính công khai có tên 'EventName'. Tôi đang sử dụng asp.net 3.5 – Roshe

+0

void void Click (người gửi đối tượng, CommandEventArgs e) {} // tạo điều này là một sự kiện giả và thử – Ruruboy

+0

'System.Web.UI.PostBackTrigger' không có tài sản này – Roshe

2

tôi đã cùng một vấn đề mà các nút cột với một OnClick đã gây ra một postback nhưng phương pháp OnClick đã không được đánh. Khi tôi nhận xét ra bảng cập nhật và tất cả đều hoạt động.

tôi giải quyết vấn đề này bằng cách thêm một kích hoạt postback cho lưới điện trong bảng cập nhật:

</ContentTemplate> 
    <Triggers> 
     <asp:PostBackTrigger ControlID="uxWebDataGrid" /> 
    </Triggers> 
</asp:UpdatePanel> 

Hy vọng điều này sẽ giúp người khác!

0

tôi đã thêm một sự kiện OnRowCommand và thêm kích hoạt này để UpdatePanel:

<Triggers> 
    <asp:AsyncPostBackTrigger ControlID="gvPrList" EventName="RowCommand" /> 
</Triggers> 

Lưu ý rằng nó là một kích hoạt Async.

1

Tôi gặp sự cố tương tự.

Tùy thuộc vào tình huống của bạn, như trong tôi ... Tất cả các điều khiển có thể nhấp trong bảng điều khiển cập nhật tôi sẽ muốn là trình kích hoạt; Vì vậy, tôi chỉ đơn giản là có thể sử dụng thuộc tính UpdatePanel 'ChildrenAsTriggers = "true"' để giải quyết vấn đề.

<asp:UpdatePanel runat="server" ID="UPCommunicationlogForm" ChildrenAsTriggers="true" > 

Điều này giải quyết được vấn đề của tôi, bây giờ các nút chỉnh sửa và xóa được tạo từ ItemTemplate bên trong GridView gọi phương thức tương ứng trên máy chủ.

Các vấn đề liên quan