在UpdatePanel中使用GridView

时间:2012-02-13 08:40:48

标签: c# asp.net asp.net-ajax updatepanel

我里面有一个Updatepanel和Gridview。

<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>

当我点击Griview内部的按钮时,它不会触发事件。 有什么想法吗?

8 个答案:

答案 0 :(得分:5)

你需要添加GridView的OnCommand事件,然后像这样处理那个事件:

OnRowCommand="gvPrList_OnRowCommand" 

或者为单个按钮添加单击事件,然后在代码隐藏文件中处理:

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

答案 1 :(得分:2)

我做了以下工作

我用html按钮替换asp按钮并调用javascript方法来启动Update Panal Load事件。

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

我的Js:

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

我的代码背后:

    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

    }
     }
}

答案 2 :(得分:2)

我遇到了同样的问题,其中带有OnClick的列按钮导致回发但是没有点击OnClick方法。当我注释掉更新面板时,一切正常。

我通过在更新面板中为网格添加回发触发器来解决此问题:

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

希望这有助于其他人!

答案 3 :(得分:1)

我有类似的问题。

根据您的情况,如我的...更新面板内的所有可点击控件我都希望成为触发器;所以我只能使用UpdatePanel属性&#39; ChildrenAsTriggers =&#34; true&#34;&#39;所以解决问题。

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

这解决了我的问题,现在我的gridview中的ItemTemplate生成的编辑和删除按钮在服务器上调用它们各自的方法。

答案 4 :(得分:0)

这将是代码隐藏中命令的事件处理程序:

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"*
    }

<强>更新

当您点击按钮时,可能正在进行一些验证。如果是这样,您需要在按钮或链接属性中添加 CausesValidation =“false”

答案 5 :(得分:0)

请将此代码添加到UpdatePanel。

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

答案 6 :(得分:0)

我添加了OnRowCommand事件并将此触发器添加到UpdatePanel:

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

请注意,它是异步触发器。

答案 7 :(得分:0)

这帮助了我。 在我的情况下,我正在更改一个asp:DropDownList控件中的值,然后返回服务器以更新位于另一个asp:UpdatePanel中的asp:GridView。我只是忘了添加代码以刷新列表中的更新面板。一旦完成,一切都会很好。

服务器端

System.Data.DataSet ds = MySQL.DAL.GetRecord(sql);
GV_View.DataSource = ds;
GV_View.DataBind();
UP_MainList.Update(); //refresh the update panel

aspx代码

            <asp:UpdatePanel runat="server" ID="UP_ListChange" UpdateMode="Conditional">
                <ContentTemplate>
                    <asp:DropDownList runat="server" ID="ddFilter" DataTextField="Desc" AutoPostBack="true" DataValueField="Detail" OnSelectedIndexChanged="GV_CodeView_RefreshScreen" ></asp:DropDownList>
                </ContentTemplate>
             </asp:UpdatePanel>
            <div class="medium">Select Filter to view database codes</div>
        </div>
        <div class="div-row-header" runat="server" id="divList">
        <asp:UpdatePanel runat="server" ID="UP_MainList" UpdateMode="Conditional">
        <ContentTemplate>
            <asp:GridView ID="GV_View" runat="server" AllowSorting="True" AutoGenerateColumns="false" DataKeyNames="id">
                <Columns>
                    <asp:BoundField DataField="Id" HeaderText="Id" Visible="false" />
                    <asp:BoundField DataField="Type_Cd" HeaderText="Code" />
                    <asp:BoundField DataField="Short_Desc" HeaderText=" Description" />
                    <asp:TemplateField HeaderText="">
                        <ItemTemplate>
                            <asp:Button ID="Code_Edit" runat="server" Text="Edit" onClick="GV_Code_Edit_Click" class="button" />
                        </ItemTemplate>
                    </asp:TemplateField>
                </Columns>             
        </ContentTemplate>

        </asp:UpdatePanel>
        </div>
相关问题