感谢谭振林先生所著《道不远人——深入解析ASP.NET 2.0控件开发》

讨论完了功能,我们来思考一下这个控件应该怎么设计。

1,给控件取个名字吧,因为一开始小凡只是考虑了自动勾选功能,所以就叫它AutoCheckTreeView。

2,显然继承自TreeView要比重新做一个更方便,那好,AutoCheckTreeView : TreeView就这么决定了。

3,它要开放一些什么新增接口吗?想一下,有的时候需要自动勾选功能,有的时候不需要自动勾选,那应该留下一个开关属性。

4,数据绑定,那比如要重载DataSource属性和DataBind()方法喽。

5,我们不能要求用户必须以规定的格式数据源来绑定我们的控件,所以,我们需要用户告诉我们,哪个字段或者属性代表主键,哪个字段或者属性代表父主键,并且就像DropDownList一样,要有一个TextMember来告诉我们到时候节点显示哪个字段里面的内容。

6,如果绑定的数据源是DataSet,那我们还需要知道是绑定其中是哪个表。

7,为了节省用户劳动,我们可以把节点选择后的动作TreeNodeSelectAction添加作为一个公开属性,当绑定数据后,我们就可以把节点生成为该类型。

因此,所有的接口属性和公开方法就是如下:

  1. #region 变量
  2. private string dataPropertyName = String.Empty;
  3. /// <summary>
  4. /// 获取和设置单条数据中用于结构关系的列名或者属性名
  5. /// </summary>
  6. [Description("单条数据中用于结构关系的列名或者属性名"), DefaultValue("")]
  7. public string DataPropertyName
  8. {
  9. get
  10. {
  11. return ViewState["dataPropertyName"] == null ? dataPropertyName : ViewState["dataPropertyName"].ToString();
  12. }
  13. set
  14. {
  15. dataPropertyName = value;
  16. ViewState["dataPropertyName"] = value;
  17. }
  18. }
  19. private string dataParentPropertyName = String.Empty;
  20. /// <summary>
  21. /// 获取和设置单条数据中用于结构关系的父数据列名或者属性名
  22. /// </summary>
  23. [Description("单条数据中用于结构关系的父数据列名或者属性名"), DefaultValue("")]
  24. public string DataParentPropertyName
  25. {
  26. get
  27. {
  28. return ViewState["dataParentPropertyName"] == null ? dataParentPropertyName : ViewState["dataParentPropertyName"].ToString();
  29. }
  30. set
  31. {
  32. dataParentPropertyName = value;
  33. ViewState["dataParentPropertyName"] = value;
  34. }
  35. }
  36. private string tableName = String.Empty;
  37. /// <summary>
  38. /// 获取和设置表名称,用于当数据源为DataSet类型时
  39. /// </summary>
  40. [Description("表名称,用于当数据源为DataSet类型时"), DefaultValue("")]
  41. public string TableName
  42. {
  43. get
  44. {
  45. return ViewState["tableName"] == null ? tableName : ViewState["tableName"].ToString();
  46. }
  47. set
  48. {
  49. tableName = value;
  50. ViewState["tableName"] = value;
  51. }
  52. }
  53. private string textMember = String.Empty;
  54. /// <summary>
  55. /// 获取和设置数据绑定时用户设置TEXT值的字段或属性名
  56. /// </summary>
  57. [Description("数据绑定时用户设置TEXT值的字段或属性名"), DefaultValue("")]
  58. public string TextMember
  59. {
  60. get
  61. {
  62. return ViewState["textMember"] == null ? textMember : ViewState["textMember"].ToString();
  63. }
  64. set
  65. {
  66. textMember = value;
  67. ViewState["textMember"] = value;
  68. }
  69. }
  70. private Object dataSource = null;
  71. /// <summary>
  72. /// 设置和获取数据源,已重写
  73. /// </summary>
  74. [Description("数据源,已重写"), DefaultValue(null)]
  75. public new Object DataSource
  76. {
  77. get
  78. {
  79. return ViewState["dataSource"] == null ? dataSource : ViewState["dataSource"];
  80. }
  81. set
  82. {
  83. dataSource = value;
  84. ViewState["dataSource"] = value;
  85. }
  86. }
  87. TreeNodeSelectAction nodeSelectAction = TreeNodeSelectAction.Select;
  88. /// <summary>
  89. /// 设置和获取树节点选择后将引发事件
  90. /// </summary>
  91. [Description("树节点选择后将引发事件"), DefaultValue(TreeNodeSelectAction.Select)]
  92. public TreeNodeSelectAction NodeSelectAction
  93. {
  94. get
  95. {
  96. return ViewState["nodeSelectAction"] == null ? nodeSelectAction : (TreeNodeSelectAction)ViewState["nodeSelectAction"];
  97. }
  98. set
  99. {
  100. nodeSelectAction = value;
  101. ViewState["nodeSelectAction"] = value;
  102. }
  103. }
  104. private bool isAutoCheck = false;
  105. /// <summary>
  106. /// 设置和获取是否自动改变父子节点勾选状态
  107. /// </summary>
  108. [Description("是否自动改变父子节点勾选状态"), DefaultValue(false)]
  109. public bool IsAutoCheck
  110. {
  111. get
  112. {
  113. return ViewState["isAutoCheck"] == null ? isAutoCheck : (bool)ViewState["isAutoCheck"];
  114. }
  115. set
  116. {
  117. isAutoCheck = value;
  118. ViewState["isAutoCheck"] = value;
  119. }
  120. }
  121. #endregion
  1. /// <summary>
  2. /// 将数据源进行绑定并显示
  3. /// </summary>
  4. public void BindData()

