2 Stimmen

Panel DefaultButton und GridView-Steuerung mit EditItemTemplate

Ich habe ein GridView-Steuerelement auf einer Seite mit einem Panel, das eine DefaultButton hat. Ich versuche, die Schaltfläche "Aktualisieren" mit der Eingabetaste zu aktivieren, wenn ein Benutzer eine Zeile bearbeitet. Mit der Maus funktioniert es gut. Wenn ich auf "Aktualisieren" klicke, kehrt die Zeile in den Ansichtsmodus zurück und der aktualisierte Wert wird angezeigt.

Wenn die GridView im Panel ist, wird die Standardschaltfläche des Panels (die die Seite sendet) ausgelöst, wenn ich die Eingabetaste drücke, bevor der RowCommand überhaupt verarbeitet wird, und die Aktualisierung geht verloren.

Wenn die GridView nicht im Panel ist, wird eine andere scheinbar zufällige Schaltfläche im Panel ausgelöst, aber nicht die Schaltfläche "Update" im EditItemTemplate meiner Zeile. Insbesondere gibt es einen CalendarExtender auf der Seite, und die Popup-Schaltfläche des Extenders wird ausgelöst. Ganz und gar nicht das, was ich will.

Wie kann ich erreichen, dass sich dies korrekt verhält?

Hier ist die Struktur meines Markup-Codes:

<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 %>" />

0voto

jWoose Punkte 167

Versuchen Sie das mal. Dies ist nur eine Vermutung.

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

Wahrscheinlich müssen Sie in jede der Spalten im GridView ein Panel einfügen. Das Einzige, was ein Problem sein könnte, ist, dass das Panel die Schaltfläche in der GridViewRow "finden" kann.

Haben Sie es auch schon versucht?

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

0 Stimmen

Die Art und Weise, wie Sie es zeigen, funktioniert nicht, weil das Panel in der GridView nicht auf die Standardschaltfläche per ID verweisen kann. Ich müsste dies in der onrowdatabound-Ereignis zu behandeln - zu viel Aufwand. Mein Workaround ist es, die Seite über den Skriptmanager einfach neu zu laden.

0 Stimmen

Ich dachte mir, dass dies der Fall sein würde. Ich dachte nur, ich würde es dort hinauswerfen.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X