两个按钮更新列表视图的一个项目

时间:2013-07-10 09:13:57

标签: asp.net listview

我在ListView中有两个按钮。单击第一个按钮,我想更新ListView-Item。单击第二个按钮,我想更新ListView项目并重定向到另一个页面。两个按钮都有一个属性CommandName="Update"。我想用CommandArgument - Property和OnItemUpdated - Event解决我的问题,但我不知道如何在事件中获取此Property的值。

<asp:ObjectDataSource ID="ods" runat="server" SelectMethod="Select" UpdateMethod="Update">
    <SelectParameters>
        <asp:Parameter ..... />
    </SelectParameters>
    <UpdateParameters>
        <asp:Parameters .... />
    </UpdateParameters>
</asp:ObjectDataSource>  

<asp:ListView ID="lv" runat="server" DataSourceID="ods" DataKeyNames="ID" OnItemUpdated="lv_OnItemUpdated">
    <ItemTemplate>...</ItemTemplate>  
    <EditItemTemplate>
        <asp:Button ID="btnUpdate" runat="server" CommandName="Update"/>
        <asp:Button ID="btnUpdate2" runat="server" CommandName="Update"/> 
    </EditItemTemplate>
</asp:ListView>

在代码隐藏中:

protected void lv_OnItemUpdated(object sender, ListViewUpdateEventArgs e)
{
    ...
}  

是否可以在lv_OnItemUpdated中决定用户点击了哪个按钮?

5 个答案:

答案 0 :(得分:0)

为每个按钮指定一个不同的名称。在代码中使用相同的事件处理方法来处理两个按钮单击事件。然后检查调用该方法的按钮。

编辑:解决方法是使用javascript将单击按钮的名称放在表单上的隐藏字段中(在使用客户端脚本之前)。然后在Listview中,您可以检查隐藏字段的值以查看单击了哪个按钮。

答案 1 :(得分:0)

有两到三种方法:一种是CommandArgument:

<asp:Button id="Button1"
   Text="Sort Ascending"
   CommandName="Sort"
   CommandArgument="Ascending"
   OnCommand="CommandBtn_Click" 
   runat="server"/>
 <asp:Button id="Button2"
   Text="Sort Descending"
   CommandName="Sort"
   CommandArgument="Descending"
   OnCommand="CommandBtn_Click" 
   runat="server"/>

而不是在服务器端,你可以:

void CommandBtn_Click(Object sender, CommandEventArgs e) 
{
    if(e.CommandName == "Sort")
    //do you work and so on
}

或者您可以将发件人转换为按钮,并将其ID识别,以下是哪个按钮:

((Button)sender)).ID

或者你可以获得按钮ID:

String ButtonID = Request["__EVENTTARGET"];

我希望它可以帮助您解决问题。

所以你可以这样:

protected void lv_OnItemUpdated(object sender, ListViewUpdateEventArgs e)
{
    // either use e.CommandName
    // or user ((Button)sender)).ID
}

答案 2 :(得分:0)

我不相信有一种方法可以区分哪个控件发出了Update命令,因为发件人本身就是ListView

解决方法是为您提供一个按钮CommandName“更新”,另一个按钮“ UpdateRedirect ”。 “ UpdateRedirect ”按钮将触发ListView_ItemCommand事件,然后您可以调用ListView.UpdateItem,将更新逻辑保留在那里,然后重定向。

为什么要坚持使用OnItemUpdated事件?

答案 3 :(得分:0)

好的,是的,itemcommand是你想要的: 更新或插入的生命周期会触发其本机事件和itemcommand事件。 itemCommand事件将发生在itemUpdating或itemInserting事件之前。 因此,您可以创建一个名为“bSecondButtonClicked”的布尔变量,例如使用Commandname ='UPDATE'将命令参数添加到两个按钮。可以在itemcommand事件点评估e.command参数。设置您的布尔变量(或者你实现它)为true。然后,在itemupdating事件中,根据bSecondButtonClicked触发你的代码。

答案 4 :(得分:-1)

您需要进入ItemCommand

ListView事件
protected void lstvw_ItemCommand(object sender, ListViewCommandEventArgs e)
    {
        switch (e.CommandName)
        {
            case "new":
                try
                {
                    //e.CommandArgument
                    //e.CommandSource
                    // do your stuff here
                }
                catch (Exception ex)
                {

                }
                break;

            default:
                break;
        }
    }