【自然框架】 页面里的父类—— 改进和想法、解释

简介: 1、 从Control到GridView继承了多少层? (这个图可不是现做的,这是以前为了写QuickPager分页控件而弄的。http://www.cnblogs.com/jyk/archive/2009/04/29/1446033.html )        看上面的类图,远远超过三层了吧。

 

1、 从Control到GridView继承了多少层?

(这个图可不是现做的,这是以前为了写QuickPager分页控件而弄的。http://www.cnblogs.com/jyk/archive/2009/04/29/1446033.html ) 


      看上面的类图,远远超过三层了吧。如果简单的用“书上说,继承不能超过三层”、“组合优于继承”来衡量的话,那么.Net框架能得到什么样的结论呢?
      所以我说,简单的依靠“书上说”来作评价是很死板的,是根本就没有考虑具体的情况、没有仔细的了解而随便说的。

      当然我并不是说.Net框架继承了这么多层,我就可以多继承几层了,我完全没有这个意思。用不用继承,继承的层数,这个要根据具体问题具体分析的,不能简单的依据书上的话、很随意的做出结论。也不能被书上的话给框框死,就是“尽信书不如无书”吧。


2、 我为什么要用继承。

      我们在做CRM这一类的管理程序的时候,需要做很多的列表页面,这些页面都共同的几件事情要做,判断是否登录、判断是否有权限访问、验证URL参数、给属性赋值等(这个是依据自然框架来说的,对于您来说也许没有这么多,但是总会有共同的事情吧,如果没有那就不需要用继承了)。很显然这些相同的事情不能让每个列表页面都亲自处理一遍,这个工作效率就太低了,冗余代码也很多。那么怎么办呢?我想到的就是继承。建立一个父类,把这些事情都交给父类去做,子类“坐享其成”就可以了。


3、 组合
      上面说了,要把这些共同的事情交给父类去做,那么是不是说就一定要父类亲自去做呢?很显然不是的。比如验证是否登录,这个我就是定义了UserManage、BaseUserInfo两个类来处理的。而在父类里面就是通过这两个类来实现判断是否登录的功能的,这个是不是传说中的“has A”呢?再弱弱的问一下,这个是不是组合呢?(这个我确实比较模糊,是“has A”比较有把握,但是算不算组合就真的不清楚了,望指教)。

如果要把共同的事情都做成类,然后组合的话,那么看看我们要做多少?
 判断是否登录
 判断是否有权限访问
 判断URL参数,每个页面的参数不尽相同,FunctionID是都会传递的,DataID是表单页面的,DepartmentID有时候会有。
 给属性赋值,不同类型的页面,赋值的方法是不一样的。

      这么多的“选项”,并不是每一个页面都需要,有的需要一个,有的需要几个,那么是不是要做出选择呢?如果我有100个列表页面,每一个页面都要选择一下吗?这100个列表页面的选择都是一样的呀,每个页面都做一次,是不是重复了呀。所以还是需要做一个父类,让父类去做选择,子类还是“坐享其成”就可以了。表单页面也是相同的情况。所以我觉得即使用了组合,那么继承的层数还是这些,不会有任何的影响。呵呵。

      所以我才定义了三个父类:列表页面的父类、表单页面的父类、删除页面的父类。如果继承只是这样的话(一层),那么我估计大家也就没有什么异议了吧。但是我又让这三个父类继承了一个父类——PageURL(判断URL的),估计这个是大家看不惯的地方吧,因为这个用OO的思路是完全解释不通的,他们有父子关系吗?没有。既然没有,那么为什么要用继承?为什么不把判断URL的地方做成单独的类,然后再去调用,就像判断是否登录的那样?

      我这么做的目的很简单,就是为了把相同的功能放到父类里面去,至于有没有父子关系,我不想过多的考虑,就像以前大家讨论“book.Save()”是否OO一样,管他O不O呢,好用就行,不用特意去迎合在现实里面的意义吧。既然都需要判断URL参数,那就放在父类里面好了。

      当然,判断URL参数的地方没有做成单独的类还有一个原因,那就是每一类的页面的判断的参数都不一样,还有一些特殊的页面判断的方式也不一样,我把判断的函数定义成virtual的,这样如果子类的判断方式不一样的话,那么就可以通过override来重写成自己的判断方式,这个不知道做成单独的类是否可以达到这样的功能。比如说表单页面的父类就override了验证DataID的函数。


4、 修改。
      看了大家的回复,也确实觉得有一个地方确实不适合,那就是判断是否有权限访问页面的功能,于是思考了一下,应该把这个功能从父类里面移出去,移出去后放在了BaseUserInfo类里面了。

5、修改后的类图


      
      这是我的想法,欢迎大家拍板砖,呵呵。

      好像大家都没有时间下载代码,我就挑点主要的发一下吧。完整代码下载:http://www.cnblogs.com/jyk/archive/2009/09/09/1563246.html

1、PageURL

namespace  Nature.UI.Base
img_405b18b4b6584ae338e0f6ecaf736533.gifimg_1c53668bcee393edac0d7b3b3daff1ae.gif
{
img_2887d91d0594ef8793c1db92b8a1d545.gifimg_7a2b9a960ee9a98bfd25d306d55009f8.gif    
/**//// <summary>
    
/// 处理URL参数
    
/// 接收URL传递过来的模块ID,大部分页面都需要使用这个ID
    
/// </summary>

    public partial class PageURL : PagePermission
img_2887d91d0594ef8793c1db92b8a1d545.gifimg_7a2b9a960ee9a98bfd25d306d55009f8.gif    
{
img_7a2b9a960ee9a98bfd25d306d55009f8.gifimg_2887d91d0594ef8793c1db92b8a1d545.gif        
定义属性,记录URL参数值#region 定义属性,记录URL参数值
img_2887d91d0594ef8793c1db92b8a1d545.gifimg_7a2b9a960ee9a98bfd25d306d55009f8.gif        
/**//// <summary>
        
/// FunctionID,功能节点ID
        
/// </summary>

        public string FunctionID = string.Empty;

img_2887d91d0594ef8793c1db92b8a1d545.gifimg_7a2b9a960ee9a98bfd25d306d55009f8.gif        
/**//// <summary>
        
/// 接收URL传递过来的记录ID,用于显示、修改数据
        
/// </summary>

        public string DataID;

img_2887d91d0594ef8793c1db92b8a1d545.gifimg_7a2b9a960ee9a98bfd25d306d55009f8.gif        
/**//// <summary>
        
///  按钮ID,用于是否可用按钮的验证
        
/// </summary>

        public string ButtonID;

img_2887d91d0594ef8793c1db92b8a1d545.gifimg_7a2b9a960ee9a98bfd25d306d55009f8.gif        
/**//// <summary>
        
/// 部门ID。string.Empty 表示没有传递参数
        
/// </summary>

        public string DepartmentID = string.Empty;

img_2887d91d0594ef8793c1db92b8a1d545.gifimg_7a2b9a960ee9a98bfd25d306d55009f8.gif        
/**//// <summary>
        
/// foreign key column 外键ID。string.Empty 表示没有传递参数
        
/// </summary>

        public string ForeignID = string.Empty;
        
#endregion


img_2887d91d0594ef8793c1db92b8a1d545.gifimg_7a2b9a960ee9a98bfd25d306d55009f8.gif        
/**//// <summary>
        
/// 页面里的标题
        
/// </summary>

        public Label Lbl_Title;             //页面里的标题

img_7a2b9a960ee9a98bfd25d306d55009f8.gifimg_2887d91d0594ef8793c1db92b8a1d545.gif        
初始化 在Page_Load之间执行#region 初始化 在Page_Load之间执行
img_2887d91d0594ef8793c1db92b8a1d545.gifimg_7a2b9a960ee9a98bfd25d306d55009f8.gif        
/**//// <summary>
        
/// 提取URL里面的参数,验证参数
        
/// </summary>
        
/// <param name="e"></param>

        protected override void OnInit(EventArgs e)
img_2887d91d0594ef8793c1db92b8a1d545.gifimg_7a2b9a960ee9a98bfd25d306d55009f8.gif        
{
            
base.OnInit(e);

            
//调用函数来设置FunctionID,不同类型的页面就可以用不同的方式来设置FunctionID了。
            SetFunctionID();
            
//调用函数来设置ButtonID。
            SetButtonID();

            
//调用函数来设置DataID。
            SetDataID();

            
//调用函数来设置DepartmentID(部门ID)。
            SetDepartmentID();

            
//调用函数来设置ForeignID(外键ID)。
            SetForeignID();

            
if (!Page.IsPostBack)
img_2887d91d0594ef8793c1db92b8a1d545.gifimg_7a2b9a960ee9a98bfd25d306d55009f8.gif            
{
                
//设置标题
                SetPageTitle();
            }

        }

        
#endregion



img_7a2b9a960ee9a98bfd25d306d55009f8.gifimg_2887d91d0594ef8793c1db92b8a1d545.gif        
清除IE缓存#region 清除IE缓存
img_2887d91d0594ef8793c1db92b8a1d545.gifimg_7a2b9a960ee9a98bfd25d306d55009f8.gif        
/**//// <summary>
        
/// 清除IE缓存
        
/// </summary>
        
/// <param name="e"></param>

        protected override void OnLoad(EventArgs e)
img_2887d91d0594ef8793c1db92b8a1d545.gifimg_7a2b9a960ee9a98bfd25d306d55009f8.gif        
{
            
base.OnLoad(e);
            
//清除IE缓存
            Response.Cache.SetNoStore();
        }

        
#endregion


       
    }

}

 

namespace  Nature.UI.Base
img_405b18b4b6584ae338e0f6ecaf736533.gifimg_1c53668bcee393edac0d7b3b3daff1ae.gif
{
img_2887d91d0594ef8793c1db92b8a1d545.gifimg_7a2b9a960ee9a98bfd25d306d55009f8.gif    
/**//// <summary>
    
/// 说明
    
/// </summary>

    public partial class PageURL : PagePermission
img_2887d91d0594ef8793c1db92b8a1d545.gifimg_7a2b9a960ee9a98bfd25d306d55009f8.gif    
{
img_7a2b9a960ee9a98bfd25d306d55009f8.gifimg_2887d91d0594ef8793c1db92b8a1d545.gif        
设置标题#region 设置标题
img_2887d91d0594ef8793c1db92b8a1d545.gifimg_7a2b9a960ee9a98bfd25d306d55009f8.gif        
/**//// <summary>
        
/// 设置标题
        
/// </summary>

        private void SetPageTitle()
img_2887d91d0594ef8793c1db92b8a1d545.gifimg_7a2b9a960ee9a98bfd25d306d55009f8.gif        
{
            
if (this.Lbl_Title != null)
img_2887d91d0594ef8793c1db92b8a1d545.gifimg_7a2b9a960ee9a98bfd25d306d55009f8.gif            
{
                
string sql = "select FunctionTitle from Manage_Function_Info where FunctionID=" + this.FunctionID;
                
this.Lbl_Title.Text = dal_Customer.ExecuteString(sql);
            }

        }

        
#endregion



img_7a2b9a960ee9a98bfd25d306d55009f8.gifimg_2887d91d0594ef8793c1db92b8a1d545.gif        
用抽象函数的方式设置FunctionID#region 用抽象函数的方式设置FunctionID
img_2887d91d0594ef8793c1db92b8a1d545.gifimg_7a2b9a960ee9a98bfd25d306d55009f8.gif        
/**//// <summary>
        
/// 设置FunctionID。
        
/// </summary>

        protected virtual void SetFunctionID()
img_2887d91d0594ef8793c1db92b8a1d545.gifimg_7a2b9a960ee9a98bfd25d306d55009f8.gif        
{
            
//DataList.aspx、DataForm.aspx 页面通过URL里的参数设置。
            
//其他页面自行设置

            
this.FunctionID = Request.QueryString["fid"];
img_7a2b9a960ee9a98bfd25d306d55009f8.gifimg_2887d91d0594ef8793c1db92b8a1d545.gif            
验证模块ID参数是否是数字。#region 验证模块ID参数是否是数字。
            
if (!Functions.IsInt(this.FunctionID))
img_2887d91d0594ef8793c1db92b8a1d545.gifimg_7a2b9a960ee9a98bfd25d306d55009f8.gif            
{
                Response.Write(
"模块参数不正确!");
                Response.End();
            }

            
#endregion


        }

        
#endregion


img_7a2b9a960ee9a98bfd25d306d55009f8.gifimg_2887d91d0594ef8793c1db92b8a1d545.gif        
用抽象函数的方式设置DataID#region 用抽象函数的方式设置DataID
img_2887d91d0594ef8793c1db92b8a1d545.gifimg_7a2b9a960ee9a98bfd25d306d55009f8.gif        
/**//// <summary>
        
/// 设置DataID。
        
/// </summary>

        protected virtual void SetDataID()
img_2887d91d0594ef8793c1db92b8a1d545.gifimg_7a2b9a960ee9a98bfd25d306d55009f8.gif        
{
            
//DataList.aspx、DataForm.aspx 页面通过URL里的参数设置。
            
//其他页面自行设置
            this.DataID = Request.QueryString["id"];
            
if (!Functions.IsInt(DataID))
img_2887d91d0594ef8793c1db92b8a1d545.gifimg_7a2b9a960ee9a98bfd25d306d55009f8.gif            
{
                
//没有传递,设置默认值
                DataID = string.Empty;
            }

        }

        
#endregion


img_7a2b9a960ee9a98bfd25d306d55009f8.gifimg_2887d91d0594ef8793c1db92b8a1d545.gif        
用抽象函数的方式设置ButtonID#region 用抽象函数的方式设置ButtonID
img_2887d91d0594ef8793c1db92b8a1d545.gifimg_7a2b9a960ee9a98bfd25d306d55009f8.gif        
/**//// <summary>
        
/// 设置ButtonID。
        
/// </summary>

        protected virtual void SetButtonID()
img_2887d91d0594ef8793c1db92b8a1d545.gifimg_7a2b9a960ee9a98bfd25d306d55009f8.gif        
{
            
//DataList.aspx、DataForm.aspx 页面通过URL里的参数设置。
            
//其他页面自行设置
            this.ButtonID = Request.QueryString["bid"];
            
if (!Functions.IsInt(ButtonID))
img_2887d91d0594ef8793c1db92b8a1d545.gifimg_7a2b9a960ee9a98bfd25d306d55009f8.gif            
{
                
//没有传递,设置默认值
                ButtonID = string.Empty;
            }

        }

        
#endregion


img_7a2b9a960ee9a98bfd25d306d55009f8.gifimg_2887d91d0594ef8793c1db92b8a1d545.gif        
验证外键#region 验证外键
img_2887d91d0594ef8793c1db92b8a1d545.gifimg_7a2b9a960ee9a98bfd25d306d55009f8.gif        
/**//// <summary>
        
/// 验证外键
        
/// </summary>

        private void SetForeignID()
img_2887d91d0594ef8793c1db92b8a1d545.gifimg_7a2b9a960ee9a98bfd25d306d55009f8.gif        
{
            
this.ForeignID = Request.QueryString["frid"];
img_7a2b9a960ee9a98bfd25d306d55009f8.gifimg_2887d91d0594ef8793c1db92b8a1d545.gif            
验证外键ID参数是否是数字。#region 验证外键ID参数是否是数字。
            
if (!Functions.IsInt(ForeignID))
img_2887d91d0594ef8793c1db92b8a1d545.gifimg_7a2b9a960ee9a98bfd25d306d55009f8.gif            
{
                
//没有传递,设置默认值
                ForeignID = string.Empty;
            }

            
#endregion

        }

        
#endregion


img_7a2b9a960ee9a98bfd25d306d55009f8.gifimg_2887d91d0594ef8793c1db92b8a1d545.gif        
验证部门ID#region 验证部门ID
img_2887d91d0594ef8793c1db92b8a1d545.gifimg_7a2b9a960ee9a98bfd25d306d55009f8.gif        
/**//// <summary>
        
/// 验证部门ID
        
/// </summary>

        private void SetDepartmentID()
img_2887d91d0594ef8793c1db92b8a1d545.gifimg_7a2b9a960ee9a98bfd25d306d55009f8.gif        
{
            
this.DepartmentID = Request.QueryString["did"];
img_7a2b9a960ee9a98bfd25d306d55009f8.gifimg_2887d91d0594ef8793c1db92b8a1d545.gif            
验证部门ID参数是否是数字。#region 验证部门ID参数是否是数字。
            
if (!Functions.IsInt(DepartmentID))
img_2887d91d0594ef8793c1db92b8a1d545.gifimg_7a2b9a960ee9a98bfd25d306d55009f8.gif            
{
                
//没有传递,设置默认值
                DepartmentID = string.Empty;
            }

            
#endregion

        }

        
#endregion


    }

}


2、BasePageList

namespace  Nature.UI.Base
img_405b18b4b6584ae338e0f6ecaf736533.gifimg_1c53668bcee393edac0d7b3b3daff1ae.gif
{
img_2887d91d0594ef8793c1db92b8a1d545.gifimg_7a2b9a960ee9a98bfd25d306d55009f8.gif    
/**//// <summary>
    
/// 列表页面的基类
    
/// 这个算不算模板模式呢?
    
/// </summary>

    public partial class BasePageList : PageURL
img_2887d91d0594ef8793c1db92b8a1d545.gifimg_7a2b9a960ee9a98bfd25d306d55009f8.gif    
{
img_7a2b9a960ee9a98bfd25d306d55009f8.gifimg_2887d91d0594ef8793c1db92b8a1d545.gif        
定义共用的控件,以便于统一控制#region 定义共用的控件,以便于统一控制
img_2887d91d0594ef8793c1db92b8a1d545.gifimg_7a2b9a960ee9a98bfd25d306d55009f8.gif        
/**//// <summary>
        
/// 分页用的控件
        
/// </summary>

        public QuickPager ctl_CommonPager;

img_2887d91d0594ef8793c1db92b8a1d545.gifimg_7a2b9a960ee9a98bfd25d306d55009f8.gif        
/**//// <summary>
        
/// 显示数据用的控件
        
/// </summary>

        public MyGrid ctl_CommonGrid;

img_2887d91d0594ef8793c1db92b8a1d545.gifimg_7a2b9a960ee9a98bfd25d306d55009f8.gif        
/**//// <summary>
        
/// 查询控件
        
/// </summary>

        public MyFind ctl_CommonFind;

img_2887d91d0594ef8793c1db92b8a1d545.gifimg_7a2b9a960ee9a98bfd25d306d55009f8.gif        
/**//// <summary>
        
/// 查询按钮
        
/// </summary>

        public Button btn_Search;

img_2887d91d0594ef8793c1db92b8a1d545.gifimg_7a2b9a960ee9a98bfd25d306d55009f8.gif        
/**//// <summary>
        
/// 按钮组,功能(操作)按钮
        
/// </summary>

        public OperationButtonBar ctl_CommonButtonBar;

        
#endregion


img_7a2b9a960ee9a98bfd25d306d55009f8.gifimg_2887d91d0594ef8793c1db92b8a1d545.gif        
在 OnInit 事件里面设置各个自定义控件的属性和关联#region 在 OnInit 事件里面设置各个自定义控件的属性和关联
img_2887d91d0594ef8793c1db92b8a1d545.gifimg_7a2b9a960ee9a98bfd25d306d55009f8.gif        
/**//// <summary>
        
/// 在 OnInit 事件里面设置各个自定义控件的属性和关联
        
/// </summary>
        
/// <param name="e"></param>

        protected override void OnInit(EventArgs e)
img_2887d91d0594ef8793c1db92b8a1d545.gifimg_7a2b9a960ee9a98bfd25d306d55009f8.gif        
{
            
//父类里面验证参数是否正确
            base.OnInit(e);

            
//验证是否有权限访问。
            MyUser.CheckFunctionID(this.FunctionID);

            
//设置分页控件的属性和事件
            SetQuickPagerInfo();

            
//设置数据表格的属性
            SetGridInfo();

            
//设置查询控件的属性
            SetFindControlInfo();

            
//设置操作按钮的属性
            SetButtonBarInfo();

        }

        
#endregion


    }

}


namespace  Nature.UI.Base
img_405b18b4b6584ae338e0f6ecaf736533.gifimg_1c53668bcee393edac0d7b3b3daff1ae.gif
{
img_2887d91d0594ef8793c1db92b8a1d545.gifimg_7a2b9a960ee9a98bfd25d306d55009f8.gif    
/**//// <summary>
    
/// 列表的基类。给共用控件设置属性和事件。
    
/// </summary>

    public partial class BasePageList : PageURL
img_2887d91d0594ef8793c1db92b8a1d545.gifimg_7a2b9a960ee9a98bfd25d306d55009f8.gif    
{
img_7a2b9a960ee9a98bfd25d306d55009f8.gifimg_2887d91d0594ef8793c1db92b8a1d545.gif        
设置分页控件的属性#region 设置分页控件的属性
img_2887d91d0594ef8793c1db92b8a1d545.gifimg_7a2b9a960ee9a98bfd25d306d55009f8.gif        
/**//// <summary>
        
/// 从元数据里提取信息,设置分页控件的属性
        
/// </summary>

        public virtual void SetQuickPagerInfo()
img_2887d91d0594ef8793c1db92b8a1d545.gifimg_7a2b9a960ee9a98bfd25d306d55009f8.gif        
{
            
if (ctl_CommonPager != null)
img_2887d91d0594ef8793c1db92b8a1d545.gifimg_7a2b9a960ee9a98bfd25d306d55009f8.gif            
{
                ctl_CommonPager.DAL 
= dal_Customer;                     //设置客户的数据访问函数库
                ctl_CommonPager.PagerSQL.Page = this;                   //设置Page,用于保存属性的状态

                
if (ctl_CommonGrid != null)
                    ctl_CommonPager.ShowDataControl 
= ctl_CommonGrid;   //绑定数据显示控件

                ctl_CommonPager.FunctionID 
= this.FunctionID;           //设置模块标志,即功能节点的ID

                ctl_CommonPager.SetPagerInfo(dal_Metadata);             
//从配置信息里面提取数据

                
//获取配置信息里面的“固定查询条件”
                string tableQueryAlways = ctl_CommonPager.PagerSQL.TableQueryAlways;
                
string tmpQuery = "";

img_7a2b9a960ee9a98bfd25d306d55009f8.gifimg_2887d91d0594ef8793c1db92b8a1d545.gif                
判断是否传入id,如果传入了再判断是否有外键。显示从表的列表的时候使用#region 判断是否传入id,如果传入了再判断是否有外键。显示从表的列表的时候使用
                
if (this.DataID != null)
img_2887d91d0594ef8793c1db92b8a1d545.gifimg_7a2b9a960ee9a98bfd25d306d55009f8.gif                
{
                    
string ForeignColumn = this.dal_Metadata.ExecuteString("select top 1 ForeignColumn  from Manage_Function_Info where FunctionID=" + this.FunctionID);
                    
if (ForeignColumn != null && ForeignColumn.Length > 0)
img_2887d91d0594ef8793c1db92b8a1d545.gifimg_7a2b9a960ee9a98bfd25d306d55009f8.gif                    
{
                        
//设置固定查询条件
                        tmpQuery = ForeignColumn + "=" + this.DataID;
                        
if (tableQueryAlways.Length == 0)
                            tableQueryAlways 
= tmpQuery;
                        
else
                            tableQueryAlways 
+= " and " + tmpQuery;
                    }

                }

                
#endregion


img_7a2b9a960ee9a98bfd25d306d55009f8.gifimg_2887d91d0594ef8793c1db92b8a1d545.gif                
判断用户角色是否有列表的过滤方案#region 判断用户角色是否有列表的过滤方案
                tmpQuery 
= MyUser.GetResourceListCastSQL(this.FunctionID);
                
if (tmpQuery.Length > 0)
img_2887d91d0594ef8793c1db92b8a1d545.gifimg_7a2b9a960ee9a98bfd25d306d55009f8.gif                
{
                    
//有过滤方案,即查询语句。添加到分页控件的固定查询条件里。
                    if (tableQueryAlways.Length == 0)
                        tableQueryAlways 
= tmpQuery;
                    
else
                        tableQueryAlways 
+= " and " + tmpQuery;
                }

                
#endregion


                
//设置分页控件的固定查询条件。
                ctl_CommonPager.PagerSQL.TableQueryAlways = tableQueryAlways;

            }


        }

        
#endregion


img_7a2b9a960ee9a98bfd25d306d55009f8.gifimg_2887d91d0594ef8793c1db92b8a1d545.gif        
设置显示数据控件的属性#region 设置显示数据控件的属性
img_2887d91d0594ef8793c1db92b8a1d545.gifimg_7a2b9a960ee9a98bfd25d306d55009f8.gif        
/**//// <summary>
        
/// 设置显示数据控件的属性
        
/// </summary>

        public virtual void SetGridInfo()
img_2887d91d0594ef8793c1db92b8a1d545.gifimg_7a2b9a960ee9a98bfd25d306d55009f8.gif        
{
            
if (ctl_CommonGrid != null)
img_2887d91d0594ef8793c1db92b8a1d545.gifimg_7a2b9a960ee9a98bfd25d306d55009f8.gif            
{
                SetGridInfo(ctl_CommonGrid);
            }

        }


img_2887d91d0594ef8793c1db92b8a1d545.gifimg_7a2b9a960ee9a98bfd25d306d55009f8.gif        
/**//// <summary>
        
/// 设置数据显示控件实例的属性
        
/// </summary>
        
/// <param name="grid">数据显示控件MyGrid</param>

        public void SetGridInfo(MyGrid grid)
img_2887d91d0594ef8793c1db92b8a1d545.gifimg_7a2b9a960ee9a98bfd25d306d55009f8.gif        
{
            UDRMGrid myUDRM 
= new UDRMGrid();
            grid.UDRM 
= myUDRM;
            myUDRM.DALCustomer 
= base.dal_Customer;   //设置客户数据的数据访问函数库
            myUDRM.DALMetadata = base.dal_Metadata;   //设置元数据的数据访问函数库
            myUDRM.FunctionID = this.FunctionID;      //设置模块标志,即功能节点的ID

            
//设置当前用户可以访问的字段——即权限到列表字段
            myUDRM.RoleColumnID = MyUser.GetUserColumnIDs(this.FunctionID, "1");
        }

        
#endregion



img_7a2b9a960ee9a98bfd25d306d55009f8.gifimg_2887d91d0594ef8793c1db92b8a1d545.gif        
设置查询控件的属性#region 设置查询控件的属性
img_2887d91d0594ef8793c1db92b8a1d545.gifimg_7a2b9a960ee9a98bfd25d306d55009f8.gif        
/**//// <summary>
        
/// 设置查询控件的属性
        
/// </summary>

        public virtual void SetFindControlInfo()
img_2887d91d0594ef8793c1db92b8a1d545.gifimg_7a2b9a960ee9a98bfd25d306d55009f8.gif        
{
            
if (ctl_CommonFind != null)
img_2887d91d0594ef8793c1db92b8a1d545.gifimg_7a2b9a960ee9a98bfd25d306d55009f8.gif            
{
                SetFindControlInfo(ctl_CommonFind);
            }

            
if (btn_Search != null)
img_2887d91d0594ef8793c1db92b8a1d545.gifimg_7a2b9a960ee9a98bfd25d306d55009f8.gif            
{
                
this.btn_Search.Click += new EventHandler(Btn_Search_Click);
            }

        }


img_2887d91d0594ef8793c1db92b8a1d545.gifimg_7a2b9a960ee9a98bfd25d306d55009f8.gif        
/**//// <summary>
        
/// 设置查询控件的属性
        
/// </summary>
        
/// <param name="find">查询控件的实例</param>

        public void SetFindControlInfo(MyFind find)
img_2887d91d0594ef8793c1db92b8a1d545.gifimg_7a2b9a960ee9a98bfd25d306d55009f8.gif        
{
            UDRMFind myUDRM 
= new UDRMFind();
            find.UDRM 
= myUDRM;
            find.User 
= MyUser;

            myUDRM.DALMetadata 
= base.dal_Customer;                  //设置数据访问函数库
            myUDRM.DALCustomer = base.dal_Metadata;                  //设置数据访问函数库
            myUDRM.FunctionID = this.FunctionID;    //设置模块标志,即功能节点的ID

            find.SetTDColumns 
= 4;                //设置列数

            myUDRM.RoleColumnID 
= MyUser.GetUserColumnIDs(this.FunctionID, "3");
        }

        
#endregion


img_7a2b9a960ee9a98bfd25d306d55009f8.gifimg_2887d91d0594ef8793c1db92b8a1d545.gif        
查询按钮触发的事件#region 查询按钮触发的事件
img_2887d91d0594ef8793c1db92b8a1d545.gifimg_7a2b9a960ee9a98bfd25d306d55009f8.gif        
/**//// <summary>
        
/// 查询按钮触发的事件
        
/// </summary>
        
/// <param name="sender"></param>
        
/// <param name="e"></param>

        public virtual void Btn_Search_Click(object sender, EventArgs e)
img_2887d91d0594ef8793c1db92b8a1d545.gifimg_7a2b9a960ee9a98bfd25d306d55009f8.gif        
{
            ctl_CommonPager.PagerSQL.TableQuery 
= this.ctl_CommonFind.GetSearchWhere();
            ctl_CommonPager.PagerSQL.CreateSQL();
            ctl_CommonPager.BindFirstPage();


            
//Response.Write(this.ctl_CommonFind.GetSearchWhere ());
        }

        
#endregion



img_7a2b9a960ee9a98bfd25d306d55009f8.gifimg_2887d91d0594ef8793c1db92b8a1d545.gif        
设置按钮组#region 设置按钮组
img_2887d91d0594ef8793c1db92b8a1d545.gifimg_7a2b9a960ee9a98bfd25d306d55009f8.gif        
/**//// <summary>
        
/// 设置按钮组
        
/// </summary>

        public virtual void SetButtonBarInfo()
img_2887d91d0594ef8793c1db92b8a1d545.gifimg_7a2b9a960ee9a98bfd25d306d55009f8.gif        
{
            
if (ctl_CommonButtonBar != null)
img_2887d91d0594ef8793c1db92b8a1d545.gifimg_7a2b9a960ee9a98bfd25d306d55009f8.gif            
{
                ctl_CommonButtonBar.FunctionID 
= this.FunctionID;
                ctl_CommonButtonBar.DAL 
= this.dal_Customer;

                
if (MyUser.PersonID == "1")
                    
//超级管理员不过滤按钮
                    ctl_CommonButtonBar.SetRoleButtonID = "";
                
else
                    
//其他用户验证按钮
                    ctl_CommonButtonBar.SetRoleButtonID = MyUser.GetUserButtonID(this.FunctionID);

            }

        }

        
#endregion


        
//验证
img_7a2b9a960ee9a98bfd25d306d55009f8.gifimg_2887d91d0594ef8793c1db92b8a1d545.gif
        验证DataID#region 验证DataID
img_2887d91d0594ef8793c1db92b8a1d545.gifimg_7a2b9a960ee9a98bfd25d306d55009f8.gif        
/**//// <summary>
        
/// 验证DataID。
        
/// </summary>

        protected override void SetDataID()
img_2887d91d0594ef8793c1db92b8a1d545.gifimg_7a2b9a960ee9a98bfd25d306d55009f8.gif        
{
            
base.SetDataID();

            
string dataID = this.DataID;

            
if (dataID == string.Empty)
img_2887d91d0594ef8793c1db92b8a1d545.gifimg_7a2b9a960ee9a98bfd25d306d55009f8.gif            
{
            }

            
else
img_2887d91d0594ef8793c1db92b8a1d545.gifimg_7a2b9a960ee9a98bfd25d306d55009f8.gif            
{
                
//传递了参数,需要验证
                if (!Functions.IsInt(dataID))
img_2887d91d0594ef8793c1db92b8a1d545.gifimg_7a2b9a960ee9a98bfd25d306d55009f8.gif                
{
                    Response.Write(
"DataID参数不正确!");
                    Response.End();
                }

            }

        }

        
#endregion


img_7a2b9a960ee9a98bfd25d306d55009f8.gifimg_2887d91d0594ef8793c1db92b8a1d545.gif        
验证列表页面与FunctionID是否匹配#region 验证列表页面与FunctionID是否匹配
img_2887d91d0594ef8793c1db92b8a1d545.gifimg_7a2b9a960ee9a98bfd25d306d55009f8.gif        
/**//// <summary>
        
/// 验证列表页面与FunctionID是否匹配
        
/// </summary>

        protected override void SetFunctionID()
img_2887d91d0594ef8793c1db92b8a1d545.gifimg_7a2b9a960ee9a98bfd25d306d55009f8.gif        
{
            
//基类里验证FunctionID是否是数字
            base.SetFunctionID();

img_7a2b9a960ee9a98bfd25d306d55009f8.gifimg_2887d91d0594ef8793c1db92b8a1d545.gif            
验证列表页面与FunctionID是否匹配#region 验证列表页面与FunctionID是否匹配
            
string webPath = Request.Url.LocalPath;

            
switch (webPath)
img_2887d91d0594ef8793c1db92b8a1d545.gifimg_7a2b9a960ee9a98bfd25d306d55009f8.gif            
{
                
case "/_CommonPage/DataList1.aspx":     //通用列表页面
                case "/_CommonPage/DataTab.aspx":       //通用标签页面
                    
//不需要做匹配验证
                    break;

                
default:
                    
//需要验证
                    string sql = "select top 1 1 from Manage_Function where FunctionID = " + this.FunctionID + "and WebURL like '" + webPath + "%'";
                    
if (this.dal_Customer.ExecuteExists(sql))
img_2887d91d0594ef8793c1db92b8a1d545.gifimg_7a2b9a960ee9a98bfd25d306d55009f8.gif                    
{
                        
//有记录,通过验证
                    }

                    
else
img_2887d91d0594ef8793c1db92b8a1d545.gifimg_7a2b9a960ee9a98bfd25d306d55009f8.gif                    
{
                        
//没有记录,不能继续
                        Response.Write("FunctionID和页面不匹配!");
                        Response.End();
                    }

                    
break;
            }

            
#endregion

        }

        
#endregion


    }

}


3、具体的列表页面

namespace  Nature.UI.Common
img_405b18b4b6584ae338e0f6ecaf736533.gifimg_1c53668bcee393edac0d7b3b3daff1ae.gif
{
img_2887d91d0594ef8793c1db92b8a1d545.gifimg_7a2b9a960ee9a98bfd25d306d55009f8.gif    
/**//// <summary>
    
/// 数据列表
    
/// </summary>

    public partial class DataList1 : Base.BasePageList  
img_2887d91d0594ef8793c1db92b8a1d545.gifimg_7a2b9a960ee9a98bfd25d306d55009f8.gif    
{
img_2887d91d0594ef8793c1db92b8a1d545.gifimg_7a2b9a960ee9a98bfd25d306d55009f8.gif        
/**//// <summary>
        
/// 是否显示查询条件
        
/// </summary>

        protected string isShowSearch = "";        //是否显示查询

img_2887d91d0594ef8793c1db92b8a1d545.gifimg_7a2b9a960ee9a98bfd25d306d55009f8.gif        
/**//// <summary>
        
/// 
        
/// </summary>
        
/// <param name="sender"></param>
        
/// <param name="e"></param>

        protected void Page_Load(object sender, EventArgs e)
img_2887d91d0594ef8793c1db92b8a1d545.gifimg_7a2b9a960ee9a98bfd25d306d55009f8.gif        
{
            
base.ForeignID = this.DataID;
        }


img_7a2b9a960ee9a98bfd25d306d55009f8.gifimg_2887d91d0594ef8793c1db92b8a1d545.gif        
刷新当前页面#region 刷新当前页面
img_2887d91d0594ef8793c1db92b8a1d545.gifimg_7a2b9a960ee9a98bfd25d306d55009f8.gif        
/**//// <summary>
        
/// 刷新当前页面
        
/// </summary>
        
/// <param name="sender"></param>
        
/// <param name="e"></param>

        protected void Btn_Reload_Click(object sender, System.EventArgs e)
img_2887d91d0594ef8793c1db92b8a1d545.gifimg_7a2b9a960ee9a98bfd25d306d55009f8.gif        
{
            
this.ctl_CommonPager.BindThisPage();
        }


img_2887d91d0594ef8793c1db92b8a1d545.gifimg_7a2b9a960ee9a98bfd25d306d55009f8.gif        
/**//// <summary>
        
/// 显示第一页
        
/// </summary>
        
/// <param name="sender"></param>
        
/// <param name="e"></param>

        protected void Btn_ReloadFirst_Click(object sender, System.EventArgs e)
img_2887d91d0594ef8793c1db92b8a1d545.gifimg_7a2b9a960ee9a98bfd25d306d55009f8.gif        
{
            
//this.ctl_CommonPager.CreateQuery();
            this.ctl_CommonPager.BindFirstPage();
        }


        
#endregion


img_7a2b9a960ee9a98bfd25d306d55009f8.gifimg_2887d91d0594ef8793c1db92b8a1d545.gif        
查询#region 查询
img_2887d91d0594ef8793c1db92b8a1d545.gifimg_7a2b9a960ee9a98bfd25d306d55009f8.gif        
/**//// <summary>
        
/// 查询事件
        
/// </summary>
        
/// <param name="sender"></param>
        
/// <param name="e"></param>

        public override void Btn_Search_Click(object sender, EventArgs e)
img_2887d91d0594ef8793c1db92b8a1d545.gifimg_7a2b9a960ee9a98bfd25d306d55009f8.gif        
{
            
base.Btn_Search_Click(sender, e);
            isShowSearch 
= "isShowSearch = 0;";
        }

        
        
#endregion


img_7a2b9a960ee9a98bfd25d306d55009f8.gifimg_2887d91d0594ef8793c1db92b8a1d545.gif        
导出到Excel#region 导出到Excel
img_2887d91d0594ef8793c1db92b8a1d545.gifimg_7a2b9a960ee9a98bfd25d306d55009f8.gif        
/**//// <summary>
        
/// 导出Excel的按钮事件
        
/// </summary>
        
/// <param name="sender"></param>
        
/// <param name="e"></param>

        protected void Btn_ToExcel_Click(object sender, System.EventArgs e)
img_2887d91d0594ef8793c1db92b8a1d545.gifimg_7a2b9a960ee9a98bfd25d306d55009f8.gif        
{
            
//导出到Excel
            Session["toExcelSQL"= ctl_CommonPager.PagerSQL.TableQuery ;
            
//Session["ViewCaseID"] = this.Lst_Case_List.SelectedValue;

            Response.Redirect(
"/_CommonPage/toExcel.aspx?id=-2&k=9&fid=" + FunctionID);

        }

        
#endregion


    }

}




 

< head  runat ="server" >
    
< title > <% = Lbl_Title.Text %> </ title >
    
<% = CssWeb %>  
    
< script  language ="javascript"  type ="text/javascript"  src ="/public/js/TableTR.js"   ></ script >
    
< script  language ="javascript"  type ="text/javascript"  src ="/public/js/My97DatePicker/WdatePicker.js"   ></ script >
    
</ head >
< body >
    
< form  id ="form1"  runat ="server" >
    
< div  style ="width:100%; font-size:14pt; text-align: center;vertical-align:middle;" >
        
< br  />< asp:Label  ID ="Lbl_Title"  runat ="server"  style ="font-size:14pt; " ></ asp:Label >
    
</ div >
    
< Nature:OperationButtonBar  ID ="ctl_CommonButtonBar"  runat ="server"   />
    
< div  id ="div_Search"  style ="display:none;"  align ="center" >< br  />
    
< fieldset  title ="查询条件"  style ="PADDING-BOTTOM:6px;BORDER-RIGHT: #666 1px solid; BORDER-TOP: #ddd 1px solid; BORDER-LEFT: #ddd 1px solid; BORDER-BOTTOM: #666 1px solid;" >< legend  style ="font-size:9pt;" > 查询条件 </ legend >
        
< table   width ="100%"  align ="center"  border ="0"  bgcolor ="#ffffff" >
            
< tr >
                
< td >< Nature:MyFind  id ="ctl_CommonFind"  runat ="server" /></ td >
                
< td  width ="50" >
                    
< asp:Button  ID ="Btn_Search"  runat ="server"  Text =" 查 询 "   />
                
</ td >
            
</ tr >
        
</ table >
    
</ fieldset >
    
</ div >
    
< div >
        
< Nature:MyGrid  ID ="ctl_CommonGrid"  runat ="server"   />
    
</ div >
    
< div >
        
< Nature:QuickPager  ID ="ctl_CommonPager"  runat ="server"  PageUIGO ="GO"   />
    
</ div >
    
< span  id ="dd" ></ span >
    
< span  style ="DISPLAY:none" >
         
< asp:button  id ="Btn_ToExcel"  runat ="server"  Text ="导出到Excel"  onclick ="Btn_ToExcel_Click" ></ asp:button >
        
< asp:button  id ="Btn_ToAccess"  runat ="server"  Text ="导出到Access" ></ asp:button >
        
< asp:button  id ="Btn_Reload"  runat ="server"  Text ="刷新本页"  onclick ="Btn_Reload_Click" ></ asp:button >
        
< asp:button  id ="Btn_ReloadFirst"  runat ="server"  Text ="刷新到第一页"  onclick ="Btn_ReloadFirst_Click" ></ asp:button >
        
< Nature:MyTextBox  id ="Txt_isShowSearch"  runat ="server" />
        
< iframe  id ="ifrmDel"  name ="ifrmDel"  width ="100"  height ="100" ></ iframe >
    
</ span >
    
</ form >
</ body >


==========================
= 希望我的想法,能够给您带来一点帮助! =
= 大家一起研究、讨论,共同提高、发财! =
==========================

相关文章
|
7月前
|
C++
C++:类的补充知识
C++:类的补充知识
42 0
|
Java
ChatGPT告诉你Java内部类 vs. 组合的区别
ChatGPT告诉你Java内部类 vs. 组合的区别
104 0
|
前端开发
前端学习案例8-寄生组合继承1
前端学习案例8-寄生组合继承1
68 0
前端学习案例8-寄生组合继承1
|
前端开发
前端学习案例9-寄生组合继承2
前端学习案例9-寄生组合继承2
61 0
前端学习案例9-寄生组合继承2
|
前端开发
前端学习案例7-组合继承
前端学习案例7-组合继承
75 0
前端学习案例7-组合继承
|
前端开发
前端学习案例7-寄生组合继承1
前端学习案例7-寄生组合继承1
75 0
前端学习案例7-寄生组合继承1
|
前端开发
前端学习案例6-组合继承
前端学习案例6-组合继承
62 0
前端学习案例6-组合继承
【Groovy】MOP 元对象协议与元编程 ( 方法合成引入 | 类内部获取 HandleMetaClass )
【Groovy】MOP 元对象协议与元编程 ( 方法合成引入 | 类内部获取 HandleMetaClass )
165 0
【Groovy】MOP 元对象协议与元编程 ( 方法合成引入 | 类内部获取 HandleMetaClass )
|
自然语言处理 编译器 程序员
带你读《计算机程序的构造和解释(原书第2版)典藏版》之一:构造过程抽象
《计算机程序的构造和解释(原书第2版)》1984年出版,成型于美国麻省理工学院(MIT)多年使用的一本教材,1996年修订为第2版。在过去的二十多年里,《计算机程序的构造和解释(原书第2版)》对于计算机科学的教育计划产生了深刻的影响。第2版中大部分重要程序设计系统都重新修改并做过测试,包括各种解释器和编译器。作者根据其后十余年的教学实践,还对其他许多细节做了相应的修改。
【自然框架】 页面里的父类—— (补充)
没想到下午发的《【自然框架】 页面里的父类——把共用的东东都交给父类,让子类专注于其他。 》启发了热烈讨论,还以为又是一大堆的口水回复呢。看到大家的热烈讨论我很高兴,这才是我希望的讨论环境,无论是支持的还是反对的,我都非常感谢。
978 0