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

发表于:2007-06-30来源:作者:点击数: 标签:
我将把控件命名为StoreSelector.ascx。第一步是在表单上添加DropDownList控件。 (图2) 现在就该为该控件“布线”了。创建一个Dataset类的对象: #code private DataSet data; #end code 创建向下拉列表中填写数据的BindData功能: #code private void Bind
     我将把控件命名为StoreSelector.ascx。第一步是在表单上添加DropDownList控件。
  
  
  
  (图2)
  
     现在就该为该控件“布线”了。创建一个Dataset类的对象:
  
   #code
   private DataSet data;
   #end code
  
     创建向下拉列表中填写数据的BindData功能:
  
   #code
   private 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事件的正确:
  
   #code
   private void Page_Load(object sender, System.EventArgs e)
   {
    if(!Page.IsPostBack)
    {
     BindData();
    }
   }
   #end code
  
     现在我们将新控件拖到Default.ASPx网页上,并运行该项目。
  
  
  
  (图3)
  
  
  
  (图4)
  
     很简单是吧?下面就该是技巧比较高的部分了。我们希望在Default.aspx上添加几个标签,反映不断变化的商店。我们希望每个标签显示现在选择的商店中的一列,在这里我们就需要为StoreSelector控件和事件参数类创建一个定制事件。下面我们先创建Event Argument Class(StoreSelectorCommandEventArgs.cs):
  
   #code
   public 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):
  
   #code
   public delegate void StoreSelectorCommandEventHandler(object sender,
   StoreSelectorCommandEventArgs e);
   #end code
  
     下面是产生的文件:
  
  
  (图5)
  

原文转自:http://www.ltesting.net