将复合控件子控件事件上传到顶层的例子

这是一个选择省份然后将点击事件上传到控件顶层在页面处理事件的一个例子。加粗部分是整个上传事件过程。上传事件(暴露事件)、暴露属性、复杂属性管理、样式管理等是asp.net服务器自定义控件的高级主题。
using System;
using System.Web;
using System.Web.UI;
using System.Data;
using System.Data.SqlClient;
using System.Web.UI.WebControls;
using System.ComponentModel;
using Yeno.EnBiz.News.Tools;

namespace Yeno.EnBiz.News.Controls
{
 /// <summary>
 /// ResearchCtrl 的摘要说明。
 /// </summary>
 [ToolboxData("<{0}:LocalCtrl_Province runat=server></{0}:LocalCtrl_Province>")]
 public class LocalCtrl_Province : System.Web.UI.WebControls.WebControl,INamingContainer
 { 
  private TableCell _Province;
  public event CommandEventHandler ClickProvince;

  /// <summary>
  /// 将此控件呈现给指定的输出参数。
  /// </summary>
  /// <param name="output"> 要写出到的 HTML 编写器 </param>

  protected override void Render(HtmlTextWriter writer)
  {
   AddAttributesToRender(writer);
   writer.AddAttribute(HtmlTextWriterAttribute.Cellpadding,"5",false);
   writer.AddAttribute(HtmlTextWriterAttribute.Cellspacing,"0",false);
   writer.AddAttribute(HtmlTextWriterAttribute.Width,"100%",false);
   writer.RenderBeginTag(HtmlTextWriterTag.Table);

   writer.RenderBeginTag(HtmlTextWriterTag.Tr);
   _Province.RenderControl(writer);
   writer.RenderEndTag();

   writer.RenderEndTag();
  }
  protected override void CreateChildControls()
  {
   if(!Page.IsPostBack)
   {
    Controls.Clear();
    ClearChildViewState();
   }

   _Province=new TableCell();

   CreateProvince();
     

   this.Controls.Add(_Province);
  }
  protected void CreateProvince()
  {
   DataTable dtb=(DataTable)DataCall.RunSqlSP("N_Province_GetAll",ReturnType.ExecuteReader);
   for(int i=0;i<dtb.Rows.Count;i++)
   {
    LinkButton lb=new LinkButton();
    lb.Text=dtb.Rows[i]["PROVINCE"].ToString().Trim();
    lb.CausesValidation=false;
    lb.CommandArgument=dtb.Rows[i]["ID"].ToString();
    lb.Command +=new CommandEventHandler(Province_Command);
    _Province.Controls.Add(lb);
    _Province.Controls.Add(new LiteralControl("&nbsp;"));
   }
   dtb.Dispose();
  }
  protected void Province_Command(Object sender,CommandEventArgs e)
  {
   OnClickProvince(e);
  }
  protected void OnClickProvince(CommandEventArgs e)
  {
    if(ClickProvince!=null)
    {
     ClickProvince(this,e);
    }
  }
 }
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值