J'ai 2 contrôles utilisateur sur ma page. Un est utilisé pour la recherche, et l'autre est utilisé pour l'édition (avec quelques autres choses).Comment configurer un GridView CommandField pour déclencher la mise à jour de page complète dans UpdatePanel
Le contrôle utilisateur qui fournit la fonctionnalité de recherche utilise GridView pour afficher les résultats de la recherche. Cette GridView a un CommandField utilisé pour l'édition (showEditButton = "true").
Je voudrais placer le GridView dans un UpdatePanel afin que la pagination à travers les résultats de recherche sera lisse. Le fait est que lorsque l'utilisateur clique sur le lien Edit (le champ CommandField), j'ai besoin de préformer une publication en pleine page afin que le contrôle de l'utilisateur de recherche puisse être masqué et que le contrôle utilisateur d'édition puisse être affiché.
Edit: la raison pour laquelle je dois faire une publication pleine page est parce que le contrôle utilisateur de modifier est en dehors de l'UpdatePanel que mon GridView est dans Il est non seulement en dehors de la UpdatePanel, mais il est dans un utilisateur complètement différent. contrôle.
Je ne sais pas comment ajouter le CommandField en tant que déclencheur de publication sur une page entière au UpdatePanel. Le PostBackTrigger (qui est utilisé pour indiquer que les contrôles provoquent une publication en pleine page) prend un ControlID en tant que paramètre; Cependant, le CommandButton n'a pas d'ID ... et vous pouvez voir pourquoi j'ai un problème avec ça.
Mise à jour sur quoi d'autre j'ai essayé de résoudre le problème: J'ai pris une nouvelle approche pour résoudre le problème.
Dans ma nouvelle approche, j'ai utilisé un TemplateField au lieu d'un CommandField. J'ai placé un contrôle LinkButton dans le TemplateField et lui ai donné un nom. Pendant l'événement RowDataBound de GridView, j'ai récupéré le contrôle LinkButton et l'ai ajouté aux Triggers du UpdatePanel.
C'est le balisage ASP pour le UpdatePanel et le GridView
<asp:UpdatePanel ID="SearchResultsUpdateSection" runat="server">
<ContentTemplate>
<asp:GridView ID="SearchResultsGrid" runat="server"
AllowPaging="true"
AutoGenerateColumns="false">
<Columns>
<asp:TemplateField>
<HeaderTemplate></HeaderTemplate>
<ItemTemplate>
<asp:LinkButton ID="Edit" runat="server" Text="Edit"></asp:LinkButton>
</ItemTemplate>
</asp:TemplateField>
<asp:BoundField ......
</Columns>
</asp:GridView>
</ContentTemplate>
</asp:UpdatePanel>
Dans mon code VB.NET. J'ai implémenté une fonction qui gère l'événement RowDataBound de GridView. Dans cette méthode, je trouve le LinkButton pour la ligne liée, créer un PostBackTrigger pour le LinkButton, et l'ajouter aux Triggers du UpdatePanel.
Cela signifie qu'un PostBackTrigger est créé pour chaque LinkButton "edit" dans le GridView
Edit: cela n'a pas créé un PostBackTrigger pour chaque LinkButton "edit" car l'ID est le même pour tous les LinkButtons dans le GridView. Au lieu de gérer l'événement RowEditing de GridView à des fins d'édition, j'utilise plutôt RowCommand.
Private Sub SearchResultsGrid_RowCommand(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.GridViewCommandEventArgs) Handles SearchResultsGrid.RowCommand
RaiseEvent EditRecord(Me, New EventArgs())
End Sub
Cette nouvelle approche ne fonctionne pas du tout parce que tous les linkbuttons dans les GridView ont le même ID. Après avoir lu l'article MSDN sur le UpdatePanel.Triggers Property, j'ai l'impression que les déclencheurs ne peuvent être définis que de façon déclarative. Cela signifierait que tout ce que j'ai fait dans le code VB ne fonctionnerait pas.
Tout conseil serait grandement apprécié.
Merci,
-Frinny
Pourquoi avez-vous besoin d'une publication de page pour la visibilité, sauf si vous recevez des informations du serveur à des contrôles spécifiques? GridView dans UpdatePanel dont le mode de mise à jour défini sur Toujours (par défaut) peut actualiser n'importe quoi dans les options de commande. Je n'ai pas compris pourquoi vous insistez pour une publication? – Myra
J'insiste sur une publication en pleine page parce que le contrôle utilisateur utilisé pour l'édition est en dehors du UpdatePanel dans lequel se trouve GridView. – Frinavale
En fait, ce n'est même pas sous le même contrôle. Le UpdatePanel est dans le contrôle utilisateur "search" et le contrôle utilisateur "edit" ne fait pas partie du contrôle utilisateur "search" de l'utilisateur. – Frinavale