2010-08-17 17 views
1

J'ai un ListView qui est rempli par une liste générique de type MyClass. Je peux facilement lier des données de cette liste dans ListView. Mais j'ai des problèmes avec la lecture des données dans la direction opposée. Ceci est ma classe:Comment lire les données ListView en liste générique

public class MyClass 
{ 
    public int id { get; set; } 
    public string name { get; set; } 
} 

J'ai aussi la liste générique de type MyClass:

List<MyTest> list = new List<MyTest>(); 

Enfin je lie les données à LISTVIEW cette façon:

ListView1.DataSource = list; 
ListView1.DataBind(); 

Mon modèle ListView:

<asp:ListView runat="server" ID="ListView1"> 
    <LayoutTemplate> 
    <table runat="server" id="table1" > 
     <tr runat="server" id="itemPlaceholder" ></tr> 
    </table> 
    </LayoutTemplate> 
    <ItemTemplate> 
    <tr id="tr" runat="server"> 
     <td id="td1" runat="server"> 
      <asp:TextBox ID="tb1" runat="server" Text='<%#Eval("id") %>' /> 
     </td> 
     <td id="td2" runat="server"> 
      <asp:TextBox ID="tb2" runat="server" Text='<%#Eval("name") %>' /> 
     </td> 
    </tr> 
    </ItemTemplate> 

Comment lire les données de ListView dans ma liste?

L'opération de lecture des données ListView dans la liste liste générique devrait commencer après avoir cliqué sur le bouton « GetData »

Répondre

1

Je ne peux pas tester, mais je crois que cela va fonctionner:

using System.Linq; 

List<MyClass> list = ListView1.DataSource.Cast<MyClass>().ToList(); 

MISE À JOUR: Comme indiqué dans les commentaires, cela ne fonctionne que lorsque vous avez défini DataSource. Si vous souhaitez obtenir la liste sur un post-retour, essayez:

List<MyClass> list = ListView1.Items 
           .Select(lvi=>lvi.DataItem as MyClass) 
           .ToList(); 
+0

Cependant, cela ne fonctionnera que avant un retour. L'affiche peut vouloir extraire la liste de ListView dans une situation de retour. –

+0

Malheureusement, votre solution ne fonctionne pas dans mon projet. Les données se lient correctement à ma ListView, mais lorsque j'essaie d'obtenir des données sous forme de ListView (après la publication), je n'ai rien. Je vois que la propriété DataItem pour chaque ligne a une valeur nulle, donc ma liste obtient toutes les lignes de ListView, mais elles ont toutes des valeurs nulles. – pit

0

Vous pouvez obtenir à la ListViewItem dans un événement de mise à jour comme celui-ci:

<asp:ListView ID="ListView1" runat="server" OnItemUpdating="ListView1_ItemUpdating"></asp:ListView> 

void ListView1_ItemUpdating(Object sender, ListViewUpdateEventArgs e) 
{ 
    ListViewItem item = ListView1.Items[e.ItemIndex]; 

    // I think you should also be able to do if you are indeed binding with the type List<MyTest> 
    List<MyTest> item = (List<MyTest>)ListView1.Items[e.ItemIndex]; 
} 

Je peux vous montrer d'autres façons si vous Décrire plus de ce que le scénario est que vous avez besoin pour obtenir les données.