这几天为了这个问题查了很多资料,csdn也翻遍了,还是没有解决;只好来求助了。
该页面主要为了实现权限设置的功能。
涉及三个表:
表1、用户权限表userfunc
---------------------------
userid | username | func
1 | usera ¦1,2,3,4
2 | userb ¦3,5
表2、一级功能表primaryfunc
-----------------------------
funcid | funcname
1 | 一级功能A
2 | 一级功能B
表3、二级功能表
-----------------------------
subid | subname | funcid |
1 | A二级功能1 | 1 |
2 | A二级功能2 | 1 |
3 | A二级功能3 | 1 |
4 | A二级功能4 | 1 |
5 | B二级功能1 | 2 |
6 | B二级功能2 | 2 |
我利用一个Datagrid嵌套repeater控件,然后在repeater放置checkbox来实现对用户权限的编辑。最终显示出来的页面效果如下:
----------------------------------------------------
一级功能 | 二级功能
----------------------------------------------------
一级功能A | checkbox checkbox checkbox checkbox
一级功能B | checkbox checkbox
现在的问题是,这些checkbox的checked状态无法设置。我定义了一个函数isCheck来检测用户是否具有某项二级功能的权限;函数的两个参数分别是每个checkbox所对应二级功能的id号和特定用户的funcid,如果子功能在funcid中,返回true,否则返回false。
相关代码如下:
<asp:DataGrid id="DataGrid1" runat="server" AutoGenerateColumns="false" >
<Columns>
<asp:TemplateColumn HeaderText="一级功能">
<ItemTemplate>
<%# DataBinder.Eval(Container.DataItem,"funcname") %>
</ItemTemplate>
</asp:TemplateColumn>
<asp:TemplateColumn HeaderText="二级功能">
<ItemTemplate>
<asp:repeater id="childRepeater" runat="server" DataSource='<%# Ctype(Container.DataItem,DataRowView).CreateChildView("RelationName") %>'>
<itemtemplate>
<%# DataBinder.Eval(Container.DataItem,"subname") %>
<asp:checkbox runat="server" Checked='<%# Convert.toBoolean(isCheck(DataBinder.Eval(Container.DataItem,"subid") ,func)) %>'/>
<!--func已经通过后台代码根据传递的用户id号码从用户表中获取-->
</ItemTemplate>
</asp:Repeater>
</ItemTemplate>
</asp:TemplateColumn>
</Columns>
</asp:DataGrid>
上面的代码中,checkbox中的Checked='<%# Convert.toBoolean(isCheck(DataBinder.Eval(Container.DataItem,"subid") ,func)) %>'显然是错误的,DataBinder.Eval(Container.DataItem,"subid")不能直接作为变量做函数的参数。但是我应该如何设置每个子功能对应checkbox的checked属性呢?
该页面主要为了实现权限设置的功能。
涉及三个表:
表1、用户权限表userfunc
---------------------------
userid | username | func
1 | usera ¦1,2,3,4
2 | userb ¦3,5
表2、一级功能表primaryfunc
-----------------------------
funcid | funcname
1 | 一级功能A
2 | 一级功能B
表3、二级功能表
-----------------------------
subid | subname | funcid |
1 | A二级功能1 | 1 |
2 | A二级功能2 | 1 |
3 | A二级功能3 | 1 |
4 | A二级功能4 | 1 |
5 | B二级功能1 | 2 |
6 | B二级功能2 | 2 |
我利用一个Datagrid嵌套repeater控件,然后在repeater放置checkbox来实现对用户权限的编辑。最终显示出来的页面效果如下:
----------------------------------------------------
一级功能 | 二级功能
----------------------------------------------------
一级功能A | checkbox checkbox checkbox checkbox
一级功能B | checkbox checkbox
现在的问题是,这些checkbox的checked状态无法设置。我定义了一个函数isCheck来检测用户是否具有某项二级功能的权限;函数的两个参数分别是每个checkbox所对应二级功能的id号和特定用户的funcid,如果子功能在funcid中,返回true,否则返回false。
相关代码如下:
<asp:DataGrid id="DataGrid1" runat="server" AutoGenerateColumns="false" >
<Columns>
<asp:TemplateColumn HeaderText="一级功能">
<ItemTemplate>
<%# DataBinder.Eval(Container.DataItem,"funcname") %>
</ItemTemplate>
</asp:TemplateColumn>
<asp:TemplateColumn HeaderText="二级功能">
<ItemTemplate>
<asp:repeater id="childRepeater" runat="server" DataSource='<%# Ctype(Container.DataItem,DataRowView).CreateChildView("RelationName") %>'>
<itemtemplate>
<%# DataBinder.Eval(Container.DataItem,"subname") %>
<asp:checkbox runat="server" Checked='<%# Convert.toBoolean(isCheck(DataBinder.Eval(Container.DataItem,"subid") ,func)) %>'/>
<!--func已经通过后台代码根据传递的用户id号码从用户表中获取-->
</ItemTemplate>
</asp:Repeater>
</ItemTemplate>
</asp:TemplateColumn>
</Columns>
</asp:DataGrid>
上面的代码中,checkbox中的Checked='<%# Convert.toBoolean(isCheck(DataBinder.Eval(Container.DataItem,"subid") ,func)) %>'显然是错误的,DataBinder.Eval(Container.DataItem,"subid")不能直接作为变量做函数的参数。但是我应该如何设置每个子功能对应checkbox的checked属性呢?
表1、用户权限表userfunc
---------------------------
userid | username | func
1 | usera |1,2,3,4
2 | userb |3,5
其实问题可以不涉及到datagrid,就比如一个repeater中绑定不定个数的checkbox,而这个chckbox的属性需要外面的函数来判断true和false,该如何实现。
Checked='<%# Convert.toBoolean(isCheck(DataBinder.Eval(Container.DataItem,"subid") ,func)) %>'
返回值总是为false。而isCheck函数是没有问题的。