动手做ASP.NET 2.0服务器端控件——AutoCheckTreeView(二)接口设计
感谢谭振林先生所著《道不远人——深入解析ASP.NET 2.0控件开发》
讨论完了功能,我们来思考一下这个控件应该怎么设计。
1,给控件取个名字吧,因为一开始小凡只是考虑了自动勾选功能,所以就叫它AutoCheckTreeView。
2,显然继承自TreeView要比重新做一个更方便,那好,AutoCheckTreeView : TreeView就这么决定了。
3,它要开放一些什么新增接口吗?想一下,有的时候需要自动勾选功能,有的时候不需要自动勾选,那应该留下一个开关属性。
4,数据绑定,那比如要重载DataSource属性和DataBind()方法喽。
5,我们不能要求用户必须以规定的格式数据源来绑定我们的控件,所以,我们需要用户告诉我们,哪个字段或者属性代表主键,哪个字段或者属性代表父主键,并且就像DropDownList一样,要有一个TextMember来告诉我们到时候节点显示哪个字段里面的内容。
6,如果绑定的数据源是DataSet,那我们还需要知道是绑定其中是哪个表。
7,为了节省用户劳动,我们可以把节点选择后的动作TreeNodeSelectAction添加作为一个公开属性,当绑定数据后,我们就可以把节点生成为该类型。
因此,所有的接口属性和公开方法就是如下:
- #region 变量
- private string dataPropertyName = String.Empty;
- /// <summary>
- /// 获取和设置单条数据中用于结构关系的列名或者属性名
- /// </summary>
- [Description("单条数据中用于结构关系的列名或者属性名"), DefaultValue("")]
- public string DataPropertyName
- {
- get
- {
- return ViewState["dataPropertyName"] == null ? dataPropertyName : ViewState["dataPropertyName"].ToString();
- }
- set
- {
- dataPropertyName = value;
- ViewState["dataPropertyName"] = value;
- }
- }
- private string dataParentPropertyName = String.Empty;
- /// <summary>
- /// 获取和设置单条数据中用于结构关系的父数据列名或者属性名
- /// </summary>
- [Description("单条数据中用于结构关系的父数据列名或者属性名"), DefaultValue("")]
- public string DataParentPropertyName
- {
- get
- {
- return ViewState["dataParentPropertyName"] == null ? dataParentPropertyName : ViewState["dataParentPropertyName"].ToString();
- }
- set
- {
- dataParentPropertyName = value;
- ViewState["dataParentPropertyName"] = value;
- }
- }
- private string tableName = String.Empty;
- /// <summary>
- /// 获取和设置表名称,用于当数据源为DataSet类型时
- /// </summary>
- [Description("表名称,用于当数据源为DataSet类型时"), DefaultValue("")]
- public string TableName
- {
- get
- {
- return ViewState["tableName"] == null ? tableName : ViewState["tableName"].ToString();
- }
- set
- {
- tableName = value;
- ViewState["tableName"] = value;
- }
- }
- private string textMember = String.Empty;
- /// <summary>
- /// 获取和设置数据绑定时用户设置TEXT值的字段或属性名
- /// </summary>
- [Description("数据绑定时用户设置TEXT值的字段或属性名"), DefaultValue("")]
- public string TextMember
- {
- get
- {
- return ViewState["textMember"] == null ? textMember : ViewState["textMember"].ToString();
- }
- set
- {
- textMember = value;
- ViewState["textMember"] = value;
- }
- }
- private Object dataSource = null;
- /// <summary>
- /// 设置和获取数据源,已重写
- /// </summary>
- [Description("数据源,已重写"), DefaultValue(null)]
- public new Object DataSource
- {
- get
- {
- return ViewState["dataSource"] == null ? dataSource : ViewState["dataSource"];
- }
- set
- {
- dataSource = value;
- ViewState["dataSource"] = value;
- }
- }
- TreeNodeSelectAction nodeSelectAction = TreeNodeSelectAction.Select;
- /// <summary>
- /// 设置和获取树节点选择后将引发事件
- /// </summary>
- [Description("树节点选择后将引发事件"), DefaultValue(TreeNodeSelectAction.Select)]
- public TreeNodeSelectAction NodeSelectAction
- {
- get
- {
- return ViewState["nodeSelectAction"] == null ? nodeSelectAction : (TreeNodeSelectAction)ViewState["nodeSelectAction"];
- }
- set
- {
- nodeSelectAction = value;
- ViewState["nodeSelectAction"] = value;
- }
- }
- private bool isAutoCheck = false;
- /// <summary>
- /// 设置和获取是否自动改变父子节点勾选状态
- /// </summary>
- [Description("是否自动改变父子节点勾选状态"), DefaultValue(false)]
- public bool IsAutoCheck
- {
- get
- {
- return ViewState["isAutoCheck"] == null ? isAutoCheck : (bool)ViewState["isAutoCheck"];
- }
- set
- {
- isAutoCheck = value;
- ViewState["isAutoCheck"] = value;
- }
- }
- #endregion
- /// <summary>
- /// 将数据源进行绑定并显示
- /// </summary>
- public void BindData()
幸好TreeView是支持ViewState的,我们要将这些属性值信息记录在ViewState中,这样页面回传之后就不需要用户重新赋值绑定了。
转载于:https://www.cnblogs.com/vanpan/archive/2009/01/08/3583049.html
动手做ASP.NET 2.0服务器端控件——AutoCheckTreeView(二)接口设计相关推荐
- Asp.Net第二章服务器端控件
服务器端控件 主要有:Label.TextBox.Button.RadioButton.CheckBox.RadioButtonList.CheckBoxList.HyperLink控件. 控件 La ...
- ASP.Net2.0 数据绑定控件的优越性在哪里?
尽管有丰富.功能强大的编程接口,ASP.NET 1.x DataGrid 控件仍需要编写大量自定义代码来处理普通操作,如分页.排序.编辑和删除数据.例如,当用户单击以保存或取消更改时,DataGrid ...
- js获取asp.net服务器端控件Label,TextBox,RadioButtonList,DropDownList的值
在做 BS架构的项目时,经常遇到 需要用js 来调用 asp.net 服务器端控件的值. 大多数的 控件他的值都可以通过js调用它的 value属性来获得此控件的值,但是也有例外的情况. 经常用的 L ...
- javascript获取asp.net服务器端控件的值(2009-10-31 15:24:26)转载标签:杂谈 分类:技术分类
javascript获取asp.net服务器端控件的值 (2009-10-31 15:24:26) 转载 标签: 杂谈 分类:技术分类 代码如下: <%@ Page Language=" ...
- javascript获取asp.net服务器端控件的值
代码如下: <%@ Page Language="C#" CodeFile="A.aspx.cs" Inherits="OrderManage_ ...
- Asp.Net Ajax Control Toolkit 服务器端控件
1. Accordion [功能概述] Accordion可以让你设计多个panel 并且一次只显示一个Panel .在页面上的显示效果就像是使用了多个CollapsiblePanels只不过每一次只 ...
- Asp.net服务器端控件CheckBoxList的使用心得
1.用JavaScript获得Asp.net服务器端控件CheckBoxList选中得值 Asp.net服务器端控件CheckBoxList在客户端没有生成value值,所以就想在客户端通过JS获得选 ...
- 【开源】我的分页控件正式命名为QuickPager ASP.NET2.0分页控件
分页控件正式命名为 QuickPager ASP.NET2.0分页控件 . 版本号:2.0.0.1 Framework:.net2.0 分页方式:PostBack .URL (暂时没有实现URL的分页 ...
- 【开源】QuickPager ASP.NET2.0分页控件V2.0.0.3 【增加了使用说明】
================================ 欢迎转载,但是请注明出处.本文出自博客园 .谢谢合作! ================================ 最新版本:V ...
最新文章
- python list 删除元素
- 1112. Stucked Keyboard (20)
- Java虚拟机的内存空间有几种
- Fish Detection
- Java多线程详解[狂神说Java]
- php中的var_dump()方法的详细说明
- 对NumPy中dot()函数的理解(亲测,矩阵算法)
- libzbar.a armv7
- array js 二分法_JS常见的算法
- golang服务开发平滑升级之优雅重启
- 踏上Silverlight的征程 体验Silverlight之美
- android 开发自建wifi热点的默认ip
- java nio 心跳包_请问Java中Socket的心跳包如何实现?
- -bash:ls:command not found,执行命令总是报找不到
- 一文弄懂数据挖掘的十大算法,数据挖掘算法原理讲解
- 拓扑排序算法原理及Java代码实现
- 华为手机信息不弹屏了为什么_华为手机顶部消息弹窗怎么关闭?
- 前端-HTML基础入门
- 防火墙、IDS(入侵检测系统)与双机热备
- vscode缩放代码_Visual Studio Code 缩放设置