知识大全 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控件开发基础之复合控件事件处理浅析

ASP.NET控件开发基础之复合控件事件处理浅析  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  

知识大全 Asp.net 用户控件添加自定义事件

Asp.net用户控件添加自定义事件  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! &n

知识大全 [ASP.NET开发系列]在用户控件中添加事件

[ASP.NET开发系列]在用户控件中添加事件  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  在

知识大全 ASP.NET -TreeView Web 服务器控件事件

ASP.NET-TreeViewWeb服务器控件事件  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!

知识大全 ASP.NET取得页面事件的发生源控件ID

ASP.NET取得页面事件的发生源控件ID  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  需求A

知识大全 ASP.NET 2.0高级数据处理之处理控件事件

ASP.NET2.0高级数据处理之处理控件事件  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!在前面

知识大全 在ASP.NET中设置母版页

在ASP.NET中设置母版页  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  

知识大全 ASP.NET定制简单的错误处理页面

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)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  摘