Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/307.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/35.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何获取listView中的数据项?_C#_Asp.net_Listview - Fatal编程技术网

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;