如何从ListView获取整个对象?

时间:2009-11-05 09:49:35

标签: asp.net listview

我有一个asp:ListView控件,我用List<CustomObject>绑定。

在此ListView控件中编辑记录时,我始终可以使用以下命令获取正在编辑的记录的唯一ID:

int id = Convert.ToInt32(lstView1.DataKeys[e.NewEditIndex].Value);

是否可以使用任何ListView属性获取正在编辑的整个对象<CustomObject>

5 个答案:

答案 0 :(得分:4)

我只是想出来了,

我们可以使用以下代码获取正在编辑的对象 -

protected void lstView1_ItemDataBound(object sender, ListViewItemEventArgs e)
{
    ListViewDataItem objCurrentItem = (ListViewDataItem)e.Item;
    **CustomObject obj = (CustomObject)objCurrentItem.DataItem;**

    if (objCurrentItem.DisplayIndex == lstView1.EditIndex)
    {
        TextBox txtTitle = (TextBox)objCurrentItem.FindControl("txtTitle");
        txtTitle.Text = obj.Title;
    }
}

答案 1 :(得分:3)

以下是您对我的问题的评论的答案:

是的,它在itemcommand中为null并且在itemdatabound中正常工作的原因是location item命令对于读取此值是不正确的。无论你做什么,总是会在ItemCommand中获取DataItem null。原因在于控制生命周期。控件初始化,创建,然后只能触发与控件相关的任何其他事件。在控件创建期间,将调用CreateControlHierarchy,然后使用DataBind事件创建和数据绑定子控件。那时DataItem是活动的,不是null。在此之前和之后它始终为空,因为它的作用仅在于那么长的时间跨度。

顺便说一下,您正在查看的DataItem是来自相关数据源的项目,用于数据绑定列表视图。数据源仅在数据绑定期间使用,因此DataItem仅在Item Databound期间可用。

希望这有帮助!

答案 2 :(得分:1)

当您单击列表视图中给定项目的编辑时,ItemCommand事件将被触发。该事件的参数告诉您可以获取触发该事件的列表项。您必须正确地对该项进行类型转换才能获得所需的信息。 itemcommand事件看起来像这样

    protected void ListView1_ItemCommand(object sender, ListViewCommandEventArgs e)
    {

    }

你有e.Item从ListViewCommandEventArgs使用。

答案 3 :(得分:1)

您更新项目时没有可用于修改的对象。您只能在从事件参数获得的新值和旧值集合中拥有属性及其值的集合。我想你可以在那里编辑项目的属性。它或多或少类似于编辑对象本身,因为最终这些属性值将使用反射传递给对象。

答案 4 :(得分:0)

<asp:ListView runat="server" ID="list" OnItemCommand="listVideo_ItemCommand">
   <ItemTemplate>
        <asp:LinkButton ID="btDelVideo" runat="server" Text="Delete" OnClientClick="return confirm('Confirm delete ?');" CommandArgument='<%# Eval("KeyID") %>' CommandName="DELETE" />
        <asp:LinkButton ID="btEditVideo" runat="server" Text="Edit" CommandArgument='<%# Eval("KeyID") %>' CommandName="EDIT" />
   </ItemTemplate>
</asp:ListView>

protected void list_ItemCommand(object sender, ListViewCommandEventArgs e)
{
    int videoId = (int)e.CommandArgument;            
    switch (e.CommandName)
        {
            case "DELETE":
                //Implement Delete event
                goto default;
            case "EDIT":
               //Implement Edit event
                goto default;
            default:
                //Rebind listview
                break;
        }
    }
}