repeater嵌套取不到父级数据?试试这几种解决方法!

吉云

今天跟大家唠唠我搞 repeater 嵌套的那些事儿,真是一把鼻涕一把泪。

话说,最近接个活儿,要做一个带层级结构的展示页面。最开始想着用 treeview ,后来发现 repeater 控件更灵活,就决定用 repeater 嵌套来实现。结果,一上手就懵,这玩意儿比想象的难多。

第一步:先搭个架子

repeater嵌套取不到父级数据?试试这几种解决方法!

我得先把外层的 repeater 搞定。这个简单,直接从数据库里把数据拉出来,然后绑定到 repeater 上。代码大概是这样:

<%# Eval("ParentName") %>

repeater嵌套取不到父级数据?试试这几种解决方法!

看到没,外层 repeater 里面又嵌套一个 repeater ,ID 是 `rptChild` 。

repeater嵌套取不到父级数据?试试这几种解决方法!

第二步:数据绑定是个坑

接下来就是关键,怎么把子 repeater 的数据绑定上去?我一开始的想法是,在 `rptParent_ItemDataBound` 事件里,找到子 repeater ,然后把对应的数据绑定上去。想法是挺但是实现起来就有点麻烦。

我试好几种方法,一开始是想直接用 `FindControl` 找子 repeater ,但是死活找不到。后来查资料才知道, repeater 里面的控件是在运行时动态生成的,不能直接用 `FindControl` 找到。得用更复杂一点的方法。

最终,我用 `NamingContainer` 来找到子 repeater 。代码大概是这样:

csharp

protected void rptParent_ItemDataBound(object sender, RepeaterItemEventArgs e)

repeater嵌套取不到父级数据?试试这几种解决方法!

if (* == * * == *)

// 找到子 Repeater

Repeater rptChild = (Repeater)*("rptChild");

// 获取父 Repeater 对应的数据项

repeater嵌套取不到父级数据?试试这几种解决方法!

DataRowView drv = (DataRowView)*;

// 根据父 Repeater 的 ID,查询子 Repeater 的数据

string parentId = drv["ParentId"].ToString();

DataTable dtChild = GetDataByParentId(parentId);

// 绑定数据

* = dtChild;

repeater嵌套取不到父级数据?试试这几种解决方法!

这段代码的关键在于:

    repeater嵌套取不到父级数据?试试这几种解决方法!

  • 判断当前 item 的类型,确保是数据行。
  • 然后,用 `*("rptChild")` 找到子 repeater 。
  • 从父 repeater 的数据项中获取 parentId 。
  • 根据 parentId ,查询子 repeater 需要显示的数据。
  • 把数据绑定到子 repeater 上。

repeater嵌套取不到父级数据?试试这几种解决方法!

第三步:样式调整也很重要

数据绑定好,但是页面看起来还是有点乱。因为 repeater 默认的样式比较简单,没有层次感。我又加一些 CSS 样式,让页面看起来更清晰。

例如,给子 repeater 加个缩进,让它看起来像是父 repeater 的子节点:

css

.child-repeater {

margin-left: 20px;

repeater嵌套取不到父级数据?试试这几种解决方法!

然后,在外层 div 上加个边框,让每个父节点看起来更独立:

css

.parent-item {

border: 1px solid #ccc;

repeater嵌套取不到父级数据?试试这几种解决方法!

padding: 10px;

margin-bottom: 10px;

踩坑与收获

这回搞 repeater 嵌套,真是踩不少坑。但是,最终还是搞定。有以下几点:

repeater嵌套取不到父级数据?试试这几种解决方法!

  • repeater 嵌套的关键在于数据绑定,要用 `NamingContainer` 找到子 repeater 。
  • 样式调整也很重要,要让页面看起来清晰有层次感。
  • 遇到问题不要怕,多查资料,多尝试,总能找到解决方案。

这回实践让我对 repeater 控件有更深入的解。以后再遇到类似的需求,我就更有信心。

repeater嵌套取不到父级数据?试试这几种解决方法!

好,今天的分享就到这里。希望能对大家有所帮助。

免责声明:由于无法甄别是否为投稿用户创作以及文章的准确性,本站尊重并保护知识产权,根据《信息网络传播权保护条例》,如我们转载的作品侵犯了您的权利,请您通知我们,请将本侵权页面网址发送邮件到qingge@88.com,深感抱歉,我们会做删除处理。

目录[+]