2010-02-15 17 views
2

J'ai un contrôle GridView sur une page avec un Panel qui a un DefaultButton. J'essaye d'obtenir le bouton de «mise à jour» pour fonctionner avec la touche d'entrée quand un utilisateur édite une rangée. Cela fonctionne très bien avec la souris. Lorsque je clique sur "Mettre à jour", la ligne revient en mode Affichage et la valeur mise à jour est affichée. Lorsque le GridView est dans le Panel, le bouton par défaut du Panel (qui soumet la page) se déclenche lorsque j'appuie sur Entrée, avant même que RowCommand ne soit manipulé, et la mise à jour est perdue. Lorsque le GridView n'est pas dans le Panel, un autre bouton apparemment aléatoire dans le Panel se déclenche, mais pas le bouton "Update" dans le EditItemTemplate de ma ligne. Plus précisément, il y a un CalendarExtender sur la page, et le bouton popup de l'extension se déclenche. Totalement pas ce que je veux.Contrôle DefaultButton et GridView avec EditItemTemplate

Comment puis-je obtenir un comportement correct?

Voici la structure de mon code de balisage:

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

Répondre

0

pour cette solution. C'est juste une supposition.

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

Vous devrez probablement placer un panneau dans chacune des colonnes de GridView. La seule chose qui pourrait être un problème est que le Panel puisse "trouver" le bouton dans le GridViewRow.

Avez-vous essayé?

<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

La façon dont vous l'affichez ne fonctionne pas, car le panneau dans GridView ne peut pas référencer le bouton par défaut par ID. Je devrais gérer cela dans l'événement onrowdatabound - trop de tracas. Ma solution consiste à simplement rafraîchir la page via scriptmanager. – cdonner

+0

Je pensais que ce serait le cas. Je pensais juste que je le lancerais là-bas. – jWoose