1

我在 ListView 中有两个按钮。单击第一个按钮,我想更新 ListView-Item。单击第二个按钮,我想更新 ListView-Item 并重定向到不同的页面。两个按钮都有一个属性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 中决定用户单击了哪个按钮?

4

5 回答 5

0

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

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

于 2013-07-10T09:19:20.463 回答
0

那么有 2 到 3 种方法可以做到这一点:一种是 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
}
于 2013-07-10T09:29:45.537 回答
0

我不相信有办法区分哪个控件发出了更新命令,因为发件人就是它ListView自己。

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

为什么要坚持使用OnItemUpdated活动?

于 2013-07-10T12:22:41.857 回答
0

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

于 2015-06-10T18:49:19.787 回答
-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;
        }
    }
于 2013-07-10T10:23:32.360 回答