難道你不只是使用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();
}
}
在此事件發生之前指數是否發生變化?所以我可以得到按鈕被按下的當前選定索引。 – Justen 2010-01-25 18:25:28
我不記得了。一個簡單的方法是調試並在每個處理程序上放置一個斷點(項目命令和選定的索引已更改)。如果您需要在兩個事件處理程序之間傳遞或「記住」值,則可以輕鬆地聲明一個類級變量並在第一個事件期間設置它,在第二個事件期間檢索它。你可能會得到一些好的資源.. – 2010-01-27 02:01:12