2010-08-17 16 views
1

我有一个ListView,它由类型为MyClass的泛型列表填充。我可以很容易地将这个列表中的数据绑定到ListView中。但是我在阅读相反方向的数据时遇到问题。 这是我的课:如何将ListView数据读入通用列表

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

我MyClass类型也泛型列表:

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

最后,我将数据绑定到ListView中这样说:

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

我的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> 

如何从ListView中将数据读入我的List列表中?

读的ListView数据为List泛型列表中的操作应点击按钮“的GetData”

回答

1

我不能对此进行测试后开始,但我相信这将工作:

using System.Linq; 

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

更新:正如评论中指出的那样,只有在您设置DataSource后才能正常工作。如果你想获得一个后回列表中,请尝试:

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

但是,这只会在回发之前起作用。海报可能希望在回发情况下将列表从ListView中取出。 – 2010-08-17 20:05:22

+0

不幸的是你的解决方案在我的项目中不起作用。数据正确绑定到我的ListView,但是当我尝试从ListView获取数据时(回发后),我什么都没有。我看到每行的DataItem属性都有空值,所以我的列表从ListView中获取所有行,但它们都是空值。 – pit 2010-08-19 08:21:58

0

您可以在一个ListViewItem得到了更新事件是这样的:

<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]; 
} 

我可以告诉你,如果你其他的方法更多地描述你需要获取数据的场景。