Не могли бы вы просто использовать CommandParameter, чтобы различать два? То есть CommandParameter = «Вверх» для одной кнопки и «Вниз» для другой.
EDIT
Вот пример использования 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();
}
}