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

如何让ASP.NET中C#实现的DataView/ListView可点击并通过Response.Write显示数据

ASP.NET中DataView/ListView行点击获取数据并输出的实现方法

一、ListView 实现方案

方式1:通过LinkButton触发点击

  1. 前端ASPX代码:
    在ListView的ItemTemplate中添加LinkButton,指定命令参数和后台事件:
    <asp:ListView ID="ListView1" runat="server" OnItemCommand="ListView1_ItemCommand">
        <LayoutTemplate>
            <table class="table">
                <tr>
                    <th>ID</th>
                    <th>姓名</th>
                    <th>操作</th>
                </tr>
                <tr id="itemPlaceholder" runat="server"></tr>
            </table>
        </LayoutTemplate>
        <ItemTemplate>
            <tr>
                <td><%# Eval("ID") %></td>
                <td><%# Eval("Name") %></td>
                <td>
                    <asp:LinkButton ID="lnkSelect" runat="server" 
                                    CommandName="SelectRow" 
                                    CommandArgument='<%# Container.DataItemIndex %>'
                                    Text="查看数据"></asp:LinkButton>
                </td>
            </tr>
        </ItemTemplate>
    </asp:ListView>
    
  2. 后台C#代码:
    在ItemCommand事件中提取行数据并输出:
    protected void ListView1_ItemCommand(object sender, ListViewCommandEventArgs e)
    {
        if (e.CommandName == "SelectRow")
        {
            int rowIndex = Convert.ToInt32(e.CommandArgument);
            ListViewItem targetItem = ListView1.Items[rowIndex];
            
            // 从行控件或数据源对象提取数据
            string id = targetItem.DataItem.GetType().GetProperty("ID")?.GetValue(targetItem.DataItem).ToString();
            string name = targetItem.DataItem.GetType().GetProperty("Name")?.GetValue(targetItem.DataItem).ToString();
            
            Response.Clear();
            Response.Write($"点击行数据:ID={id},姓名={name}");
            Response.End();
        }
    }
    

方式2:整行可点击(无需按钮)

通过JS回发事件实现整行点击:

  1. 前端ASPX代码:
    <asp:ListView ID="ListView1" runat="server" OnItemCommand="ListView1_ItemCommand">
        <LayoutTemplate>
            <table class="table">
                <tr>
                    <th>ID</th>
                    <th>姓名</th>
                </tr>
                <tr id="itemPlaceholder" runat="server"></tr>
            </table>
        </LayoutTemplate>
        <ItemTemplate>
            <tr style="cursor:pointer;" onclick='<%# $"__doPostBack(\"{ListView1.UniqueID}\", \"SelectRow${Container.DataItemIndex}\")" %>'>
                <td><%# Eval("ID") %></td>
                <td><%# Eval("Name") %></td>
            </tr>
        </ItemTemplate>
    </asp:ListView>
    
  2. 后台代码和方式1一致,无需修改ItemCommand逻辑。

二、DataView 相关实现(搭配GridView)

DataView是数据容器而非UI控件,通常绑定到GridView展示。以下是绑定DataView的GridView行点击实现:

方式1:按钮触发点击

  1. 前端ASPX代码:
    <asp:GridView ID="GridView1" runat="server" OnRowCommand="GridView1_RowCommand" AutoGenerateColumns="False">
        <Columns>
            <asp:BoundField DataField="ID" HeaderText="ID" />
            <asp:BoundField DataField="Name" HeaderText="姓名" />
            <asp:ButtonField Text="查看数据" CommandName="SelectRow" />
        </Columns>
    </asp:GridView>
    
  2. 后台C#代码:
    protected void Page_Load(object sender, EventArgs e)
    {
        if (!IsPostBack)
        {
            // 模拟生成DataView
            DataTable dt = new DataTable();
            dt.Columns.Add("ID", typeof(int));
            dt.Columns.Add("Name", typeof(string));
            dt.Rows.Add(1, "张三");
            dt.Rows.Add(2, "李四");
            DataView dv = dt.DefaultView;
            
            GridView1.DataSource = dv;
            GridView1.DataBind();
        }
    }
    
    protected void GridView1_RowCommand(object sender, GridViewCommandEventArgs e)
    {
        if (e.CommandName == "SelectRow")
        {
            int rowIndex = Convert.ToInt32(e.CommandArgument);
            GridViewRow targetRow = GridView1.Rows[rowIndex];
            
            string id = targetRow.Cells[0].Text;
            string name = targetRow.Cells[1].Text;
            
            Response.Clear();
            Response.Write($"点击行数据:ID={id},姓名={name}");
            Response.End();
        }
    }
    

方式2:整行可点击

通过RowDataBound事件给行添加点击回发:

  1. 后台C#代码:
    protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e)
    {
        if (e.Row.RowType == DataControlRowType.DataRow)
        {
            e.Row.Attributes["onclick"] = Page.ClientScript.GetPostBackClientHyperlink(GridView1, "Select$" + e.Row.RowIndex);
            e.Row.Style["cursor"] = "pointer";
        }
    }
    
    protected void GridView1_SelectedIndexChanged(object sender, EventArgs e)
    {
        GridViewRow selectedRow = GridView1.SelectedRow;
        string id = selectedRow.Cells[0].Text;
        string name = selectedRow.Cells[1].Text;
        
        Response.Clear();
        Response.Write($"点击行数据:ID={id},姓名={name}");
        Response.End();
    }
    
  2. 补充:为避免回发验证报错,重写Render方法注册验证:
    protected override void Render(HtmlTextWriter writer)
    {
        foreach (GridViewRow row in GridView1.Rows)
        {
            if (row.RowType == DataControlRowType.DataRow)
            {
                Page.ClientScript.RegisterForEventValidation(GridView1.UniqueID, "Select$" + row.RowIndex);
            }
        }
        base.Render(writer);
    }
    

内容的提问来源于stack exchange,提问作者Q-UA-SIMODO

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.07 00:24:53