如何在DataItem
事件的listView
中获得ItemEditing
?我认为它会像转发器一样工作,但我不知所措。我需要它做这样的事情:
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();
}
我做错了什么? item.DataItem
始终为空。谢谢!
我看到我可以使用以下方法从datakey获取id:
lvUsers.DataKeys[item.DataItemIndex].Value
我想我可以查询数据库以获取其余值,但由于它是数据绑定,我认为我可以在没有数据库调用的情况下获取它们。
我是否必须在datakeys中设置每个属性?
我也尝试使用OnItemCommand
相同的东西。
FindControl对我来说也不适用于在任何这些事件中的编辑模板中找到下拉列表。
ListView要么难以使用,要么我错过了一个关键概念。
答案 0 :(得分:4)
DataItem
对象仅在数据绑定过程中可用(ItemDataBound事件)。在那之后,它不再存在。这就是为什么它在代码中始终为空。
您必须在DataKeys中包含信息(如果是大量数据,则不推荐使用),或者使用FindControl从EditItemTemplate中的控件中获取值。
你说FindControl不适合你。您是否尝试过以下方式?
ListViewItem item = lvUsers.Items[e.NewEditIndex];
DropDownList ddl = item.FindControl("MyDDL") as DropDownList;
答案 1 :(得分:0)
我暂时没有使用过ListViews,但这可能有所帮助:
http://msdn.microsoft.com/en-us/library/system.web.ui.webcontrols.listview.itemdatabound.aspx
它显示了在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();
}
看看这有助于或至少让你更接近......