Question

J'ai un GridView ASP.NET qui utilise des colonnes de modèle et des contrôles utilisateur pour me permettre de construire dynamiquement la grille de données. Maintenant, j'implémente le gestionnaire d'événements pour insérer une ligne. Pour ce faire, je crée un tableau de valeurs par défaut et l'ajoute à la table de données qui agit en tant que source de données. Toutefois, lorsque mon événement OnLoad est déclenché à la publication, toutes les colonnes de mon modèle ne possèdent plus les contrôles utilisateur. Mon gridview finit par être tout blanc avec rien et sa colonne de boutons disparaît également (qui contient la ligne d'ajout, de suppression de ligne et les boutons d'enregistrement).

Mon événement d'ajout de ligne effectue simplement ceci:

    public void AddDataGridRow()
    {
        List<object> defRow = new List<object>();

        for (int i = 0; i < fieldNames.Count; i++)
        {
            defRow.Add(GetDefaultValueFromDBType(types[i]));   
        }

        dt.Rows.Add(defRow);
    }

Il est déclenché à partir d'un bouton d'un contrôle utilisateur implémenté comme ceci:

    protected void Button1_Click(object sender, EventArgs e)
    {
        ((Scoresheet)(this.Page)).AddDataGridRow();
    }

Mon événement on load effectue un tas de choses lors de la première exécution pour configurer GridView, mais je ne l'exécute plus à l'aide de la propriété IsPostBack pour l'indiquer.

    protected void Page_Load(object sender, EventArgs e)
    {
        if (!IsPostBack)
            Initialize();
    }

Quelqu'un sait-il pourquoi mes contrôles utilisateur disparaissent?

Était-ce utile?

La solution

Vous devez ajouter les contrôles à la grille à chaque chargement de page, pas seulement si c'est (! Postback)

Autres conseils

Avez-vous le EnableViewState = true sur les contrôles utilisateur et le GridView?

La méthode AddDataGridRow () est-elle appelée par Initialize ()? Vous avez essentiellement deux options:

  1. Liez la grille à chaque publication et n'utilisez pas viewstate (perte de performance)
  2. Ne liez la grille que la première fois (si (!! IsPostBack)) et assurez-vous que vos contrôles utilisateur conservent leur état de vue.

D'après votre code, il n'est pas clair si les contrôles utilisateur maintiennent viewstate et ce qu'ils contiennent. On ne sait même pas quel est l'ordre d'exécution des méthodes que vous avez montrées. Il n'y a pas de logique de liaison. Par conséquent, même si vous continuez à ajouter des lignes, la grille peut ne pas être liée. Veuillez élaborer un peu et afficher la page entière codewehind.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top