我在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中决定用户点击了哪个按钮?
答案 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;
}
}