C# 如何获取listView中的数据项?
如何在C# 如何获取listView中的数据项?,c#,asp.net,listview,C#,Asp.net,Listview,如何在项目编辑事件中的列表视图中获取数据项??我原以为它的工作原理类似于中继器,但我不知所措。我需要它来做这样的事情: protected void lvUsers_ItemEditing(object sender, ListViewEditEventArgs e) { var item = lvUsers.Items[e.NewEditIndex]; var id = DataBinder.Eval(item.DataItem,
项目编辑事件中的列表视图中获取数据项??我原以为它的工作原理类似于中继器,但我不知所措。我需要它来做这样的事情:
protected void lvUsers_ItemEditing(object sender, ListViewEditEventArgs e)
{
var item = lvUsers.Items[e.NewEditIndex];
var id = DataBinder.Eval(item.DataItem, "ID").ToString();
var name = DataBinder.Eval(item.DataItem, "Name").ToString();
}
我做错了什么<代码>项。数据项始终为空。谢谢
我发现我可以使用以下方法从datakey获取id:
lvUsers.DataKeys[item.DataItemIndex].Value
我想我可以查询数据库来获取其余的值,但是由于它是数据绑定的,我想我可以在没有数据库调用的情况下获取它们
我必须在datakeys中设置每个属性吗
我还尝试使用了OnItemCommand
同样的东西
FindControl也无法在编辑模板中的任何事件中找到下拉列表
ListView很难使用,或者我缺少一个关键概念。我已经有一段时间没有使用ListView了,但这可能会有所帮助:
它显示了在ItemDataBound方法中访问值的方法,但我认为它可能与
protected void ContactsListView_ItemDataBound(object sender, ListViewItemEventArgs e)
{
Label EmailAddressLabel;
if (e.Item.ItemType == ListViewItemType.DataItem)
{
// Display the e-mail address in italics.
EmailAddressLabel = (Label)e.Item.FindControl("EmailAddressLabel");
System.Data.DataRowView rowView = e.Item.DataItem as System.Data.DataRowView;
string currentEmailAddress = rowView["EmailAddress"].ToString();
}
看看这是否有帮助,或者至少让你更接近……我有一段时间没有使用ListView了,但这可能会有所帮助:
它显示了在ItemDataBound方法中访问值的方法,但我认为它可能与
protected void ContactsListView_ItemDataBound(object sender, ListViewItemEventArgs e)
{
Label EmailAddressLabel;
if (e.Item.ItemType == ListViewItemType.DataItem)
{
// Display the e-mail address in italics.
EmailAddressLabel = (Label)e.Item.FindControl("EmailAddressLabel");
System.Data.DataRowView rowView = e.Item.DataItem as System.Data.DataRowView;
string currentEmailAddress = rowView["EmailAddress"].ToString();
}
查看这是否有助于或至少让您更接近…只有在数据绑定过程(ItemDataBound事件)中,DataItem
对象才可用。在那之后,它就不存在了。这就是为什么它在代码中总是空的
您必须将信息包含在数据键中(如果数据量很大,则不建议这样做),或者使用FindControl从EditItemTemplate中的控件获取值
你说FindControl不适合你。你试过用下面的方法吗
ListViewItem item = lvUsers.Items[e.NewEditIndex];
DropDownList ddl = item.FindControl("MyDDL") as DropDownList;
DataItem
对象仅在数据绑定过程中可用(ItemDataBound事件)。在那之后,它就不存在了。这就是为什么它在代码中总是空的
您必须将信息包含在数据键中(如果数据量很大,则不建议这样做),或者使用FindControl从EditItemTemplate中的控件获取值
你说FindControl不适合你。你试过用下面的方法吗
ListViewItem item = lvUsers.Items[e.NewEditIndex];
DropDownList ddl = item.FindControl("MyDDL") as DropDownList;