如何将ListView数据读入通用List

时间:2010-08-17 19:48:13

标签: asp.net data-binding listview datasource

我有一个ListView,它由MyClass类型的通用列表填充。我可以轻松地将此列表中的数据绑定到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中的数据读入我的列表列表?

单击按钮“GetData”

后,应开始将ListView数据读入List通用列表的操作

2 个答案:

答案 0 :(得分: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();

答案 1 :(得分: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];
}

如果您描述了获取数据所需的更多场景,我可以向您展示其他方法。