幸好TreeView是支持ViewState的,我们要将这些属性值信息记录在ViewState中,这样页面回传之后就不需要用户重新赋值绑定了。

转载于:https://www.cnblogs.com/vanpan/archive/2009/01/08/3583049.html

动手做ASP.NET 2.0服务器端控件——AutoCheckTreeView(二)接口设计相关推荐

  1. Asp.Net第二章服务器端控件

    服务器端控件 主要有:Label.TextBox.Button.RadioButton.CheckBox.RadioButtonList.CheckBoxList.HyperLink控件. 控件 La ...

  2. ASP.Net2.0 数据绑定控件的优越性在哪里?

    尽管有丰富.功能强大的编程接口,ASP.NET 1.x DataGrid 控件仍需要编写大量自定义代码来处理普通操作,如分页.排序.编辑和删除数据.例如,当用户单击以保存或取消更改时,DataGrid ...

  3. js获取asp.net服务器端控件Label,TextBox,RadioButtonList,DropDownList的值

    在做 BS架构的项目时,经常遇到 需要用js 来调用 asp.net 服务器端控件的值. 大多数的 控件他的值都可以通过js调用它的 value属性来获得此控件的值,但是也有例外的情况. 经常用的 L ...

  4. javascript获取asp.net服务器端控件的值(2009-10-31 15:24:26)转载标签:杂谈 分类:技术分类

    javascript获取asp.net服务器端控件的值 (2009-10-31 15:24:26) 转载 标签: 杂谈 分类:技术分类 代码如下: <%@ Page Language=" ...

  5. javascript获取asp.net服务器端控件的值

    代码如下: <%@ Page Language="C#" CodeFile="A.aspx.cs" Inherits="OrderManage_ ...

  6. Asp.Net Ajax Control Toolkit 服务器端控件

    1. Accordion [功能概述] Accordion可以让你设计多个panel 并且一次只显示一个Panel .在页面上的显示效果就像是使用了多个CollapsiblePanels只不过每一次只 ...

  7. Asp.net服务器端控件CheckBoxList的使用心得

    1.用JavaScript获得Asp.net服务器端控件CheckBoxList选中得值 Asp.net服务器端控件CheckBoxList在客户端没有生成value值,所以就想在客户端通过JS获得选 ...

  8. 【开源】我的分页控件正式命名为QuickPager ASP.NET2.0分页控件

    分页控件正式命名为 QuickPager ASP.NET2.0分页控件 . 版本号:2.0.0.1 Framework:.net2.0 分页方式:PostBack .URL (暂时没有实现URL的分页 ...

  9. 【开源】QuickPager ASP.NET2.0分页控件V2.0.0.3 【增加了使用说明】

    ================================ 欢迎转载,但是请注明出处.本文出自博客园 .谢谢合作! ================================ 最新版本:V ...

最新文章

  1. python list 删除元素
  2. 1112. Stucked Keyboard (20)
  3. Java虚拟机的内存空间有几种
  4. Fish Detection
  5. Java多线程详解[狂神说Java]
  6. php中的var_dump()方法的详细说明
  7. 对NumPy中dot()函数的理解(亲测,矩阵算法)
  8. libzbar.a armv7
  9. array js 二分法_JS常见的算法
  10. golang服务开发平滑升级之优雅重启
  11. 踏上Silverlight的征程 体验Silverlight之美
  12. android 开发自建wifi热点的默认ip
  13. java nio 心跳包_请问Java中Socket的心跳包如何实现?
  14. -bash:ls:command not found,执行命令总是报找不到
  15. 一文弄懂数据挖掘的十大算法,数据挖掘算法原理讲解
  16. 拓扑排序算法原理及Java代码实现
  17. 华为手机信息不弹屏了为什么_华为手机顶部消息弹窗怎么关闭?
  18. 前端-HTML基础入门
  19. 防火墙、IDS(入侵检测系统)与双机热备
  20. vscode缩放代码_Visual Studio Code 缩放设置

热门文章

  1. 聚焦消费趋势,凯里亚德酒店洞悉消费需求缔造高品质住宿体验
  2. ffmpeg 声音参数_「xxx video」ffmpeg参数中文详细解释 - seo实验室
  3. win7系统ie11浏览器为什么开发者工具一片空白
  4. 数据结构-LinkedList源码解析
  5. 数据结构入门到精通学习(一)
  6. 怎么用手机修复老照片?手机修复老照片方法分享
  7. python-取余问题的详细解读
  8. Manjaro更新之后进不去桌面的一种可能情况及其解决方法
  9. SQLyog学习笔记01---安装及基本使用
  10. adb 查看手机代号