A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 宋兴征 中级黑马   /  2013-3-25 10:29  /  1863 人查看  /  2 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 宋兴征 于 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>
复制代码

评分

参与人数 1技术分 +1 收起 理由
杞文明 + 1

查看全部评分

2 个回复

倒序浏览
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: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.             }
复制代码
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马