第六章 用户权限管理(二)- DataGrid控件技巧

来源:互联网 发布:知临信息技术有限公司 编辑:程序博客网 时间:2024/05/13 11:55

6.5 资源管理的设计与实现

 

6.5.1 资源管理的程序原型设计

 

    本文设计与开发的政务系统通过资源分类来管理资源。

    如图6.5所示,资源分类的设置是为了方便管理机关内部的所有资源,对于本办公系统来说,所有系统资源隶属“办公桌面板块”大类,其下又细分为资源管理、角色权限管理等二级类。

    如图6.6所示,在二级分类下包含了具体的系统资源,如资源管理类下就包含了资源分类管理、资源管理、操作管理和权限管理等管理资源。

 

 

图6.5 资源分类管理

 

 

图6.6 资源管理

 

    从图6.6可以看出,基于WEB应用程序的特点,本系统的可分配资源大多是一些服务器端ASPX页面应用程序。对于这些ASPX页面,在资源数据表中保存着对应的链接地址。

    同一个资源可能对应着多个不同的操作,如对数据库表资源的查询、修改、删除等操作。由于本系统的可分配资源大多是一些服务器端页面,因此系统的资源操作主要是页面链接(link)。保存操作的数据表包括操作名称(如link)和操作功能描述两个字段。

    资源以及对资源的某项操作就构成了可以向用户分配的权限。如图6.7的ASPX页面原型所示,“冻结流程”和“link”操作就是一项可分配的权限,把它分配给用户,用户就可以访问服务器端的流程冻结程序页面,完成对流程的冻结管理。

    事实上,根据分配给用户的不同权限(页面链接),用户登录系统后,在如图6.6的页面左侧菜单将显示用户可以访问的功能板块(资源分类,如业务数据库管理),以及功能板块下用户可以点击访问的页面菜单,从而控制不同用户的资源访问权限。图6.6的左侧菜单显示的是超级管理员可以点击访问的资源。

 

图6.7 权限管理

 

