当前位置: 首页 > news >正文

关于自定义控件设计时如何把属性写入aspx中的研究(下)

虽然这一篇已经是“下”了,但是我并没有研究清楚“自定义控件设计时如何把属性写入到aspx中”这个问题。
不过,我选择了另外一条路,做了点手脚,让控件把属性写入到aspx中去了。

其实,即使有人肯定的告诉我,在上篇中提到的ControlSerializer类的SerializeControl方法就是用于把控件属性写入到aspx中去的,我也实在没办法利用它,它的位置太“深”了。

我是通过重写GridView的Columns属性来实现的。我当时想,即使实例A(如果不明白实例A指什么,请看上篇 http://www.cnblogs.com/nnhy/archive/2007/04/05/701485.html)从来不调用CreateColumns方法,但是,它肯定要调用Columns属性吧。重载该属性,并输出日志,果然,有很少的几次调用。不过,已经够了。

我的做法就是,在这个属性的get方法里面,强制改变各列的属性,再返回。设计器在生成控件的aspx时,至少要读取Columns来生成各个列吧。

主要代码如下:
 1 ExpandedBlockStart.gif ContractedBlock.gif          /**/ /// <summary>
 2InBlock.gif        /// 已重写。获取表示 GridView 控件中列字段的 DataControlField 对象的集合。
 3InBlock.gif        /// 重写以实现设计时把英文表头转为中文、列重新排序、列宽度调整
 4ExpandedBlockEnd.gif        /// </summary>

 5 None.gif          public   override  DataControlFieldCollection Columns
 6 ExpandedBlockStart.gifContractedBlock.gif         dot.gif {
 7InBlock.gif            get
 8ExpandedSubBlockStart.gifContractedSubBlock.gif            dot.gif{
 9InBlock.gif                DataControlFieldCollection cs = base.Columns;
10InBlock.gif                if (cs == null || cs.Count < 1 || Site == null || Site.Component == nullreturn cs;
11InBlock.gif                SetDefaultStype(cs);
12InBlock.gif                NGridView ng = Site.Component as NGridView;
13InBlock.gif                if (ng == null || !ng.DesignMode) return cs;
14InBlock.gif                try
15ExpandedSubBlockStart.gifContractedSubBlock.gif                dot.gif{
16InBlock.gif                    if (ng.GetHashCode() == this.GetHashCode())
17ExpandedSubBlockStart.gifContractedSubBlock.gif                    dot.gif{
18InBlock.gif                        //if (isEntryCreating || !(isChanged || AutoGenerateDeleteButton || AutoGenerateEditButton || AutoGenerateSelectButton)) return cs;
19InBlock.gif                        if (isEntryCreating) return cs;
20InBlock.gif                        //SetDefaultStype(cs);
21InBlock.gif                        if (!isChanged) return cs;
22InBlock.gif                        isEntryCreating = true;
23InBlock.gif                        CreateEntryColumns(cs);
24ExpandedSubBlockEnd.gif                    }

25ExpandedSubBlockEnd.gif                }

26ExpandedSubBlockStart.gifContractedSubBlock.gif                catch (Exception ex) dot.gif{ MessageBox.Show(ex.Message, "NGridView"); }
27InBlock.gif                finally
28ExpandedSubBlockStart.gifContractedSubBlock.gif                dot.gif{
29InBlock.gif                    isEntryCreating = false;
30InBlock.gif                    isChanged = false;
31ExpandedSubBlockEnd.gif                }

32InBlock.gif                return cs;
33ExpandedSubBlockEnd.gif            }

34ExpandedBlockEnd.gif        }

35 None.gif

CreateEntryColumns就是我用来改变列属性的方法,之前的几个判断,是为了防止列属性被频繁改变。我只需要在绑定数据源之后改变就可以了。

语句if (ng.GetHashCode() == this.GetHashCode()),通过判断当前对象和A对象的HashCode,来判断是否是同一个实例,也就是说,我要求这个重载,只在实例A中生效。

最后的结果,还挺令人满意的。目前正在想法子重载DetailView和FormView

相关文章:

  • 一位总工的痛苦,管理百人研发团队的烦恼
  • svn导入文件
  • security check 的链接错误
  • ASP.NET MVC 5 - 给电影表和模型添加新字段
  • 如何分析网页数据并且去除Html标签(C#)
  • win7下 启动virtualbox时 创建com对象失败 应用程序即将被中断 解决方案
  • 给DLL打上版本号
  • Activity生命周期
  • 加入域,找不到网络路径的解决办法
  • 跟你分享一下养生的经验
  • Java UDP 示例
  • Exchange Server 2003邮件服务器系统的基本部署思路
  • HTTP请求头详解【转】
  • 2007-5-30
  • apache下ab.exe使用方法。。
  • @angular/forms 源码解析之双向绑定
  • 《Javascript数据结构和算法》笔记-「字典和散列表」
  • Angular6错误 Service: No provider for Renderer2
  • CSS实用技巧
  • ECMAScript 6 学习之路 ( 四 ) String 字符串扩展
  • Java的Interrupt与线程中断
  • NLPIR语义挖掘平台推动行业大数据应用服务
  • Python3爬取英雄联盟英雄皮肤大图
  • SAP云平台里Global Account和Sub Account的关系
  • Sequelize 中文文档 v4 - Getting started - 入门
  • Swift 中的尾递归和蹦床
  • windows-nginx-https-本地配置
  • WordPress 获取当前文章下的所有附件/获取指定ID文章的附件(图片、文件、视频)...
  • 分布式任务队列Celery
  • 回顾2016
  • 精彩代码 vue.js
  • 警报:线上事故之CountDownLatch的威力
  • 实战|智能家居行业移动应用性能分析
  • 跳前端坑前,先看看这个!!
  • 在 Chrome DevTools 中调试 JavaScript 入门
  • hi-nginx-1.3.4编译安装
  • ​经​纬​恒​润​二​面​​三​七​互​娱​一​面​​元​象​二​面​
  • ​字​节​一​面​
  • #LLM入门|Prompt#1.8_聊天机器人_Chatbot
  • $HTTP_POST_VARS['']和$_POST['']的区别
  • (1)Nginx简介和安装教程
  • (10)工业界推荐系统-小红书推荐场景及内部实践【排序模型的特征】
  • (2009.11版)《网络管理员考试 考前冲刺预测卷及考点解析》复习重点
  • (4)通过调用hadoop的java api实现本地文件上传到hadoop文件系统上
  • (day 2)JavaScript学习笔记(基础之变量、常量和注释)
  • (HAL)STM32F103C6T8——软件模拟I2C驱动0.96寸OLED屏幕
  • (HAL库版)freeRTOS移植STMF103
  • (Matlab)使用竞争神经网络实现数据聚类
  • (pytorch进阶之路)CLIP模型 实现图像多模态检索任务
  • (Ruby)Ubuntu12.04安装Rails环境
  • (分布式缓存)Redis持久化
  • (附源码)springboot 智能停车场系统 毕业设计065415
  • (附源码)springboot美食分享系统 毕业设计 612231
  • (七)MySQL是如何将LRU链表的使用性能优化到极致的?
  • (十七)Flask之大型项目目录结构示例【二扣蓝图】