黑马程序员技术交流社区

标题: Repeater数据绑定的字段转换 [打印本页]

作者: 宋兴征    时间: 2013-3-25 10:29
标题: Repeater数据绑定的字段转换
本帖最后由 宋兴征 于 2013-3-26 12:23 编辑

在做基于角色的权限管理的功能,其中 Right 表的结构:


Id        Name        Url                    PID

1权限管理indexRight0
3权限浏览        browseRight1
4权限增加addnewRight1
5权限修改updateRight1
6权限删除deleteRight1





PID表示所属哪一个模块,值对应于自身表的某一个Id


问题:
使用Repeater显示Right表内容,数据源是一个DataTable,在BLL中封装的方法。

现在想将PID字段替换为具体模块名,也就是自身表的Name字段
该怎么做?


附代码如下:
  1. <asp:ObjectDataSource ID="odsBrowserRight" runat="server" SelectMethod="GetAllRights"
  2.         TypeName="TMCR.BLL.RightBLL"></asp:ObjectDataSource>
  3.     <asp:Repeater ID="repBrowserRight" runat="server"
  4.         DataSourceID="odsBrowserRight" onitemcommand="repBrowserRight_ItemCommand">
  5.         <HeaderTemplate>
  6.             <table class="browserRight">
  7.                 <tr>
  8.                      <td>权限ID</td>
  9.                     <td>权限名称</td>
  10.                     <td>权限URL</td>
  11.                     <td>权限所在模块</td>
  12.                 </tr>
  13.         </HeaderTemplate>
  14.         <ItemTemplate>
  15.             <tr>
  16.                 <td><%#Eval("Id") %></td>
  17.                 <td><%#Eval("Name") %></td>
  18.                 <td><%#Eval("Url") %></td>
  19.                 <td>
  20.                     <asp:Label ID="Label1" runat="server" Text=''></asp:Label></td>
  21.             </tr>
  22.         </ItemTemplate>
  23.         <FooterTemplate>
  24.             </table>
  25.         </FooterTemplate>
  26.     </asp:Repeater>
复制代码

作者: 许庭洲    时间: 2013-3-26 08:17
1. Repeater用于对绑定数据源中的数据进行遍历显示,每条数据以什么格式显示是由Repeater的<ItemTemplate>来决定的,模板会多次显示<ItemTemplate>权限ID:<%#Eval("Id")%><b> 权限名称:<%#Eval("Name")%></b><b> 权限URL:<%#Eval("Url")%></b><br/></ItemTemplate>;
2.<%#Eval("PID"%>表示在这个位置显示当前的权限所在模块属性;
3. 因为Eval就是将属性显示到指定的位置,因此也可以显示到文本框中<ItemTemplate>权限所在模块:<input type="text" value='<%#Eval("PID")%>'/></ItemTemplate>
作者: 宋兴征    时间: 2013-3-26 12:20
本帖最后由 宋兴征 于 2013-3-26 12:22 编辑

我找到了解决办法:
因为Repeater只是显示,所以只要将PID的位置替换为其他值即可,不涉及数据绑定。
所以在OnItemDatabound事件里:
  1. if (e.Item.ItemType == ListItemType.Item|| e.Item.ItemType==ListItemType.AlternatingItem)
  2.             {
  3.                 Right right = (Right)e.Item.DataItem;
  4.                 int pid = right.PID; //当前行的所属的模块ID
  5.                 Right pRight = new RightBLL().GetById(pid);  //通过PID找到模块
  6.                 Label label = (Label)e.Item.FindControl("Label1");
  7.                 label.Text = pRight.Name;  //显示模块名称
  8.             }
复制代码





欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2