繁体   English   中英

如何在listView OnItemEditing中获取DataItem?

[英]How to get a the DataItem in a listView OnItemEditing?

如何在ItemEditing事件中的listView中获取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();
    }

我究竟做错了什么? item.DataItem始终为null。 谢谢!!

我看到我可以使用以下方法从datakey获取id:

lvUsers.DataKeys[item.DataItemIndex].Value

我想我可以查询数据库以获取其余值,但由于它是数据绑定,我认为我可以在没有数据库调用的情况下获取它们。

我是否必须在datakeys中设置每个属性?

我也尝试过使用OnItemCommand同样的东西。

FindControl对我来说也不适用于在任何这些事件中的编辑模板中找到下拉列表。

ListView要么难以使用,要么我错过了一个关键概念。

DataItem对象仅在数据绑定过程(ItemDataBound事件)期间可用。 在那之后,它不再存在。 这就是为什么它在代码中始终为null。

您必须在DataKeys中包含信息(如果是大量数据则不推荐),或者使用FindControl从EditItemTemplate中的控件获取值。

你说FindControl不适合你。 你尝试过以下方式吗?

ListViewItem item = lvUsers.Items[e.NewEditIndex];
DropDownList ddl = item.FindControl("MyDDL") as DropDownList;

我有一段时间没有使用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();
        }

看看这有助于或至少让你更接近......

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM