2010-01-06 7 views
0

Je suis assez nouveau dans le combo C# avec ASP.NET, donc je vais essayer d'être aussi clair que possible avec mon explication.Les cellules dans gridview perdent les contrôles sur l'événement RowUpdating

J'utilise un GridView pour afficher certaines colonnes et lignes qui résident dans une base de données. Cela fonctionne excellent. Parce que je voulais ajouter dynamiquement des colonnes à partir d'une liste de noms. Disons que nous avons une liste avec 5 noms, puis cela crée dynamiquement une colonne pour chaque nom dans GridView. Voici quelques code pour afficher ce que je fais:

protected void Page_Load(object sender, EventArgs e) 
{ 
    if (!IsPostBack) 
    { 
     //Create columns for each student 
     List<Student> allStudents = new Eetlijst.Business.Students().GetAll(); 
     allStudents.Reverse(); 

     foreach (Student student in allStudents) 
     { 
      StudentBoundField studentField = new StudentBoundField(); 
      studentField.HeaderText = student.Naam; 
      MaaltijdGrid.Columns.Insert(4, studentField); 
     } 

     ShowDataInGrid(DateTime.Now.Month, DateTime.Now.Year); 

Il y a d'autres choses là-dedans qui n'a pas d'importance. Le ShowDataInGrid ressemble à ce qui suit:

public void ShowDataInGrid(int maand, int jaar) 
{ 
    List<Maaltijd> allMaaltijden = new Eetlijst.Business.Maaltijden().GetByMonthAndYear(maand, jaar); 
    Session.Contents.Add("maaltijden", allMaaltijden); 

    MaaltijdGrid.DataSource = allMaaltijden; 
    MaaltijdGrid.DataBind(); 
} 

Comment créer les colonnes dynamiques pour chaque ligne? Je les crée avec un événement DataBound. Ainsi, lorsque les bases de données GridView, les colonnes sont remplies de données. Il y a aussi une vérification à l'intérieur pour voir si la ligne est en mode édition ou non. Donc quand je clique sur le bouton d'édition à côté de la ligne, la ligne passe parfaitement en mode édition. Le code que j'ai créé ajoute un contrôle TextBox à la cellule. Lorsque je remplis une valeur et que j'appuie sur le bouton Mettre à jour, il ne trouve plus de contrôles et je ne peux donc pas obtenir la valeur que j'ai saisie. Le contrôle est toujours là dans le DataBound quand je mets un point de rupture après. Mais dès que je clique sur le bouton Mettre à jour, tous les contrôles des cellules ont disparu. J'ai cherché sur Internet et tout ce que j'ai trouvé est qu'il a quelque chose à voir avec l'application de lancer une publication avant qu'il n'atteigne la méthode RowUpdating. Alors, comment puis-je laisser les commandes que j'ai ajoutées à la cellule quand elle est en mode d'édition?

Si quelqu'un a besoin du code qui se trouve dans l'événement DataBound, je le posterai.

Répondre

1

Les contrôles ou colonnes dynamiques doivent être recréés à chaque chargement de page, en raison du fonctionnement des contrôles. Les contrôles dynamiques ne sont pas conservés, vous devez donc les recharger à chaque publication de page. cependant, viewstate sera conservé pour ces contrôles.

HTH.

0

Appelez cette fonction ShowDataInGrid (DateTime.Now.Month, DateTime.Now.Year); dans votre

événement Page_Init.

Vous obtiendrez le contrôle et la valeur.

Questions connexes