ASP.NET Repeater控件ItemTemplate无法显示数据库数据问题
ASP.NET Repeater控件ItemTemplate数据不显示的排查与解决
针对你遇到的Repeater控件ItemTemplate数据无法正常显示的问题,结合你提供的代码,整理以下排查方向和解决方案:
1. 确认字段名完全匹配
ASP.NET的Eval方法区分大小写,必须确保前台绑定的字段名与后台数据源的列名完全一致:
- 检查存储过程
spQueryBoardMemberGroups返回的DataTable中,是否存在BoardGroupName、CompanyName列,且列名大小写和前台<%# Eval("BoardGroupName") %>、<%# Eval("CompanyName") %>完全一致; - 检查存储过程
spQueryBoardMembers返回的DataTable中,是否存在BoardMemberName列,且列名与前台<%# Eval("BoardMemberName") %>完全匹配。
2. 完善ItemDataBound事件的项类型判断
GroupRepeater_ItemDataBound事件会触发Header、Footer、Separator等非数据项的绑定,这些项的DataItem为null,直接强转会导致逻辑跳过。修改代码,只处理数据项和交替项:
protected void GroupRepeater_ItemDataBound(object sender, RepeaterItemEventArgs e) { try { // 仅处理数据项和交替数据项 if (e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem) { DataRowView groupRow = (DataRowView)e.Item.DataItem; Repeater memberRepeater = (Repeater)e.Item.FindControl("MemberRepeater"); if (memberRepeater != null && groupRow != null) { string companyName = groupRow.Row["CompanyName"].ToString(); string constr = ConfigurationManager.ConnectionStrings["ConnectionString"].ConnectionString; DataTable src = DbHelper.SqlStoredProcedure1ParamDataTable("spQueryBoardMembers", "@CompanyName", companyName, constr); memberRepeater.DataSource = src; memberRepeater.DataBind(); } } } catch (Exception ex) { HelperFunctions.Logger.Error("Website" + ex.ToString(), MethodBase.GetCurrentMethod()); lblMessage.Text = "Error encounted and logged, contact support - Method that failed = " + MethodBase.GetCurrentMethod().Name; } }
3. 规范前台Label的绑定写法
前台Label中混写静态文本和绑定表达式可能存在解析问题,建议改为规范的绑定方式:
<div class="d-block d-md-none"> <asp:Label runat="server" Text='<%# "Name" + Eval("BoardMemberName") %>'></asp:Label> <br/> </div>
或分开静态文本与绑定控件:
<div class="d-block d-md-none"> Name <asp:Label runat="server" Text='<%# Eval("BoardMemberName") %>'></asp:Label> <br/> </div>
4. 调试验证数据源内容
在GroupRepeater_ItemDataBound中添加调试代码,确认子Repeater的数据源是否正确:
// 输出DataTable的列名,确认存在BoardMemberName foreach(DataColumn col in src.Columns) Response.Write($"列名:{col.ColumnName}<br/>"); // 输出每行的BoardMemberName值 foreach(DataRow row in src.Rows) Response.Write($"成员名:{row["BoardMemberName"]}<br/>");
运行页面查看输出,确认数据源确实包含预期的字段和数据。
内容的提问来源于stack exchange,提问作者DotNetter
相关产品推荐
相关产品推荐

