Панель DefaultButton и элемент управления GridView с EditItemTemplate - PullRequest
2 голосов
/ 15 февраля 2010

У меня есть элемент управления GridView на странице с панелью DefaultButton. Я пытаюсь заставить кнопку «Обновить» работать с клавишей Enter, когда пользователь редактирует строку. Он отлично работает с мышью. Когда я нажимаю «Обновить», строка возвращается в режим просмотра и отображается обновленное значение.

Когда GridView находится в Panel, кнопка Panel по умолчанию (которая отправляет страницу) срабатывает, когда я нажимаю Enter, еще до того, как RowCommand будет обработан, а обновление потеряно.

Когда GridView не находится на панели, запускается какая-то другая, казалось бы, случайная кнопка на панели, но не кнопка «Обновить» в EditItemTemplate моей строки. В частности, на странице есть CalendarExtender, и всплывающая кнопка экстендера срабатывает. Совершенно не то, что я хочу.

Как мне заставить это вести себя правильно?

Вот структура моего кода разметки:

<asp:Panel ID="Panel1" runat="server" DefaultButton="btnSubmit">

    <!--Form with controls-->

    <asp:ImageButton ID="btnWSPODateCal" runat="server" />
    <!--this button fires when I press enter while editing a grid row:-->
    <ajaxToolkit:CalendarExtender ID="CalendarExtender1" runat="server" 
    TargetControlID="tbPODate" PopupButtonID="btnWSPODateCal" />

    <!--more controls-->

    <div class="button_row">
        <asp:ImageButton ID="btnCancel" runat="server" />
        <asp:ImageButton ID="btnSubmit" OnClick="btnSubmit_Click" />
    </div>
</asp:Panel>
<asp:GridView runat="server">
    <Columns>
        <asp:TemplateField>
            <EditItemTemplate>
                <asp:ImageButton CommandName="MyUpdate" 
                    ID="btnSubmitRow" runat="server"  
                    CommandArgument="<%# ((GridViewRow) Container).DataItemIndex %>" /> 

Ответы [ 2 ]

2 голосов
/ 05 апреля 2011

Я думаю, что нашел очень простой обходной путь для этого. Я разместил свой ответ на похожий вопрос здесь: Кнопка «Принудительное использование по умолчанию» в виде сетки

0 голосов
/ 16 февраля 2010

Дайте это попробовать. Это всего лишь предположение.

<asp:GridView runat="server">
<Columns>
    <asp:TemplateField>
        <EditItemTemplate>
            <asp:Panel ID="Panel2" DefaultButton="btnSubmitRow" runat="server">
                <asp:ImageButton CommandName="MyUpdate" 
                    ID="btnSubmitRow" runat="server"  
                    CommandArgument="<%# ((GridViewRow) Container).DataItemIndex %>" />
            </asp:Panel>  

Возможно, вам придется поместить панель в каждый из столбцов GridView. Единственная проблема, которая может быть проблемой, это то, что Panel может «найти» кнопку внутри GridViewRow.

Тоже пробовал?

<asp:Panel ID="Panel2" DefaultButton="btnSubmitRow" runat="server">
    <asp:GridView runat="server">
        <Columns>
        <asp:TemplateField>
            <EditItemTemplate>
                <asp:ImageButton CommandName="MyUpdate" 
                    ID="btnSubmitRow" runat="server"  
                    CommandArgument="<%# ((GridViewRow) Container).DataItemIndex %>" />
...
    </asp:GridView>
</asp:Panel>
...