我在列表视图中有两个按钮,用于调整该项目的位置,基本上,将其向上移动或向下移动。两个按钮都有CommandName="Select"
所以我需要知道他们的ID是否在EventArgs中的某个位置,这样我就可以判断是按下了向上还是向下按钮。
这是我的临时解决方案,也许它可以让你更好地了解我的意思。
int s;
public void iBtnUp_Click( object sender, EventArgs e )
{
s = 1;
}
public void iBtnDown_Click( object sender, EventArgs e )
{
s = 0;
}
public void lvSteps_SelectedIndexChanged( object sender, EventArgs e )
{
DataKey currentDataKey = this.lvSteps.DataKeys[ lvSteps.SelectedIndex ];
int ID = (int)currentDataKey.Values[0];
int Step = (int)currentDataKey.Values[1];
clsProcessStep newProcessStep = new clsProcessStep()
{
ProcessStepID = ID,
StepNumber = Step
};
newProcessStep.swapSteps( s );
}
答案 0 :(得分:1)
你能不能只使用CommandParameter来区分这两者?即CommandParameter =一个按钮为“Up”,另一个为“Down”。
修改强>
以下是使用CommandParameter的示例,但我现在看到它可能不适合您现有的代码。也许你可以将这两种方法结合起来,使之有效。
<asp:ListView runat="server" ID="ListView1" OnItemCommand="ListView1_ItemCommand" OnSelectedIndexChanging="ListView1_SelectedIndexChanging">
<LayoutTemplate>
<table runat="server" id="table1" runat="server">
<tr runat="server" id="itemPlaceholder">
</tr>
</table>
</LayoutTemplate>
<ItemTemplate>
<tr runat="server">
<td id="Td1" runat="server">
<p>
<asp:Label ID="Label1" Text="Item" runat="server"></asp:Label>
<asp:Button ID="Button1" runat="server" CommandName="Select" CommandArgument="Up"
Text="Up" />
<asp:Button ID="Button2" runat="server" CommandName="Select" CommandArgument="Down"
Text="Down" />
</p>
</td>
</tr>
</ItemTemplate>
<SelectedItemTemplate>
<tr id="Tr2" runat="server">
<td id="Td2" runat="server">
<p style="background-color:Red;">
<asp:Label ID="Label1" Text="Item" runat="server"></asp:Label>
<asp:Button ID="Button1" runat="server" CommandName="Select" CommandArgument="Up"
Text="Up" />
<asp:Button ID="Button2" runat="server" CommandName="Select" CommandArgument="Down"
Text="Down" />
</p>
</td>
</tr>
</SelectedItemTemplate>
</asp:ListView>
代码隐藏:
public partial class _Default : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
if (!Page.IsPostBack)
{
ListView1.DataSource = new List<int>() { 1, 2, 3 };
ListView1.DataBind();
}
}
public void ListView1_ItemCommand(object sender, ListViewCommandEventArgs e)
{
if (e.CommandName == "Select")
{
var isGoingUp = (e.CommandArgument.ToString() == "Up");
}
}
protected void ListView1_SelectedIndexChanging(object sender, ListViewSelectEventArgs e)
{
this.ListView1.SelectedIndex = e.NewSelectedIndex;
ListView1.DataSource = new List<int>() { 1, 2, 3 };
ListView1.DataBind();
}
}
答案 1 :(得分:1)
与CommandName
一起,您可以在按钮上指定CommandArgument
。如果对每个按钮应用唯一的命令参数,则可以在事件处理程序中确定单击了哪个按钮。
但是,如果使用SelectedIndexChanged事件,则无效。原因是EventArgs参数不包含命令名称和参数详细信息。您可能需要切换到OnItemCommand处理程序。它在签名中使用ListViewCommandEventArgs
,因此您可以从中获取CommandName和CommandArgument属性。
示例标记:
<asp:ListView ID="myListView" runat="server" OnItemCommand="myListView_ItemCommand" ... />
相应的代码隐藏:
protected void myListView_ItemCommand(object sender, ListViewCommandEventArgs e)
{
//e.CommandName gives you the command name specified on the button
//e.CommandArgument gives you the command argument specified on the button
}
以下是ListView ItemCommand Event上的MSDN文档。
希望这可能对你有所帮助。