首页 > 解决方案 > 如何确定在 ASP.Net C# 中的 ListView 内单击 LinkBut​​ton 的行?

问题描述

例如,假设我有一个 ListView,其中包含一些列和一个额外的 LinkBut​​ton 列,并且 LinkBut​​ton 将存在于 ListView 的每一行中。

有什么方法可以检查是否单击了 LinkBut​​ton,以及单击了 ListView 中的哪一行?

我试图在我的 aspx.cs 页面上执行此操作,而不是在 aspx 页面上使用 DataSource 对象。

编辑:这是我的 aspx.cs 页面的代码

protected void ServicesListView_ItemCommand(object sender, ListViewCommandEventArgs e)
    {
        int idValue;


            var backend = new ServicesBackend();

            switch (e.CommandName)
            {
                case "View":
                    idValue = Convert.ToInt32(e.CommandArgument);


                        var info = backend.GetOneService(idValue);

                        DescriptionTextBox.Text = info.Description;
                        HoursTextBox.Text = info.JobHours.ToString();
                        CommentsTextBox.Text = info.Comments;

                        DisplayServicePanel.Visible = true;
                    break;
            }
    }

不幸的是 id 每次都返回 0

这是我的 aspx 页面的一个片段

<asp:LinkButton ID="ViewButton" CommandName="View" CommandArgument='<%# Item.ServiceId %>' runat="server" OnClick="ViewButton_Click" CssClass="btn btn-default" style="display: inline-block;">View</asp:LinkButton>

提前致谢。

标签: c#asp.netlistviewlinkbutton

解决方案


您可以使用 NamingContainer 轻松获取项目索引。

protected void LinkButton1_Click(object sender, EventArgs e)
{
    //cast the sender back to a linkbutton
    LinkButton lb = sender as LinkButton;

    //get the current listview item from the linkbutton namingcontainer
    ListViewDataItem lvdi = lb.NamingContainer as ListViewDataItem;

    //get the item index from the listviewdataitem
    int index = lvdi.DataItemIndex;
}

aspx

<asp:ListView ID="ListView1" runat="server">
    <ItemTemplate>
        <asp:LinkButton ID="LinkButton1" runat="server" OnClick="LinkButton1_Click">LinkButton</asp:LinkButton>
    </ItemTemplate>
</asp:ListView>

推荐阅读