我有一个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通用列表的操作答案 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];
}
如果您描述了获取数据所需的更多场景,我可以向您展示其他方法。