2012-02-07 3 views
1

У меня довольно стандартный GridView с SqlDataSource в комплекте с SelectCommand/UpdateCommand/DeleteCommand.ASP.NET GridView внутри UpdatePanel не выйдет из режима редактирования

Я использую встроенные команды Gridview для TemplateField'ed.

CommandName="Update" 
CommandName="Edit" 
CommandName="Cancel" 
CommandName="Delete" 

Все работает нормально, пока я не установил GridView внутри UpdatePanel. 1. Когда я нажимаю «редактировать», он переходит в режим редактирования, но не выйдет из режима редактирования, когда вы нажмете «Отменить» или «Обновить». 2. Когда я нажимаю на «удаление», как и следовало ожидать, я больше не смогу попасть в режим редактирования, даже если я нажму «edit»

Что здесь?

Пример кода:

<asp:UpdatePanel ID="UpdatePanel1" runat="server"> 
    <ContentTemplate> 
     <div class="BoxFloat"> 
      <h4>Aliases</h4> 
      <hr /> 
      <asp:SqlDataSource ID="sqlPersonAlias" runat="server" 
       ConnectionString="<%$ ConnectionStrings:myConnectionString %>" 
       ProviderName="<%$ ConnectionStrings:myConnectionString.ProviderName %>" 
       DeleteCommand="DELETE FROM PersonAlias WHERE PersonAliasId=?PersonAliasId" 
       UpdateCommand="UPDATE PersonAlias SET AliasName=?AliasName WHERE PersonAliasId=?PersonAliasId" 
       SelectCommand="SELECT * FROM PersonAlias E INNER JOIN Person P ON P.PersonId=E.PersonId WHERE Username=?Username"> 
       <DeleteParameters> 
        <asp:Parameter Name="PersonAliasId" /> 
       </DeleteParameters> 
       <UpdateParameters> 
        <asp:Parameter Name="PersonAliasId" /> 
        <asp:Parameter Name="AliasName" /> 
       </UpdateParameters> 
       <SelectParameters> 
        <asp:QueryStringParameter Name="Username" QueryStringField="Username" Type="String" /> 
       </SelectParameters> 
      </asp:SqlDataSource> 
      <asp:GridView ID="gridviewPersonAlias" runat="server" 
       AutoGenerateColumns="False" 
       DataKeyNames="PersonAliasId" 
       DataSourceID="sqlPersonAlias"> 
       <Columns> 
        <asp:TemplateField ShowHeader="False"> 
         <EditItemTemplate> 
          <asp:ImageButton ID="imagebuttonCancel" ToolTip="Cancel" CommandName="Cancel" ImageUrl="~/images/cancel16.png" runat="server" /> 
          &nbsp; 
          <asp:ImageButton ID="imagebuttonUpdate" ToolTip="Apply" OnClientClick="return confirm('Are you sure?');" CommandName="Update" ImageUrl="~/images/apply16.png" runat="server" /> 
         </EditItemTemplate> 
         <ItemTemplate> 
          <asp:ImageButton ID="imagebuttonDelete" ToolTip="Delete" OnClientClick="return confirm('Are you sure?');" CommandName="Delete" ImageUrl="~/images/delete16.png" runat="server" /> 
          &nbsp; 
          <asp:ImageButton ID="imagebuttonEdit" ToolTip="Edit" CommandName="Edit" ImageUrl="~/images/edit16.png" runat="server" /> 
         </ItemTemplate> 
        </asp:TemplateField> 
        <asp:BoundField DataField="AliasName" HeaderText="Alias" SortExpression="AliasName" /> 
       </Columns> 
      </asp:GridView> 
      <hr /> 
      <asp:TextBox ID="textboxPersonAlias" runat="server" /> 
      <asp:Button ID="buttonPersonAliasAdd" runat="server" Text="Add" onclick="buttonPersonAliasAdd_Click" /> 
     </div> 

    </ContentTemplate> 
</asp:UpdatePanel> 

Когда "Обновить" нажата, база данных обновляется. Кажется, что проблема только с клиентской стороны.

Примечание: Я использую "?" вместо «@» для параметров, потому что этот SqlDataSource использует MySq вместо MSSQL (мне нравится VS2010).

+0

Какое поведение вы видите при нажатии кнопки Отмена и кнопки Update? Возвращает ли страница назад? Ничего не происходит вообще? Попробуйте использовать инструменты разработчика Firebug или Chrome, чтобы узнать, какие значения отправляются на сервер. Какой браузер вы используете? – jhsowter

+0

Ничего не происходит (на клиентской стороне, по крайней мере). Кажется, что работают на стороне сервера методы (обновления базы данных). Я тестировал Chrome и Firefox. –

+0

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

ответ

1

Я думаю, что вам нужно заполнить Полноценную или обновить панель обновления, так как это скорее всего gridview doesnt rebind Сначала попробуйте поместить sqldatasource за панель обновления. Посмотрите, работает ли это

+0

База данных, похоже, правильно обновляется, но при нажатии на команду обновления. Это просто, что GridView не будет выводить из EditItemTemplate и возвращаться ti ItemTemplate –

1

У меня была такая же проблема в моем проекте, и она была решена.

вот мое решение:

protected void gvPayments_RowUpdating(object sender, GridViewUpdateEventArgs e) 
{ 
    //here is the edit code 
    //...... 
    //at the end add these lines: 
    gvPayments.EditIndex = -1; 
    gvPayments.DataBind(); 
    e.Cancel = true; 
} 
Смежные вопросы