Использование GridView внутри UpdatePanel - PullRequest
8 голосов
/ 13 февраля 2012

У меня есть 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 ]

5 голосов
/ 13 февраля 2012

Вам нужно добавить OnCommand событие GridView, а затем обработать его внутри этого события следующим образом:

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" />
2 голосов
/ 28 июня 2013

У меня была та же проблема, когда кнопки колонок с OnClick вызывали обратную передачу, но метод OnClick не срабатывал.Когда я закомментировал панель обновления, и все заработало.

Я решил эту проблему, добавив триггер обратной передачи для сетки на панели обновлений:

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

Надеюсь, это поможет кому-то еще!

2 голосов
/ 14 февраля 2012

Я сделал следующее, и это работает

Я заменяю кнопку asp на кнопку html и вызываю метод 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

    }
     }
}
1 голос
/ 07 ноября 2015

У меня была похожая проблема.

В зависимости от вашей ситуации, как у меня ... Все интерактивные элементы управления на панели обновлений, я хочу быть триггерами; Так что я просто смог использовать свойство UpdatePanel 'ChildrenAsTriggers = "true", поэтому решил проблему.

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

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

0 голосов
/ 24 апреля 2019

Это помогло мне. В моем случае я изменял значение в элементе управления asp: DropDownList, а затем возвращался на сервер, чтобы обновить мой asp: GridView, который находится в другом asp: UpdatePanel. Я просто забыл добавить код для обновления панели обновления списком. Как только я это сделал, все заработало нормально.

Серверная сторона

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>
0 голосов
/ 29 октября 2014

Я добавил событие OnRowCommand и добавил этот триггер в UpdatePanel:

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

Обратите внимание, что это асинхронный триггер.

0 голосов
/ 13 февраля 2012

Пожалуйста, добавьте этот код в UpdatePanel.

</ContentTemplate> 
 <Triggers>
   <asp:PostBackTrigger ControlID="gvPrList" EventName="Click" />
 </Triggers>
 </asp:UpdatePanel>
0 голосов
/ 13 февраля 2012

Это будет обработчик событий для вашей команды в коде:

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" в свойствах кнопок или ссылок

...