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

ASP.NET Web服务:如何用ListView/GridView显示数据而非DropDownList

解决不同控件数据绑定问题的方案

首先得提一句,你代码里DropDownList绑定的字段名(DEADLINE、TENDREFNUM)和给CTendNotificationInfo赋值的属性(PENAME、PECODE)看起来不匹配,这可能是个潜在小问题,先确认类的属性名称和绑定字段完全对应(大小写敏感),下面针对不同控件给出具体绑定方法:

1. 绑定到GridView

GridView支持自动生成列或自定义列,两种方式都能正常展示数据:

后台绑定代码

// 从Session取出数据,先做类型转换和非空判断
List<CTendNotificationInfo> tendInfo = Session["tendInfo"] as List<CTendNotificationInfo>;
if(tendInfo != null)
{
    GridView1.DataSource = tendInfo;
    GridView1.DataBind();
}

前端配置

  • 自动生成列:快速展示所有属性,只需开启自动生成:
<asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="true"></asp:GridView>
  • 自定义列:更灵活,指定要显示的字段和表头:
<asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="false">
    <Columns>
        <asp:BoundField DataField="PENAME" HeaderText="招标编号" />
        <asp:BoundField DataField="PECODE" HeaderText="招标名称" />
        <!-- 如果类里有其他属性,比如DEADLINE,直接添加对应列即可 -->
    </Columns>
</asp:GridView>

2. 绑定到ListView

ListView需要自定义模板来控制数据展示样式,步骤如下:

后台绑定代码

和GridView逻辑一致:

List<CTendNotificationInfo> tendInfo = Session["tendInfo"] as List<CTendNotificationInfo>;
if(tendInfo != null)
{
    ListView1.DataSource = tendInfo;
    ListView1.DataBind();
}

前端模板配置

<asp:ListView ID="ListView1" runat="server">
    <LayoutTemplate>
        <div class="notification-list">
            <asp:PlaceHolder ID="itemPlaceholder" runat="server"></asp:PlaceHolder>
        </div>
    </LayoutTemplate>
    <ItemTemplate>
        <div class="notification-item">
            <span>编号:<%# Eval("PENAME") %></span>
            <span>名称:<%# Eval("PECODE") %></span>
        </div>
    </ItemTemplate>
</asp:ListView>

你可以根据需求修改模板的HTML结构和样式,用Eval("属性名")绑定对应字段即可。

3. 绑定到Label

Label通常用来展示单个值或拼接后的批量数据,分两种场景:

展示单条数据(比如列表第一条)

List<CTendNotificationInfo> tendInfo = Session["tendInfo"] as List<CTendNotificationInfo>;
if(tendInfo != null && tendInfo.Count > 0)
{
    Label1.Text = $"当前招标:编号{tendInfo[0].PENAME},名称{tendInfo[0].PECODE}";
}

展示所有数据(拼接成字符串)

List<CTendNotificationInfo> tendInfo = Session["tendInfo"] as List<CTendNotificationInfo>;
if(tendInfo != null)
{
    StringBuilder sb = new StringBuilder();
    foreach(var item in tendInfo)
    {
        sb.Append($"<p>编号:{item.PENAME} | 名称:{item.PECODE}</p>");
    }
    Label1.Text = sb.ToString();
    // 记得关闭HTML编码,否则标签会被转义成文本
    Label1.HtmlEncode = false;
}

关键注意点

  • 字段名一致性:绑定的字段名必须和CTendNotificationInfo/LotInfo类的属性名完全一致,比如你给PENAME赋值了tenderRefNumber,绑定就必须用PENAME,不能写TENDREFNUM(除非类里有这个属性)。
  • Session安全获取:从Session取数据时一定要做类型转换和非空判断,避免空引用异常。
  • LotInfo数据绑定:如果要绑定标段信息(LotInfo列表),方法和上面完全一致,只需把数据源换成Session["lot"] as List<LotInfo>,字段用LOTNO和LOTNAME即可。

内容的提问来源于stack exchange,提问作者Isaac kitenge

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 10:04:42