GridView pas de Reliaison Correctement Après la Publication
J'ai un GridView qui a un DataSourceID pointant vers un ObjectDataSource. L'ObjectDataSource points à une méthode qui retourne une LINQ IQueryable en utilisant la propriété TypeName, SelectMethod, et SelectCountMethod propriétés du contrôle ObjectDataSource. Ce qui se passe est que les données de charge correctement dès le départ. Cependant, sur la publication, si je supprime les lignes de la GridView et d'essayer de les relier à l'aide de l'explicite GridView.DataBind(), ça ne fonctionne pas. Je sais LINQ est de retour le bon nombre de lignes et de tels parce que j'ai appelé le countmethod et il renvoie le bon nombre de lignes. Voici un exemple rapide:
<asp:GridView ID="TestGridView" runat="server" PageSize="20"
AutoGenerateColumns="false" AllowPaging="true"
AllowSorting="false" DataSourceID="TestDataSource">
<Columns>
...
</Columns>
</asp:GridView>
<asp:ObjectDataSource ID="TestDataSource" runat="server"
EnablePaging="true" SelectCountMethod="GetDetailCount"
SelectMethod="GetDetails" TypeName="MyApp.PageClass" />
J'ai essayé d'ajouter un bouton et l'ajout de la TestGridView.DataBind(); la méthode. J'ai essayé de l'ajouter à l'événement Page_PreRender. Peu importe ce que j'essaie, ça ne marche pas.
Comme quelqu'un l'a suggéré ci-dessous, j'ai essayé de le déplacer vers Page_Load ainsi, et sans aller. Voici un exemple grossier de mon code:
protected void Page_Load(object sender, EventArgs e)
{
if (!Page.IsPostBack)
{
//Set "initial" query parameters, then ...
BindData();
}
}
private void BindData()
{
//EDITED: Removed the code below since I'm not looking to delete the
// rows from the database, but rather get the GridView to rebind
// which its not.
////Remove all current rows from the GridView
//int colCount = TestGridView.Rows.Count;
//for (int x = 1; x <= colCount; x++)
//{
// TestGridView.DeleteRow(x);
//}
//Bind GridView to the ObjectDataSource
TestGridView.DataBind();
}
protected void RegenerateImageButton_Click(object sender, ImageClickEventArgs e)
{
//Set "updated" query parameters, then ...
BindData();
}
OriginalL'auteur Jason N. Gaylord | 2009-11-18
Vous devez vous connecter pour publier un commentaire.
Gridviews ne sont pas re-lié sur la publication, leurs lignes sont tiré vers l'arrière à partir de l'état d'affichage. La réinitialisation de la gridview est DatasourceID à l'objet source de données ID au chargement de la page (ou init?) sera la cause de la gridview pour être reprise.
Très bonne explication, mais si le problème est le ViewState, la bonne façon de le résoudre est d'ajouter EnableViewState="false" à votre GridView.
Pour être clair de la grille DataSourceID a soit défini comme null si il peut être re-lié.
OriginalL'auteur Sprintstar
Idée stupide, mais avez-vous vérifié le chargement de la page de l'événement avec la
if(!Page.IsPostBack)
?De ASP.NET Cadre de Page de Présentation :
Où, comme
En effet
Donc en effet, vous pourriez faire votre vérification avant le viewstate est, plutôt qu'après le viewstate a été restauré. L'endroit le plus commun pour vérifier
if(!Page.IsPostBack)
est généralement dans l'événement Page_Load.Ouais donc, même dans l'événement Page_Load il ne fonctionne pas.
Code mis à jour pour vous montrer ce que je fais.
OriginalL'auteur Chris
Votre exemple montre
mais avez-vous vraiment dire
(et est-ce le problème?)
OriginalL'auteur Jeff Widmer
J'ai eu un problème similaire avec la dynamique liaison d'un TreeView à un XmlDataSource qui a changé le source xml de chaque publication. Réglage EnableCache false fixe. Avez-vous essayé? (Tenir compte de la Linq2sql objet déjà caches, si votre IQueryable est à l'aide d'un Linq2sql objet, qui est)
si cela ne fonctionne pas, essayez ceci, couplé avec le dessus:
Merci, mais je pense que je l'ai eu. Totalement sans rapport avec la question.
OriginalL'auteur Jim Schubert
Après avoir regardé le code derrière un peu plus, je suis tombé sur la page de propriété de valeurs stockées dans ViewState. Une fois que je l'ai changé au cours de la Session, ils travaillent.
OriginalL'auteur Jason N. Gaylord
J'ai eu une situation similaire, dans lequel la mise à jour des valeurs d'une ligne à ne pas montrer n'importe comment, j'ai essayé de databind après la mise à jour.
La
GridView
était lié à unObjectDataSource
, et le problème est survenu après que j'ai changé de son la sauvegarde de l'objet à partir d'unDataSet
à unEntity Framework
requêtePermettant
ViewState
pour laGridView
a fait le tour pour moi, donc:OriginalL'auteur Torben Frandsen