7
votes

GridView ne pas reculer correctement après la publication

J'ai une grille de données qui a un jeu de données pointant vers un objetDataSource. L'ObjectDataSource pointe vers une méthode qui renvoie une linq iquéry à l'aide du typename, de SelectMethod et de SelectCountMethIs propriétés du contrôle ObjectDataSource. Ce qui se passe, c'est que les données se chargent correctement. Toutefois, sur le post-plan, si je retire les lignes de la grilleView et essayez de rebondir à l'aide du réseau explicite de GridView.DataBind (), cela ne fonctionne pas. Je sais que Linq renvoie la bonne rangée et telle que j'ai appelé le comtéMethod et qu'il retourne la bonne rangée. Voici un exemple rapide: xxx pré>

J'ai essayé d'ajouter un bouton et d'ajouter le testGridView.databind (); méthode à cela. J'ai essayé de l'ajouter à l'événement Page_PRerender. Peu importe ce que j'essaye, cela ne fonctionne pas. P>

Comme une personne suggérée ci-dessous, j'ai essayé aussi de le déplacer vers page_load et non. Voici un exemple approximatif de mon code: P>

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();
}


0 commentaires

6 Réponses :


3
votes

idée stupide, mais avez-vous vérifié l'événement de la page de page avec le si (! Page.Ispospostback) ?

de ASP.NET Page Framework Aperçu :

page_load: Lors de cet événement, vous pouvez effectuer une série d'actions pour créer votre page ASP.NET pour la première fois ou réagir aux événements côté client résultant d'un poste. L'état de la page et du contrôle ont été restaurés avant cet événement. Utilisez la propriété ISPOSTBACK page pour vérifier si c'est la première fois que la page est en cours de traitement. Si c'est la première fois, effectuez une liaison de données. Aussi, lire et mettre à jour les propriétés de contrôle.

où comme

page_PRérender: L'événement du prélendeur est tiré juste avant que l'état d'affichage soit enregistré et que les contrôles sont rendus. Vous pouvez utiliser cet événement pour effectuer toutes les opérations de dernière minute sur vos commandes.

en effet

Parce que le framework de page est un modèle apatride a et déconnecté, chaque fois qu'un client demande une page .aspx, de nombreuses choses se produisent pendant le traitement de la page ...

Afin en effet, vous pouvez effectuer votre vérification avant que la visualisation soit définie plutôt qu'après la restauration de la visualisation. L'endroit le plus courant à vérifier pour si (! Page.ispospostback) est typiquement dans l'événement Page_Load.


1 commentaires

Ouais. Regardez ci-dessous le code exemple ci-dessus: "J'ai essayé d'ajouter un bouton et d'ajouter le testGridView.databind (); méthode à cela. J'ai essayé de l'ajouter à l'événement de page_PRerender. Peu importe ce que j'essaie, ça ne marche pas."



2
votes

Votre exemple montre xxx

mais avez-vous vraiment voulu dire xxx

(et est-ce le problème?) < / p>


0 commentaires

2
votes

J'ai eu un problème similaire avec une liaison dynamique d'une arborescence à un xmldatasource qui a changé la source XML sur chaque poteau. Réglage de l'entableCache à False Fixe. Avez-vous essayé cela? (Considérez l'objet LINQ2SQL déjà en caches, si votre iQuiserable utilise un objet LINQ2SQL, c'est-à-dire)

protected override void OnPreRender(EventArgs e)
{
   base.OnPreRender(e);
   BindData();
}


1 commentaires

Merci, mais je pense que je l'ai eu. Problème totalement indépendant.



0
votes

Après avoir examiné le code derrière un peu plus, j'ai trébuché sur les valeurs de propriété de la page étant stockées dans ViewState. Une fois que j'ai changé à la session, ils travaillent.


1 commentaires

Si vous expliquez que dans un peu plus de détails, je serai tenté de +1 votre solution. ;)



13
votes

Gridviews ne sont pas reliées sur le post-plan-retours, leurs lignes sont retirées de la vieilleté. Réinitialisation du jeu de données de GridView sur l'ID de source de données d'objet à la page Charger (ou init?) Entraînera le rebond de la grille.


2 commentaires

Très bonne explication, mais si le problème est le point de vue de la vue, la bonne façon de résoudre est d'ajouter Activerviewstate = "False" à votre GridView.


Pour être clair, le jeu de données de la grille doit être réglé sur NULL afin qu'il puisse être rétabli.



0
votes

J'ai eu une situation similaire dans laquelle les valeurs mises à jour d'une rangée n'ont pas montré que je n'ai pas essayé de savoir comment j'ai essayé de la base de données après la mise à jour.

Le GridView était lié à un ObjectDataSource et le problème est survenu après avoir commuté son objet de support à partir d'un fichier de données à un document cadre d'entité requête

Activer Viewstate < / Code> pour le GridView Est-ce que l'astuce m'a fait, donc: xxx


0 commentaires