You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

无需重新绑定数据源实现ASP.NET ListView选中行高亮的方法

实现ListView行点击高亮无需重新绑定的两种简单方案

方案1:服务端实现(和GridView操作逻辑一致)

步骤1:修改前台模板

首先删除你原来写的SelectedItemTemplate节点(不需要了),给ItemTemplate里的行元素添加服务器标识:

<ItemTemplate>
    <!-- 给tr加runat和ID,方便后台直接操作样式 -->
    <tr style="" id="itemRow" runat="server">
        <td>
            <asp:Label ID="FirstNameLabel" runat="server" Text='<%# Eval("FirstName") %>' />
        </td>
        <td>
            <asp:Label ID="LastNameLabel" runat="server" Text='<%# Eval("LastName") %>' />
        </td>
        <td>
            <asp:Label ID="HotelNameLabel" runat="server" Text='<%# Eval("HotelName") %>' />
        </td>
        <td>
            <asp:Label ID="CityLabel" runat="server" Text='<%# Eval("City") %>' />
        </td>
        <td>
            <asp:Button ID="cmdLstSel" runat="server" Text="View" CssClass="btn" 
                CommandName="Select" CommandArgument='<%# Eval("ID") %>'/>
        </td>
    </tr>
</ItemTemplate>

步骤2:后台逻辑修改

给ListView添加OnItemCommand="ListView1_ItemCommand"事件,替换原来的选中事件逻辑:

// 需要先引入命名空间 using System.Web.UI.HtmlControls;
protected void ListView1_ItemCommand(object sender, ListViewCommandEventArgs e)
{
    if (e.CommandName == "Select")
    {
        // 第一步:清空所有行的高亮样式
        foreach (ListViewDataItem item in ListView1.Items)
        {
            HtmlTableRow row = item.FindControl("itemRow") as HtmlTableRow;
            if (row != null)
            {
                row.Attributes["class"] = row.Attributes["class"]?.Replace("alert-info", "").Trim();
            }
        }
        // 第二步:给当前点击的行加高亮
        HtmlTableRow currentRow = e.Item.FindControl("itemRow") as HtmlTableRow;
        if (currentRow != null)
        {
            currentRow.Attributes["class"] += " alert-info";
        }
        // 第三步:保留你原来的业务逻辑,只绑定GPayments即可,不需要重新绑定ListView
        int hID = Convert.ToInt32(e.CommandArgument);
        GPayments.DataSource = MyRst("SELECT * FROM HotelPayments WHERE Hotel_ID = " + hID);
        GPayments.DataBind();
    }
}

方案2:纯客户端实现(性能更高,无额外服务端逻辑)

如果不需要服务端控制高亮状态,直接用前端JS就能实现,不用改任何后台和模板结构:

// 引入jQuery后加入这段代码即可
$(function(){
    $(document).on('click', 'button.btn', function(){
        // 先清空所有行高亮
        $('tr').removeClass('alert-info');
        // 给当前点击按钮所在的行加高亮
        $(this).closest('tr').addClass('alert-info');
    });
});

内容的提问来源于stack exchange,提问作者Albert D. Kallal

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.02 11:30:02