2012-02-13 2 views
8

У меня есть Updatepanel и Gridview внутри него.Использование GridView внутри 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> 

Когда я нажимаю на мои кнопки внутри Griview, не сгореть события. Любая идея?

ответ

2

я сделал следующее, и она работает

кнопку жереха я заменить кнопку HTML и вызвать метод яваскрипта к огню 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 

    } 
    } 
} 
4

Вам нужно добавить 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" /> 
+0

Спасибо. У меня уже есть код для метода handler для события onPrItemCmd. – Roshe

+0

Вы пытались добавить обработчик событий onclick на свою кнопку, а затем проверить, работает ли это ??? –

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

UPDATE:

Возможно, вы могли бы делать некоторые проверки при нажатии на кнопки. Если это так, вам нужно добавить CausesValidation = "false" в ваших кнопках или свойствах ссылок

+0

Все еще я сталкиваюсь с той же проблемой, я попробовал. – Roshe

+0

@Nilaa, пожалуйста, ознакомьтесь с обновлением в моем ответе – aleafonso

+0

Да .. попробовал еще ту же проблему – Roshe

0

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

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

. Я получаю эту ошибку: Напечатайте 'System.Web.UI.PostBackTrigger' не имеет открытого свойства с именем «EventName». Я использую asp.net 3.5 – Roshe

+0

protected void Click (отправитель объекта, CommandEventArgs e) {} // создаем это фиктивное событие и попробуйте – Ruruboy

+0

'System.Web.UI.PostBackTrigger' не имеет этого свойства – Roshe

2

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

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

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

Надеется, что это помогает кто-то другое!

0

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

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

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

1

У меня была аналогичная проблема.

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

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

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

Смежные вопросы