2010-11-10 25 views
0

J'ai une donnée de répéteur d'ASP .NET liée à un DataTable. Tout fonctionne bien où je peux ajouter des lignes à la DataTable & Bind() et le répéteur affichera gracieusement les données nouvellement liées et supprimer de la DataTable et Bind() et le répéteur va supprimer les données.Pourquoi la dernière rangée d'un répéteur n'est-elle pas supprimée?

Cependant, il existe un problème étrange lorsque des lignes sont supprimées, la dernière ligne permanente, même si elle est parfaitement supprimée du DataTable, est toujours affichée dans la page Web. C'est comme si pour la dernière rangée, le répéteur n'est pas lié aux données! Mais j'ai mis des points de rupture et analysé que l'élément est définitivement supprimé du DataTable et le Repeater1.DataBound() est également appelé. Si la page est actualisée, le dernier élément est également supprimé (comme il se doit). Je étais tellement désespéré que j'ai fait cela. Je sais que c'est stupide mais cela fait que le Répéteur conserve la dernière rangée quand les données sont liées. Alors, pourquoi la suppression de tout le reste fonctionne-t-elle parfaitement et la suppression de la dernière rangée est-elle défectueuse? Des idées?

Voici mon code de suppression.

protected void Repeater1_ItemCommand(object source, RepeaterCommandEventArgs e) 
    { 
     if (e.CommandName == "DeleteNumber") 
     { 

      string[] commandArgs = e.CommandArgument.ToString().Split(new char[] { ',' }); 

      DataRow toDelete = dtTelephoneNumbers.Rows.Find(new object[] { commandArgs[0], commandArgs[1] });     

      dtTelephoneNumbers.Rows.Remove(toDelete); 

      Debug.WriteLine("dtTelephoneNumbers count = " + dtTelephoneNumbers.Rows.Count); 

      if (dtTelephoneNumbers.Rows.Count == 0) 
       dtTelephoneNumbers.Rows.Clear(); 

      Repeater1.DataSource = dtTelephoneNumbers; 

      Repeater1.DataBind(); 
     } 
    } 

Quelques remarques supplémentaires qui pourraient être utiles: Mon datatable est une donnée statique. Si ce n'est pas le cas, les données seraient perdues lors d'un retour de message.

public static DataTable dtTelephoneNumbers = new DataTable(); 

Et tout se passe dans une UpdatePanel qui est à l'intérieur d'un Wizard Step.

MISE À JOUR 1: Les données sont locales seulement (pour maintenant). Je rassemble toutes les informations de l'utilisateur en utilisant un assistant et enfin l'ajouter à la base de données.

MISE À JOUR 2: Fonctionne très bien lorsqu'il est utilisé sans UpdatePanel. :(On dirait que le UpdatePanel a quelque chose à voir avec ça!

+1

Maintenir le DataTable en tant que membre statique est une idée terrible, une seule personne sera en mesure d'utiliser la page à la fois. ou la session de l'utilisateur à la place .. – batwad

+0

Thanx beaucoup batwad pour le conseiller :) J'aurais dû certainement considérer cela avant !!! : O –

Répondre

0

La seule façon que je pouvais gérer la situation était d'enlever le UpdatePanel à partir du code et il a bien fonctionné avec un post complet en arrière de la page!

0

Ne vous devez valider les modifications au DataTable avec dtTelephoneNUmbers.AcceptChanges()

+0

Essayé tout à l'heure, encore ça ne fonctionne pas :(Merci beaucoup pour l'effort. –