Есть ли способ получить идентификатор кнопки выбора из EventArgs ListView SelectedIndexChanged? - PullRequest
1 голос
/ 25 января 2010

У меня есть две кнопки в виде списка, которые регулируют положение этого элемента, в основном, перемещая его вверх или перемещая его вниз. Обе кнопки имеют CommandName="Select", поэтому мне нужно знать, находится ли их идентификатор где-то в 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 );
    }

Ответы [ 2 ]

1 голос
/ 25 января 2010

Наряду с 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
}

Вот документация MSDN для события ListView ItemCommand .

Надеюсь, это вам немного поможет.

1 голос
/ 25 января 2010

Не могли бы вы просто использовать 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();
        }
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...