6.5.2 资源管理的程序实现

   

    资源管理板块的各程序实现方法类似,都使用了ASP.NET的DataGrid控件。下面主要讨论资源管理程序admin/Resource.aspx的具体实现。

    Resource.aspx页面程序的主要代码如下:

    <%@ Page language="c#" Codebehind="Resource.aspx.cs"

                       Inherits="workflow.admin.Resource" %>
    .......
    <body MS_POSITIONING="GridLayout" bgColor="#f5fafe">
        <form id="Form1" method="post" runat="server">
           <table height="60"  width="100%" border="0">
              <tr>
                  <td></td>
              </tr>
           </table>
           <table  width="100%"  border="0">
              <tr>
              <td style="FONT-SIZE: 16px" align="center">资源管理数据表</td>
              </tr>
              <tr height="50">

                 <!-- span控件主要用于显示错误信息,当然也完全可以用Label控件
                 <td align="right"><span id="Message" style="FONT-SIZE: 11pt; COLOR: red;

                    FONT-FAMILY: Arial" runat="server"></span>

                 </td>
              </tr>
              <tr>
                 <td>

                    <asp:datagrid id="DataGrid1" runat="server"

                       HeaderStyle-HorizontalAlign="Center"  Width="100%"

                                DataKeyField="ResourceID" AllowPaging="True">
                         <ItemStyle Font-Size="13px" HorizontalAlign="Center" Height="28px"

                             VerticalAlign="Bottom"></ItemStyle>
                         <HeaderStyle Font-Size="16px" HorizontalAlign="Center" Height="30px"

                            VerticalAlign="Middle" BackColor="#EEEEEE"></HeaderStyle>
                         <Columns>
                             <asp:TemplateColumn HeaderText="序号">
                              <ItemTemplate>
                               <FONT face="宋体">

                                 <!-- 在模板列使用数据绑定容器,itemindex是容器固有的数据项,

                                      记录每一个记录的索引号,计数从0开始 -->
                                 <%#(int)DataBinder.eval_r(Container, "itemindex") + 1%>
                               </FONT>
                             </ItemTemplate>
                            </asp:TemplateColumn>
                            <asp:TemplateColumn HeaderText="资源分类">
                              <ItemTemplate>
                                <%#DataBinder.eval_r(Container.DataItem,"fullcategoryname")%>
                              </ItemTemplate>
                              <EditItemTemplate>
                                <asp:DropDownList id="DropDownList2" runat="server">

                                </asp:DropDownList>
                              </EditItemTemplate>
                            </asp:TemplateColumn>
                            <asp:BoundColumn DataField="ResourceName" HeaderText="资源名称">

                            </asp:BoundColumn>
                            <asp:BoundColumn DataField="Link" HeaderText="链接地址">

                            </asp:BoundColumn>
                            <asp:EditCommandColumn ButtonType="LinkButton" UpdateText="更新"

                                 CancelText="取消" EditText="编辑">

                            </asp:EditCommandColumn>
                            <asp:TemplateColumn>
                              <ItemTemplate>
                                <asp:LinkButton id="LinkButton1" CommandName="Delete"

                                     runat="server">删除</asp:LinkButton>
                              </ItemTemplate>
                            </asp:TemplateColumn>
                         </Columns>
                      <PagerStyle Font-Size="9pt" HorizontalAlign="Right" ForeColor="#3366FF"

                          Mode="NumericPages"></PagerStyle>
                   </asp:datagrid></td>
              </tr>
         </table>
         <table height="80"  width="100%" align="center" border="0">
          <tr>
            <td>&nbsp;</td>
          </tr>
         </table>

         <!-- 以下代码是添加资源的控件 -->
         <table width="100%" border="0" cellPadding="0" cellSpacing="0">
            <tr height="25">
               <TD>添加资源</TD>
            </TR>
         </TABLE>
         <table width="100%" border="0" cellspacing="2" cellpadding="2">
           <tr>
             <td width="15%">资源类别(板块):</td>
             <td width="30%">

                <!-- 通过绑定了数据源的下拉列表选择资源类别 -->
                <asp:DropDownList id="DropDownList1" DataValueField="CategoryID"

                    DataTextField="fullcategoryname"  runat="server">

                </asp:DropDownList>

            </td>
            <td width="15%">资源名称:</td>
            <td width="40%">&nbsp;
               <asp:TextBox id="TextBox1" runat="server" Columns="30"></asp:TextBox>
            </td>
          </tr>
          <tr>
            <td>链接地址:</td>
            <td><asp:TextBox id="TextBox2" runat="server" Columns="60"></asp:TextBox></td>
            <td></td>
            <td>&nbsp;</td>
          </tr>
          <tr>
            <td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td>
          </tr>
          <tr>
            <td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td>
            <td>&nbsp;<asp:Button id="Button1" runat="server" Text="添加资源"></asp:Button>

               <!-- 利用label控件显示添加资源操作的错误信息 -->
               <asp:Label id="Label1" runat="server" ForeColor="Red"></asp:Label>

            </td>
          </tr>
        </table>

        ......

     </body>

    有关DataGrid控件的说明

    1、DataGrid数据列设置:在DataGrid空件属性中将AutoGenerateColumns设置为false,右键点击控件DataGrid,选择属性生成器。如图6.8所示:

图6.8 设置DataGrid控件数据列

    其中绑定列如果选择只读,则该列不可编辑。

    2、资源分类模板列的编辑:右键点击DataGrid控件,选择编辑相应模板列。图6.9中,ItemTemplate是显示项,在页面代码中通过绑定容器列显示;在编辑项EditItemTemplate中拖入了一个下拉列表控件,控件的数据绑定在DataGrid控件的ItemDataBound(数据项动态绑定,主要是模板列)事件处理函数(将在后台代码中讨论)中进行。

图6.9 编辑资源分类模板列

 

    3、“删除”按钮模板列的编辑:如图6.10所示为模板列添加删除按钮。将链接按钮的命令名设置为Delete,就可以利用DataGrid控件固有的删除事件处理机制。

图6.10 编辑“删除”按钮模板列

    4、DataGrid控件的分页设置:如图6.11所示,在DataGrid控件的属性生成器中选择分页,在模式中选择页码。页码点击事件在DataGrid控件的PageIndexChanged事件中处理。

图6.11 DataGrid控件分页设置

    5、DataGrid控件的事件处理函数设置:如图6.12所示,在DataGrid控件事件属性页设置本程序要使用的事件处理函数:

图6.12 DataGrid控件事件属性页设置

    在要添加事件处理函数的位置输入函数名后回车,.NET系统将自动在页面后台代码中添加对应名称的事件响应函数;也可以不输入函数名而直接回车,系统将创建默认名称的函数。图中DeleteCommand事件响应函数将用于响应“删除”模板列按钮,因为“删除”模板列按钮的命令名称已设置Delete。

 

(待续)

原创粉丝点击