2010-11-22 7 views
1

J'ai créé une application qui récupère les blagues d'une base de données au démarrage et affiche la première blague à l'écran. Maintenant, lorsque nous cliquons sur le bouton Suivant, il devrait montrer la deuxième blague. Quand je prends les blagues pour la première fois, je les mets dans une datatable globalement déclarée. Pour montrer la première blague que je fais:Gérer les données après la publication

Title.Value = dt.Rows[0]["joke_title"].ToString(); 
Detail.Value = dt.Rows[0]["joke_content"].ToString(); 

Maintenant, quand je frappe le bouton Suivant Je suis en cours d'exécution de ces commandes:

Title.Value = dt.Rows[0+1]["joke_title"].ToString(); 
Detail.Value = dt.Rows[0+1]["joke_content"].ToString(); 

mais quand le bouton Suivant est frappé, les messages de page en arrière et Je perds les valeurs dans datatable. Comment résoudre l'erreur sans perdre les données dans le datatable?

+0

Qu'entendez-vous exactement par "un datable déclaré globalement"? – Carson63000

Répondre

3
i put them in a globally declared datatable 

Où cette déclaration peut-elle être déclarée? Dans votre classe de page? Pouvez-vous nous montrer ce code? S'il se trouve dans votre classe de pages, il ne sera pas conservé entre les publications. La classe de page est créée à nouveau pour chaque requête et ne conserve aucun état. Si vous souhaitez conserver l'état entre les publications, vous devez utiliser un mécanisme de gestion d'état tel que ViewState/Session afin de pouvoir conserver les anciennes valeurs de votre datatable. Lorsqu'une page est rendue, tous les objets qui ont été créés dans la classe de cette page sont éliminés.

+0

Comment puis-je mettre datatable dans la variable de session –

+2

Session ["SomeUniqueKey"] = datatable; – InSane

1

Maintenant, quand un retour se produit, la table de données ne contient aucune donnée. Pour conserver les données à travers les publications, vous devrez le stocker quelque part (comme dit InSane). Si la table de données contient très peu de lignes, le meilleur moyen serait d'utiliser l'objet Session.

Une fois que vous récupérez les lignes de base de données, stocker la table de données en session:

Session["myTable"] = dt; 

Au début du gestionnaire d'événements PageLoad, vérifier si son postback puis, lire la table de données de la session à nouveau:

if(this.IsPostBack == true) 
{ 
    DataTable dt = (DataTable)Session["myTable"]; 
} 
else 
{ 
    // fetch the records from database 
} 

Notez que la datatable ne sera pas disponible entre les sessions.

0

Vous pouvez éventuellement résoudre ceci avec une information statique. Cependant, le datatable sera alors statique sur tous les threads.

Questions connexes