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
相关产品推荐
相关产品推荐

