GridView à l'intérieur de UpdatePanel pas rafraîchissantes sans appel de code derrière
Je suis nouvelle ASP.Net et je suis confus quant à la façon d'un contrôle GridView fonctionne à l'intérieur d'un UpdatePanel.
J'ai lu la documentation ici qui stipule que "Par défaut, toute publication de contrôle à l'intérieur d'un contrôle UpdatePanel provoque une publication asynchrone et actualise le contenu du panneau." pourtant, lorsque je place une GridView et un Bouton de contrôle à l'intérieur de l'élément, à moins que le bouton a défini un événement OnClick pour faire grid1.DataBind();, la grille ne permet PAS d'actualiser ses données. J'ai également essayé en spécifiant une AsyncPostBackTrigger sur l'UpdatePanel pour le Bouton, mais encore une fois j'ai eu le même comportement. Maintenant, j'ai remarqué que l'UpdatePanel NE actualiser lorsque j'appuie sur un Bouton, sans événement OnClick, cependant le contrôle GridView à l'intérieur, il ne le fait pas. S'il vous plaît pouvez-vous nous éclairer sur ce point? Dois-je toujours avoir cet appel à du code derrière explicitement l'actualiser?
Ma chaîne de connexion dans le Web.Config
<connectionStrings>
<add name="myConnectionString"
connectionString="Data Source=XXXXX;Initial Catalog=XXXX;Persist Security Info=True;User ID=XXXXX;Password=XXXXX"
providerName="System.Data.SqlClient" />
</connectionStrings>
Mon Défaut.aspx
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Default.aspx.cs" Inherits="EmptyWebApp.Default" %>
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server"> <title></title> </head>
<body>
<form id="form1" runat="server">
<div>
<asp:ScriptManager ID="ScriptManager" runat="server" EnablePartialRendering="true" />
<asp:UpdatePanel ID="UpdatePanel1" runat="server" UpdateMode="Conditional">
<ContentTemplate>
<asp:GridView ID="grid1" runat="server" DataSourceID="SQLDevelopment" AutoGenerateColumns="False">
<Columns>
<asp:BoundField DataField="UserID" HeaderText="UserID" SortExpression="UserID" />
<asp:BoundField DataField="Date" HeaderText="Date" SortExpression="Date" />
</Columns>
</asp:GridView>
<asp:SqlDataSource ID="SQLDevelopment" runat="server"
ConnectionString="<%$ ConnectionStrings:myConnectionString %>"
SelectCommand="SELECT * FROM [TestTableA]"></asp:SqlDataSource>
<%=DateTime.Now.ToString()%> <br />
<asp:Button ID="btnRefresh" runat="server" Text="Refresh without C# event"/>
<asp:Button ID="btnRefresh1" runat="server" Text="Refresh with C# event" OnClick="btnRefresh1_Click"/>
</ContentTemplate>
</asp:UpdatePanel>
</div>
</form></body><html>
Mon Code derrière pour btnRefresh1
protected void btnRefresh1_Click(object sender, EventArgs e)
{
grid1.DataBind();
}
MERCI
Ashwini, ma question ne concerne PAS l'aide de code-behind de l'actualisation de la Grille dans l'UpdatePanel; je n'ai pas de problème de l'actualisation de la grille avec le code derrière, c'est à dire l'appel de sa méthode DataBind. Mais merci quand même.
OriginalL'auteur leoinlios | 2012-11-30
Vous devez vous connecter pour publier un commentaire.
Il n'y a rien de mal avec la mise à jour du panneau de code - problème est que la grille ne sera pas de la demande de nouveau les données à partir de sources de données sur l'après-back. L'objectif est plutôt d'usage de la vue de l'état de charge, les données correspondantes.
Toutefois, appel à
DataBind
force de grille-vue d'obtenir les données de la source de données à nouveau, ainsi, il rafraîchissante (ou vous pouvez essayer de désactiver l'affichage de l'état pour l'affichage de la grille) - voir la documentation pour la méthode - les commentaires dans l'exemple de code dit la même chose.Dans le cas, vous ne voulez pas ajouter
DataBind
appel dans le bouton actualiser, vous pouvez faire la même chose dansPage_Load
- ce qui l'actualisation de la grille sur chaque post-dos (quelle que soit la commande que lui a causé).lorsque la page se charge en premier temps,
DataBind
serait invoquée automatiquement - voir la documentation pour DataBind, citation de doc: [[ La méthode DataBind est appelée automatiquement si la propriété DataSourceID du contrôle GridView se réfère à une source de données valide de contrôle.]]. Dans l'après-back scénario, les données sont chargées à partir de l' <b>affichage de l'état</b>.OK Vinay, je vous Remercie.
OriginalL'auteur VinayC
Utilisation .DataBind() dans le script de votre gridview (c'est à dire gridview1.DataBind();). C'est juste relie les données de la gridview qui était déjà installée dans votre source de données.
Voir MSDN pour plus d'info.
OriginalL'auteur ScottM
Ou de permettre le ScriptManager à faire tout ça en une seule ligne de code!
Remplacer le ButtonSubmit avec votre propre contrôle.
OriginalL'auteur Fandango68