知识大全 ASP.NET中设计带事件定制控件
Posted 事件
篇首语:厌伴老儒烹瓠叶,强随举子踏槐花。本文由小常识网(cha138.com)小编为大家整理,主要介绍了知识大全 ASP.NET中设计带事件定制控件相关的知识,希望对你有一定的参考价值。
ASP.NET中设计带事件定制控件 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!
在试图为客户开发一个在网络上运行的应用程序时 我发现有关正确使用 NET Web控件的讨论非常少 下面是使用 NET Web控件的常见问题 如何使这些控件间相互通讯? 如何使这些控件保持状态? 如何将多个控件有效地联接在一个网页上? 我是一名ASP开发人员 发现转向ASP NET并非是件轻而易举的事 我最初的想法是通过Session对象或使用查询语句保持状态 但发现这二种方法都太邋遢 而且 当试图对网页上的所有Web控件进行同步时就会出现问题 我在偶然间发现了一篇有关在Web控件中创建事件的文章 但在实践中仍然吃足了苦头 因此 我认为提供一个有关正确地创建Web控件并同时创建定制事件的实例是非常重要的 讨论将按照下面的顺序进行 创建一个Web控件 创建控件的定制事件和事件参数 在网页上正确地使用Web控件 在讨论期间 我还会向读者提供一些小技巧 使读者能够更精确和快速地开发应用程序 我们在这里创建的Web控件是一个定制的下拉选择框 它基于标准版本的SQL Server或MSDE的pubs数据库中的stores表 在开发中我们使用了Visual Studio NET 开发工具和C#编程语言 在创建Pubs Web项目后 第一个任务(至少对于我是如此)是将WebForm aspx文件改名为Default aspx 并修改类 使之与名字相符 然后是在IDE环境中创建一个文件夹结构 方便对象的查找 我创建了Controls目录存储所有创建的控件 以更方便地访问它们 根据创建控件时的粒度 我们可以进一步地细分Controls目录 我将把控件命名为StoreSelector ascx 第一步是在表单上添加DropDownList控件 现在就该为该控件 布线 了 创建一个Dataset类的对象#codeprivate DataSet data;#end code
创建向下拉列表中填写数据的BindData功能#codeprivate void BindData() data = new DataSet(); SqlConnection cnn = new SqlConnection( Data Source=(local);Initial Catalog=pubs;Integrated Security=SSPI ); SqlDataAdapter adapter = new SqlDataAdapter(); adapter SelectCommand = new SqlCommand( SELECT stor_id stor_name
stor_address city state zip FROM stores cnn); adapter Fill(data stores ); storeList DataSource = data; storeList DataMember = stores ; storeList DataTextField = stor_name ; storeList DataBind(); Session Add( Data data);#end code
我在Session变量上增加了DataSet对象 以使数据在对话存在期间以及控件事件触发期间传递数据时都是可以访问的 注意 要确保Page_OnLoad事件的正确#codeprivate void Page_Load(object sender System EventArgs e) if(!Page IsPostBack) BindData(); #end code
现在我们将新控件拖到Default aspx网页上 并运行该项目 很简单是吧?下面就该是技巧比较高的部分了 我们希望在Default aspx上添加几个标签 反映不断变化的商店 我们希望每个标签显示现在选择的商店中的一列 在这里我们就需要为StoreSelector控件和事件参数类创建一个定制事件 下面我们先创建Event Argument Class(StoreSelectorCommandEventArgs cs)#codepublic class StoreSelectorCommandEventArgs private string _stor_id; private string _stor_name; private string _stor_address; private string _city; private string _state; private string _zip; public StoreSelectorCommandEventArgs(string stor_id string stor_name string stor_address string city string state string zip) _stor_id = stor_id; _stor_name = stor_name; _stor_address = stor_address; _city = city; _state = state; _zip = zip; public string stor_id get return _stor_id; public string stor_name get return _stor_name; public string stor_address get return _stor_address; public string city get return _city; public string state get return _state; public string zip get return _zip; #end code
该类的目的是为了处理定义事件参数的 e 变量 我们要做的仅仅是创建了其中的一个 下面是定义如何处理事件的代理类(StoreSelectorCommandEventHandler cs)#codepublic delegate void StoreSelectorCommandEventHandler(object sender StoreSelectorCommandEventArgs e);#end code
下面是产生的文件 现在我们来调整StoreSelector控件 触发事件
下面的代码需要添加到StoreSelector控件中 才可能执行我们创建的事件#codepublic event StoreSelectorCommandEventHandler StoreSelectorChanged;protected virtual void OnStoreSelectorChanged(StoreSelectorCommandEventArgs e) if(StoreSelectorChanged != null) StoreSelectorChanged(this e);#end code
现在 我们已经为控件定义了事件 我们需要触发该事件 我们计划在DropDownList OnChange事件被触发后触发该事件 注意确保DropDownList控件的AutPostBack属性被设置为真 下面是事件的代码#codeprivate void storeList_SelectedIndexChanged(object sender System EventArgs e) data = (DataSet)Session[ Data ]; OnStoreSelectorChanged( new StoreSelectorCommandEventArgs (data Tables[ stores ] Rows[storeList SelectedIndex] ItemArray[ ] ToString () data Tables[ stores ] Rows[storeList SelectedIndex] ItemArray[ ] ToString( ) data Tables[ stores ] Rows[storeList SelectedIndex] ItemArray[ ] ToString() data Tables[ stores ] Rows[storeList SelectedIndex] ItemArray[ ] ToString() data Tables[ stores ] Rows[storeList SelectedIndex] ItemArray[ ] ToString() data Tables[ stores ] Rows[storeList SelectedIndex] ItemArray[ ] ToString( )));#end code
我们来分析一下在这里所作的工作 当SelectedIndexChanged事件被触发时 我将它传递给为控件创建的新事件 我传送的数据直接与填写的dataset相关 所有条目都一个一个地被传递给StoreSelectorCommandEventArgs对象 然后触发事件 为了访问Default aspx网页的新功能 我们需要在该类的OnInit部分添加事件处理程序 如上图所示 StoreSelectorChanged事件出现在了Default aspx网页上 下面我们赋予它一个功能 我将在Default aspx网页上添加 个标签 随DropDownList的变化显示值 现在我们来编写事件 美观是Intellisense是Intellisense认可定制的EventArg类属性的原则 最终的事件函数如下所示#codeprivate void StoreSelector _StoreSelectorChanged(object sender Pubs Controls StoreSelectorCommandEventArgs e) Label Text = e stor_id; Label Text = e stor_name; Label Text = e stor_address; Label Text = e city; Label Text = e state; Label Text = e zip;#end code
现在我们对该项目进行测试 该网页一加载 读者的头脑中可能会闪现出这样的念头 它有问题 但我向你保证保证 该项目没有任何问题 如果想在网页一加载时就触发该事件 我们必须通过设置DropDownList控件中有选择的索引属性在已经创建的控件中进行设置 只要我们从DropDownList中选择另一个Store 标签就会发生变化 现在我们使表单加载到第一个记录 我们在StoreSelector控件上添加下面的属性#Codepublic int SelectedIndex get return storeList SelectedIndex; set if(!Page IsPostBack) BindData(); if(value < storeList Items Count) storeList SelectedIndex = value; OnStoreSelectorChanged( new StoreSelectorCommandEventArgs (data Tables[ stores ] Rows[value] ItemArray[ ] ToString() data Tables[ stores ] Rows[value] ItemArray[ ] ToString() data Tables[ stores ] Rows[value] ItemArray[ ] ToString() data Tables[ stores ] Rows[value] ItemArray[ ] ToString() data Tables[ stores ] Rows[value] ItemArray[ ] ToString() data Tables[ stores ] Rows[value] ItemArray[ ] ToString())); #End Code 然后设置Default aspx中Page_Load事件的属性
#codeprivate void Page_Load(object sender System EventArgs e) // 用户初始化网页的代码 if(!Page IsPostBack) StoreSelector SelectedIndex = ; #end code
运行该项目时 它就会将表单加载到第一个记录 小结 希望这篇文章能够对广大读者有一定的帮助 这种类型的Web应用程序的开发几乎没有什么限制 只要设计得当 我们创建的每个Web控件可以在整个Web应用程序中使用 cha138/Article/program/net/201311/11891相关参考
ASP.NET控件开发基础之复合控件事件处理浅析 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!
Asp.net用户控件添加自定义事件 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! &n
[ASP.NET开发系列]在用户控件中添加事件 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 在
知识大全 ASP.NET -TreeView Web 服务器控件事件
ASP.NET-TreeViewWeb服务器控件事件 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!
ASP.NET取得页面事件的发生源控件ID 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 需求A
ASP.NET2.0高级数据处理之处理控件事件 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!在前面
在ASP.NET中设置母版页 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!
ASP.NET定制简单的错误处理页面 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! &n
知识大全 C#+ASP.NET 2.0 定制复合组件之高级篇
C#+ASP.NET2.0定制复合组件之高级篇 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 一
知识大全 C#+ASP.NET 2.0 定制复合组件之基础篇
C#+ASP.NET2.0定制复合组件之基础篇 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 摘