ASP.NET GridView внутри UpdatePanel не выйдет из режима редактирования - PullRequest
1 голос
/ 07 февраля 2012

У меня есть довольно стандартный GridView с SqlDataSource в комплекте с SelectCommand / UpdateCommand / DeleteCommand.

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

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

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

В чем тут дело?

Пример кода:

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

Ответы [ 2 ]

1 голос
/ 15 декабря 2013

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

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

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;
}
1 голос
/ 07 февраля 2012

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

...