首页 | 互联网 | IT动态 | IT培训 | Cisco | Windows | Linux | Java | .Net | Oracle | 软件测试 | C/C++ | 嵌入式开发 | 存储世界 | 服务器
网络设备 | IDC | 安全 | 求职招聘 | 数字网校 | 网页设计 | 平面设计 | 技术专题 | 电子书下载 | 教学视频 | 源码下载 | 搜索 | 博客 | 论坛
中国IT实验室Dotnet频道
中国IT教育
Google
首页 ASP.NET  C#  XML/WebService ADO.NET VC.NET VB.NET .NET 资讯动态 专题 RSS订阅 讨论 下载
您现在的位置: 中国IT实验室 >> Dotnet >> ASP.NET >> 正文

ASP.NET中设计带事件定制控件



  下面的代码需要添加到StoreSelector控件中,才可能执行我们创建的事件:

#code
public event StoreSelectorCommandEventHandler StoreSelectorChanged;
protected virtual void OnStoreSelectorChanged(StoreSelectorCommandEventArgs e)
{
 if(StoreSelectorChanged != null) StoreSelectorChanged(this, e);
}
#end code


  现在,我们已经为控件定义了事件,我们需要触发该事件。我们计划在DropDownList OnChange事件被触发后触发该事件。注意确保DropDownList控件的AutPostBack属性被设置为真。

  下面是事件的代码:

#code
private void storeList_SelectedIndexChanged(object sender, System.EventArgs e)
{
 data = (DataSet)Session["Data"];
 OnStoreSelectorChanged(
  new StoreSelectorCommandEventArgs
  (data.Tables["stores"].Rows[storeList.SelectedIndex].ItemArray[0].ToString
  (),
  data.Tables["stores"].Rows[storeList.SelectedIndex].ItemArray[1].ToString(
 ),
 data.Tables["stores"].Rows[storeList.SelectedIndex].ItemArray[2].ToString(),
 data.Tables["stores"].Rows[storeList.SelectedIndex].ItemArray[3].ToString(),
 data.Tables["stores"].Rows[storeList.SelectedIndex].ItemArray[4].ToString(),
 data.Tables["stores"].Rows[storeList.SelectedIndex].ItemArray[5].ToString(
 )));
}
#end code


  我们来分析一下在这里所作的工作。当SelectedIndexChanged事件被触发时,我将它传递给为控件创建的新事件,我传送的数据直接与填写的dataset相关,所有条目都一个一个地被传递给StoreSelectorCommandEventArgs对象,然后触发事件。

  为了访问Default.aspx网页的新功能,我们需要在该类的OnInit部分添加事件处理程序:

  如上图所示,StoreSelectorChanged事件出现在了Default.aspx网页上。下面我们赋予它一个功能。我将在Default.aspx网页上添加6个标签,随DropDownList的变化显示值:

  现在我们来编写事件。

  美观是Intellisense是Intellisense认可定制的EventArg类属性的原则:

  最终的事件函数如下所示:

#code
private void StoreSelector1_StoreSelectorChanged(object
sender, Pubs.Controls.StoreSelectorCommandEventArgs e)
{
 Label1.Text = e.stor_id;
 Label2.Text = e.stor_name;
 Label3.Text = e.stor_address;
 Label4.Text = e.city;
 Label5.Text = e.state;
 Label6.Text = e.zip;
}
#end code


  现在我们对该项目进行测试。该网页一加载,读者的头脑中可能会闪现出这样的念头:它有问题,但我向你保证保证,该项目没有任何问题。如果想在网页一加载时就触发该事件,我们必须通过设置DropDownList控件中有选择的索引属性在已经创建的控件中进行设置。

  只要我们从DropDownList中选择另一个Store,标签就会发生变化:

  现在我们使表单加载到第一个记录。我们在StoreSelector控件上添加下面的属性:

#Code
public 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[0].ToString(),
     data.Tables["stores"].Rows[value].ItemArray[1].ToString(),
     data.Tables["stores"].Rows[value].ItemArray[2].ToString(),
     data.Tables["stores"].Rows[value].ItemArray[3].ToString(),
     data.Tables["stores"].Rows[value].ItemArray[4].ToString(),
     data.Tables["stores"].Rows[value].ItemArray[5].ToString()));
  }
 }
}
#End Code
  然后设置Default.aspx中Page_Load事件的属性:

#code
private void Page_Load(object sender, System.EventArgs e)
{
 // 用户初始化网页的代码
 if(!Page.IsPostBack)
 {
  StoreSelector1.SelectedIndex = 0;
 }
}
#end code


  运行该项目时,它就会将表单加载到第一个记录。

  小结

  希望这篇文章能够对广大读者有一定的帮助。这种类型的Web应用程序的开发几乎没有什么限制,只要设计得当,我们创建的每个Web控件可以在整个Web应用程序中使用。

上一页  [1] [2] [3] 

【责编:Peng】

中国IT教育

相关产品和培训
文章评论
 友情推荐链接
 认证培训
 专题推荐

 ·WEB程序开发--ASP.NET和PHP、JSP究竟学哪个?
 ·五步带你入门XML
 ·关于Java框架技术专题
 ·XML全攻略技术专题
 ·JAVA开源技术介绍专题
 ·Java嵌入式开发之J2ME技术专题
 ·超前体验 Oracle 11g的5个新特性…
 ·揭密使用VB.NET的五个实用技巧
 ·Oracle和SQL Server常用函数对比专题…
 ·展现C#世界 C#程序设计专题…
 今日更新
 社区讨论
 博客论点
 频道精选
 Dotnet频道相关导航