asp.net自定义控件的数据绑定

//这是我的自定义控件的代码,
using System;
using System.Collections.Generic;
using System.Text;
using System.Web.UI;
using System.Web.UI.WebControls;
namespace Controls{
// <summary>
// 容器枚举
// </summary>
   public enum ContainerType{
  PaymentMethodLabel=1,
  PaymentMethod=2,
  CreditCardNoLabel=3,
  CreditCardNo=4,
  CardholderNameLabel=5,
  CardholderName=6,
  ExpirationDateLabel=7,
  ExpirationDate=8,
  SubmitButton=9
  }
  // <summary>
  // 自定义控件容器
  // </summary>
  public class CreditCardFormContainer:TableCell,INamingContainer
  {
  private ContainerType containerType;
  private string labelText;
  public CreditCardFormContainer(ContainerType containerType){
  this.containerType=containerType;
  }
  public ContainerType ContainerType
  {
  get { return containerType; }
  }
  public string LabelText
  {
  get { return labelText; }
  set { labelText = value; }
  }
  }
  
  // <summary>
  // 自定义控件
  // </summary>
  //[ParseChildren(true)]
  [System.Security.Permissions.PermissionSet(System.Security.Permissions.SecurityAction.Demand, Name = "FullTrust"]
  public class   TemplatedCreditCardForm:System.Web.UI.WebControls.WebControl,INamingContainer,IParserAccessor
  {
  private CreditCardFormContainer paymentMethodLabelContainer;
  private CreditCardFormContainer creditCardNolabelContainer;
  private CreditCardFormContainer cardholderNameLabelContainer;
  private CreditCardFormContainer expirationDateLabelContianer;
  private CreditCardFormContainer paymentMethodContainer;
  private CreditCardFormContainer creditCardNoContainer;
  private CreditCardFormContainer cardholderNameContainer;
  private CreditCardFormContainer expirationDateContianer;
  private CreditCardFormContainer submitButtonContainer;        
  #region //摸板字段与属性
  private ITemplate paymentMethodLabelTemplate;
  [PersistenceMode(PersistenceMode.InnerProperty),TemplateContainer(typeof(CreditCardFormContainer))]
  public ITemplate PaymentMethodLabelTemplate
  {
  get { return paymentMethodLabelTemplate; }
  set { paymentMethodLabelTemplate = value; }
  }
  private ITemplate paymentMethodTemplate;
  [PersistenceMode(PersistenceMode.InnerProperty)]
  public ITemplate PaymentMethodTemplate
  {
  get { return paymentMethodTemplate; }
  set { paymentMethodTemplate = value; }
  }
  private ITemplate creditCardNoLabelTemplate;
  [PersistenceMode(PersistenceMode.InnerProperty), TemplateContainer(typeof(CreditCardFormContainer))]
  public ITemplate CreditCardNoLabelTemplate
  {
  get { return creditCardNoLabelTemplate; }
  set { creditCardNoLabelTemplate = value; }
  }
  private ITemplate creditCardNoTemplate;
  [PersistenceMode(PersistenceMode.InnerProperty)]
  public ITemplate CreditCardNoTemplate
  {
  get { return creditCardNoTemplate; }
  set { creditCardNoTemplate = value; }
  }
  private ITemplate cardholderNameLabelTemplate;
  [PersistenceMode(PersistenceMode.InnerProperty), TemplateContainer(typeof(CreditCardFormContainer))]
  public ITemplate CardholderNameLabelTemplate
  {
  get { return cardholderNameLabelTemplate; }
  set { cardholderNameLabelTemplate = value; }
  }
  private ITemplate cardholderNameTemplate;
  [PersistenceMode(PersistenceMode.InnerProperty)]
  public ITemplate CardholderNameTemplate
  {
  get { return cardholderNameTemplate; }
  set { cardholderNameTemplate = value; }
  }
  private ITemplate expirationDateLabelTemplate;
  [PersistenceMode(PersistenceMode.InnerProperty), TemplateContainer(typeof(CreditCardFormContainer))]
  public ITemplate ExpirationDateLabelTemplate
  {
  get { return expirationDateLabelTemplate; }
  set { expirationDateLabelTemplate = value; }
  }
  private ITemplate expirationDateTemplate;
  [PersistenceMode(PersistenceMode.InnerProperty)]
  public ITemplate ExpirationDateTemplate
  {
  get { return expirationDateTemplate; }
  set { expirationDateTemplate = value; }
  }
  private ITemplate submitButtonTemplate;
  [PersistenceMode(PersistenceMode.InnerProperty), TemplateContainer(typeof(CreditCardFormContainer))]
  public ITemplate SubmitButtonTemplate
  {
  get { return submitButtonTemplate; }
  set { submitButtonTemplate = value; }
  }
  #endregion
  #region //ViewState 属性
  public virtual string PaymentMethodLabelText
  {
  get { return ViewState["PaymentMethodLabelText"] != null ? (string)ViewState["PaymentMethodLabelText"] : string.Empty; }
  set { ViewState["PaymentMethodLabelText"] = value; }
  }
  public virtual string CreditCardNoLabelText
  {
  get { return ViewState["CreditCardNoLabelText"] != null ? (string)ViewState["CreditCardNoLabelText"] : string.Empty; }
  set {               
  ViewState["CreditCardNoLabelText"] = value; }
  }
  public virtual string CardholderNameLabelText
  {
  get { return ViewState["CardholderNameLabelText"] != null ? (string)ViewState["CardholderNameLabelText"] : string.Empty; }
  set { ViewState["CardholderNameLabelText"] = value; }
  }
  public virtual string ExpirationDateLabelText
  {
  get { return ViewState["ExpirationDateLabelText"] != null ? (string)ViewState["ExpirationDateLabelText"] : string.Empty; }
  set { ViewState["ExpirationDateLabelText"] = value; }
  }
  public virtual string SubmitButtonText
  {
  get { return ViewState["SubmitButtonText"] != null ? (string)ViewState["SubmitButtonText"] : string.Empty; }
  set { ViewState["SubmitButtonText"] = value; }
  }
  #endregion
  //根据容器类型创建容器控件
  protected virtual CreditCardFormContainer CreateContainer(ContainerType containerType)
  {
  return new CreditCardFormContainer(containerType);
  }
  //创建容器子控件,容器只与他自己的子控件关联,与整个自定义控件没有关系
  protected virtual void CreateContainerChildControls(CreditCardFormContainer container)
  {
  switch (container.ContainerType){
  case ContainerType.PaymentMethodLabel:
  container.LabelText = PaymentMethodLabelText;
  if (PaymentMethodLabelTemplate != null){
  PaymentMethodLabelTemplate.InstantiateIn(container);
  }
  break;
  case ContainerType.CreditCardNoLabel:
  container.LabelText = CreditCardNoLabelText;
  if (CreditCardNoLabelTemplate != null){
  CreditCardNoLabelTemplate.InstantiateIn(container);
  }
  break;
  case ContainerType.CardholderNameLabel:
  container.LabelText = CardholderNameLabelText;
  if (CardholderNameLabelTemplate != null){
  CardholderNameLabelTemplate.InstantiateIn(container);
  }
  break;
  case ContainerType.ExpirationDateLabel:
  container.LabelText = ExpirationDateLabelText;
  if (ExpirationDateLabelTemplate != null){
  ExpirationDateLabelTemplate.InstantiateIn(container);
  }
  break;
  case ContainerType.SubmitButton:
  container.LabelText = SubmitButtonText;
  if (SubmitButtonTemplate != null){
  SubmitButtonTemplate.InstantiateIn(container);
  }
  break;
  case ContainerType.PaymentMethod:
  if (PaymentMethodTemplate != null){
  PaymentMethodTemplate.InstantiateIn(container);
  }
  break;
  case ContainerType.CreditCardNo:
  if (CreditCardNoTemplate != null){
  CreditCardNoTemplate.InstantiateIn(container);
  }
  break;
  case ContainerType.CardholderName:
  if (CardholderNameTemplate != null){
  CardholderNameTemplate.InstantiateIn(container);
  }
  break;
  case ContainerType.ExpirationDate:
  if (ExpirationDateTemplate != null){
  ExpirationDateTemplate.InstantiateIn(container);
  }
  break;
  }
  }
  private void ApplyContainerStyle(CreditCardFormContainer container){
  container.VerticalAlign = VerticalAlign.Middle;
  container.Wrap = true;
  container.BackColor = System.Drawing.Color.White;
  container.ForeColor = System.Drawing.Color.Black;
  container.Font.Bold = true;
  if (container.ContainerType == ContainerType.SubmitButton){
  container.HorizontalAlign = HorizontalAlign.Center;
  container.ColumnSpan = 2;
  }else
  container.HorizontalAlign = HorizontalAlign.Left;
  }
  protected virtual void ApplyContainerStyles(){
  ApplyContainerStyle(paymentMethodContainer);
            ApplyContainerStyle(creditCardNolabelContainer);
            ApplyContainerStyle(creditCardNoContainer);
            ApplyContainerStyle(cardholderNameLabelContainer);
            ApplyContainerStyle(cardholderNameContainer);
            ApplyContainerStyle(expirationDateLabelContianer);
            ApplyContainerStyle(expirationDateContianer);
            ApplyContainerStyle(submitButtonContainer);
        }
        protected virtual void AddContainer(CreditCardFormContainer container){
            Controls.Add(container);
        }
        protected virtual void RenderContainer(CreditCardFormContainer container,HtmlTextWriter writer){
            container.RenderControl(writer);
        }
        protected override void OnDataBinding(EventArgs e){
            EnsureChildControls();
            //ChildControlsCreated = true;
            base.OnDataBinding(e);
        }
        protected override void CreateChildControls(){
            Controls.Clear();
            paymentMethodLabelContainer = CreateContainer(ContainerType.PaymentMethodLabel);
            CreateContainerChildControls(paymentMethodLabelContainer);
            AddContainer(paymentMethodLabelContainer);
            paymentMethodContainer = CreateContainer(ContainerType.PaymentMethod);
            CreateContainerChildControls(paymentMethodContainer);
            AddContainer(paymentMethodContainer);
            creditCardNoContainer = CreateContainer(ContainerType.CreditCardNo);
            CreateContainerChildControls(creditCardNoContainer);
            AddContainer(creditCardNoContainer);
            creditCardNolabelContainer = CreateContainer(ContainerType.CreditCardNoLabel);
            CreateContainerChildControls(creditCardNolabelContainer);
            AddContainer(creditCardNolabelContainer);
            cardholderNameLabelContainer = CreateContainer(ContainerType.CardholderNameLabel);
            CreateContainerChildControls(cardholderNameLabelContainer);
            AddContainer(cardholderNameLabelContainer);
            cardholderNameContainer = CreateContainer(ContainerType.CardholderName);
            CreateContainerChildControls(cardholderNameContainer);
            AddContainer(cardholderNameContainer);
            expirationDateLabelContianer = CreateContainer(ContainerType.ExpirationDateLabel);
            CreateContainerChildControls(expirationDateLabelContianer);
            AddContainer(expirationDateLabelContianer);
            expirationDateContianer = CreateContainer(ContainerType.ExpirationDate);
            CreateContainerChildControls(expirationDateContianer);
            AddContainer(expirationDateContianer);
            submitButtonContainer = CreateContainer(ContainerType.SubmitButton);
            CreateContainerChildControls(submitButtonContainer);
            AddContainer(submitButtonContainer);
        }
        protected override HtmlTextWriterTag TagKey
        {
            get
            {
                return HtmlTextWriterTag.Table;
            }
        }
        protected override void RenderContents(HtmlTextWriter writer){
            ApplyContainerStyles();

            writer.RenderBeginTag(HtmlTextWriterTag.Tr);
            RenderContainer(paymentMethodLabelContainer, writer);
            RenderContainer(paymentMethodContainer, writer);
            writer.RenderEndTag();

            writer.RenderBeginTag(HtmlTextWriterTag.Tr);
            RenderContainer(creditCardNolabelContainer, writer);
            RenderContainer(creditCardNoContainer, writer);
            writer.RenderEndTag();

            writer.RenderBeginTag(HtmlTextWriterTag.Tr);
            RenderContainer(cardholderNameLabelContainer, writer);
            RenderContainer(cardholderNameContainer, writer);
            writer.RenderEndTag();

            writer.RenderBeginTag(HtmlTextWriterTag.Tr);
            RenderContainer(expirationDateLabelContianer, writer);
            RenderContainer(expirationDateContianer, writer);
            writer.RenderEndTag();

            writer.RenderBeginTag(HtmlTextWriterTag.Tr);
            RenderContainer(submitButtonContainer, writer);
            writer.RenderEndTag();
        }
    }
}
//以下是template.aspx的页面代码
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="template.aspx.cs" Inherits="template" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
    <title>template</title>
</head>
<body>
    <form id="form1" runat="server">
    <div>
    <TX:TemplatedCreditCardForm runat="server" ID="TCC" PaymentMethodLabelText="Payment Method:"
     CreditCardNoLabelText="Credit Card NO.:" CardholderNameLabelText="Cardholder's Name:"
     ExpirationDateLabelText="Expiration Date:" SubmitButtonText="提交">
     <PaymentMethodLabelTemplate>
     <asp:Label ID="lblPM" runat="server" Text='<%#DataBinder.Eval(Container,"LabelText" %>'/>
     </PaymentMethodLabelTemplate>
     <PaymentMethodTemplate>
         <aspropDownList ID="DropDownList1" runat="server">
         <asp:ListItem Text="Visa" Value="1"/>
         <asp:ListItem Text="Master" Value="2" />
         </aspropDownList>
     </PaymentMethodTemplate>
     <CreditCardNoLabelTemplate>
     <asp:Label ID="lblCCN" runat="server" Text='<%#DataBinder.Eval(Container,"LabelText" %>'/>
     </CreditCardNoLabelTemplate>
     <CreditCardNoTemplate>
     <asp:TextBox ID="txtCCN" runat="server"/>
     </CreditCardNoTemplate>
     <CardholderNameLabelTemplate>
     <asp:Label ID="lblCN" runat="server" Text='<%#DataBinder.Eval(Container,"LabelText" %>'/>
     </CardholderNameLabelTemplate>
     <CardholderNameTemplate>
     <asp:TextBox ID="txtCN" runat="server"/>
     </CardholderNameTemplate>
     <ExpirationDateLabelTemplate>
     <asp:Label ID="lblED" runat="server" Text='<%#DataBinder.Eval(Container,"LabelText"%>'/>
     </ExpirationDateLabelTemplate>
     <ExpirationDateTemplate>
         <aspropDownList ID="ddlEDM" runat="server">
         <asp:ListItem Text="01" Value="01"/>
         <asp:ListItem Text="02" Value="02"/>
         <asp:ListItem Text="03" Value="03"/>
         <asp:ListItem Text="04" Value="04"/>
         <asp:ListItem Text="05" Value="05"/>
         <asp:ListItem Text="06" Value="06"/>
         <asp:ListItem Text="07" Value="07"/>
         <asp:ListItem Text="08" Value="08"/>
         <asp:ListItem Text="09" Value="09"/>
         <asp:ListItem Text="10" Value="10"/>
         <asp:ListItem Text="11" Value="11"/>
         <asp:ListItem Text="12" Value="12"/>
  </aspropDownList>
     </ExpirationDateTemplate>
     <SubmitButtonTemplate>
     <asp:Button ID="btnSB" runat="server" Text='<%#DataBinder.Eval(Container,"LabelText"%>'/>
     </SubmitButtonTemplate>
  </TX:TemplatedCreditCardForm>
  </div>
  </form>
</body>
</html>


匿名2008-08-13 15:53:04218.20.4.*

快速查询