2016-03-28 1 views
0

J'ai regard gridview comme celui-ci enter image description hereliste de transfert des données de gridview à une autre page

Tout utilisateur temps, cliquez sur le bouton Bookmark, je veux envoyer le ProgramID de cette ligne à la liste et le transférer vers une autre page en utilisant Session.But mon gridview transférer tout le programID, même si cet ID existait dans la liste. Qu'est-ce que je fais mal? Voici le code pour le bouton Bookmark:

protected void btnSelect_Click(object sender, EventArgs e) 
{ 


    Button b = (Button)sender;  
    GridViewRow row = (GridViewRow)b.NamingContainer; 
    var ProgramID = row.FindControl("lblProgramID") as Label; 
    string stringProgramID = ProgramID.Text;  
    List<string> bookmarkPrograms = (List<string>)Session["BookmarkProgram"]; 
    if (bookmarkPrograms == null) 
     bookmarkPrograms = new List<string>(); 
    bookmarkPrograms.Add(stringProgramID); 
    Session["BookmarkProgram"] = bookmarkPrograms; 

} 

Et voici le code pour le gridview dans une autre page:

protected void Page_Load(object sender, EventArgs e) 
{ 
    List<string> bookMarkPrograms = (List<string>)Session["BookmarkProgram"]; 

    GridView1.DataSource = bookMarkPrograms; 
    GridView1.DataBind(); 
} 

Répondre

0

Pas vraiment sûr du flux d'événements. Mais si je vous comprends bien, vous voulez que la liste soit constamment ajoutée. Vous le faites

Session["BookmarkProgram"] = bookmarkPrograms; 

Cela signifie que cette variable est cette valeur spécifique. Mais alors si vous le faites à nouveau, cela se produit alors:

List<string> bookmarkPrograms = new List<string>(); 

Vous effacez ainsi l'ancien. Faire une méthode pour obtenir la liste jusqu'à présent, si est vide ou vide puis en créer un nouveau. Sinon, ne le faites pas ou vous videz ce que vous avez jusqu'ici.

Mise à jour: Vous pouvez essayer:

List<string> bookmarkPrograms = (List<string>)Session["BookmarkProgram"] == null ? new List<string>():(List<string>)Session["BookmarkProgram"]; 

Pour vérifier si la valeur existe déjà alors:

if (bookmarkPrograms.Any(c=>c.Equals(ProgramID)){//don't add} 

L'expression à l'intérieur retourne un booléen qui est vrai quand une valeur dans la liste égale ce que vous comparez. Cet exemple suppose que ProgramID est une chaîne. Comme il s'agit d'une chaîne, vous pouvez ajouter trim() et tolower() mais cela ne semble pas être le cas dans ce cas, un espace vide pourrait être ajouté accidentellement ... ou ce boîtier pourrait affecter. Puisque ceci renvoie vrai pour quand il existe, ajoutez un ! devant lui ainsi il ajoute à la liste quand il n'existe pas.

+0

Ouais, tu as raison. Je dois ajouter quelque chose comme: if (bookmarkPrograms == null) bookmarkPrograms = nouveau Liste (); dans mon code pour créer une nouvelle liste à la première fois et continuez d'ajouter plus de chaîne s'il s'agit de la deuxième fois. – Kranatos

+0

J'ai mis à jour avec une autre suggestion pour faire cette logique dans une ligne – Fenrir88

+0

Merci pour votre réponse. Je viens de comprendre et mis à jour mon code dans # 1 post.Now transfère tous programID chaque fois que l'utilisateur clique sur ce bouton, mais le problème est qu'il continue à ajouter la chaîne dans la liste, même si cette programID existait dans la liste already.Do vous savez comment vérifier la valeur dans la liste ?? – Kranatos

0

Je veux juste poster la solution complète pour quelqu'un en ont besoin dans l'avenir:

protected void btnBookmark_Click(object sender, EventArgs e) 
{ 


    Button b = (Button)sender;  
    GridViewRow row = (GridViewRow)b.NamingContainer; 
    var ProgramID = row.FindControl("lblProgramID") as Label; 
    string stringProgramID = ProgramID.Text;  
    List<string> bookmarkPrograms = (List<string>)Session["BookmarkProgram"]; 
    if (bookmarkPrograms == null) 
     bookmarkPrograms = new List<string>(); 


    if (bookmarkPrograms.Any(c => c.Equals(stringProgramID))) 
    { 
     FormMessage.Text = "You bookmarked this program already"; 
    } 
    else 
    { 
     bookmarkPrograms.Add(stringProgramID); 
    } 
    Session["BookmarkProgram"] = bookmarkPrograms; 




}