有没有办法从ListView SelectedIndexChanged的EventArgs中获取选择按钮的ID?

时间:2010-01-25 14:19:44

标签: c# asp.net listview button

我在列表视图中有两个按钮,用于调整该项目的位置,基本上,将其向上移动或向下移动。两个按钮都有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 );
    }

2 个答案:

答案 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文档。

希望这可能对你有所帮助。