複合控件的成功典范!!!(修正)

using System;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.ComponentModel;
using System.Drawing;

namespace CreateTech.Retail.ServerControl
{
    [DefaultProperty(
"Text")]
    [ToolboxData(
"<{0}:BaseDataSelecter runat=\"server\"></{0}:BaseDataSelecter>")]
    
public class BaseDataSelecter : WebControl
    {
        
private System.Web.UI.WebControls.HiddenField _hiddenField=new HiddenField();
        
private System.Web.UI.WebControls.TextBox _textBoxCode=new TextBox();
        
private System.Web.UI.WebControls.TextBox _textBoxName=new TextBox();

        [Browsable(
false)]
        [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]
        
//复合控件中隱藏文本框的ClientID
        public string HiddenFieldClientID
        {
            
get
            {
                EnsureChildControls();
                
return _hiddenField.ClientID;
            }
        }

        [Browsable(
false)]
        [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]
        
//复合控件中CODE文本框的ClientID
        public string TextBoxCodeClientID
        {
            
get
            {
                EnsureChildControls();
                
return _textBoxCode.ClientID;
            }
        }

        [Browsable(
false)]
        [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]
        
//复合控件中Name文本框的ClientID
        public string TextBoxNameClientID
        {
            
get
            {
                EnsureChildControls();
                
return _textBoxName.ClientID;
            }
        }

        
public override ControlCollection Controls
        {
            
get
            {
                EnsureChildControls();
                
return base.Controls;
            }
        }

        [Category(
"Appearance")]
        [DefaultValue(
"")]
        
public string Text
        {
            
get
            {
                EnsureChildControls();
                
return ViewState["Text"== null ? _hiddenField.Value : ViewState["Text"].ToString();
            }
            
set
            {
                EnsureChildControls();
                ViewState[
"Text"= value;
            }
        }

        [Browsable(
false)]
        [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]
        
//复合控件中隱藏文本框的ID
        public string HiddenFieldID 
        {
            
get
            {
                EnsureChildControls();
                
return "hid"+this.FieldName+"Id";
            }
        }

        [Browsable(
false)]
        [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]
        
//复合控件中CODE文本框的ID
        public string TextBoxCodeID
        {
            
get
            {
                EnsureChildControls();
                
return "txt" + this.FieldName + "Code";
            }
        }

        [Browsable(
false)]
        [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]
        
//复合控件中Name文本框的ID
        public string TextBoxNameID
        {
            
get
            {
                EnsureChildControls();
                
return "txt" + this.FieldName + "Name";
            }
        }

        
private string _FieldName = "";
        [Bindable(
true)]
        [Category(
"Appearance")]
        [DefaultValue(
"")]
        [Localizable(
true)]
        [Description(
"用於生成ID的特定字符串")]
        
public string FieldName
        {
            
get 
            {
                EnsureChildControls();
                
return _FieldName;
            }
            
set
            {
                EnsureChildControls();
                _FieldName 
= value;
            }
        }

        
private string _BaseDataType = "";
        [Bindable(
true)]
        [Category(
"Appearance")]
        [DefaultValue(
"")]
        [Localizable(
true)]
        [Description(
"基礎資料的類型")]
        
public string BaseDataType
        {
            
get
            {
                EnsureChildControls();
                
return _BaseDataType;
            }
            
set
            {
                EnsureChildControls();
                _BaseDataType 
= value;
            }
        }

        
private string _BaseDataUrl = "";
        [Bindable(
true)]
        [Category(
"Appearance")]
        [DefaultValue(
"")]
        [Localizable(
true)]
        [Description(
"選擇基礎資料的頁面地址")]
        
public string BaseDataUrl
        {
            
get
            {
                EnsureChildControls();
                
return _BaseDataUrl;
            }
            
set
            {
                EnsureChildControls();
                _BaseDataUrl 
= value;
            }
        }

        
private string _BaseDataID = "";
        [Bindable(
true)]
        [Category(
"Appearance")]
        [DefaultValue(
"")]
        [Localizable(
true)]
        [Description(
"基礎資料的ID")]
        
public string BaseDataID
        {
            
get
            {
                EnsureChildControls();
                
if (_BaseDataID != "")
                {
                    
return _BaseDataID;
                }
                
else
                {
                    
return _hiddenField.Value;
                }
            }
            
set
            {
                EnsureChildControls();
                _BaseDataID 
= value;
            }
        }

        
private string _BaseDataCode = "";
        [Bindable(
true)]
        [Category(
"Appearance")]
        [DefaultValue(
"")]
        [Localizable(
true)]
        [Description(
"基礎資料的Code")]
        
public string BaseDataCode
        {
            
get
            {
                EnsureChildControls();
                
if (_BaseDataCode != "")
                {
                    
return _BaseDataCode;
                }
                
else
                {
                    
return _textBoxCode.Text;
                }
            }
            
set
            {
                EnsureChildControls();
                _BaseDataCode 
= value;
            }
        }

        
private string _BaseDataName = "";
        [Bindable(
true)]
        [Category(
"Appearance")]
        [DefaultValue(
"")]
        [Localizable(
true)]
        [Description(
"基礎資料的Code")]
        
public string BaseDataName
        {
            
get
            {
                EnsureChildControls();
                
if (_BaseDataName != "")
                {
                    
return _BaseDataName;
                }
                
else
                {
                    
return _textBoxName.Text;
                }
            }
            
set
            {
                EnsureChildControls();
                _BaseDataName 
= value;
            }
        }

        
protected override void CreateChildControls()
        {
            Controls.Clear();
            
//_hiddenField = new HiddenField();
            _hiddenField.ValueChanged += new EventHandler(_hiddenField_ValueChanged);
            
//_textBoxCode = new TextBox();
            _textBoxCode.TextChanged += new EventHandler(_hiddenField_ValueChanged);
            
//_textBoxName = new TextBox();
            
//_hiddenField.ID = HiddenFieldID;
            
//_textBoxCode.ID = TextBoxCodeID;
            _textBoxCode.BackColor = ColorTranslator.FromHtml("#F0F0F0");
            _textBoxCode.Attributes.Add(
"disabled""disabled");
            _textBoxCode.Width 
= Unit.Parse("48px");
            _textBoxCode.Height 
= Unit.Parse("15px");
            _textBoxCode.BorderWidth 
= Unit.Parse("0px");
            
//_textBoxName.ID = TextBoxNameID;
            _textBoxName.BackColor = ColorTranslator.FromHtml("#F0F0F0");
            _textBoxName.Attributes.Add(
"disabled""disabled");
            _textBoxName.Width 
= Unit.Parse("120px");
            _textBoxName.BorderWidth 
= Unit.Parse("0px");
            Controls.Add(_hiddenField);
            Controls.Add(_textBoxCode);
            Controls.Add(_textBoxName);
        }

        
private void _hiddenField_ValueChanged(object sender, EventArgs e)
        {
            BaseDataID 
= _hiddenField.Value;
        }

        
protected override void OnInit(EventArgs e)
        {
            
base.OnInit(e);
            _hiddenField.ID 
= HiddenFieldID;
            _textBoxName.ID 
= TextBoxNameID;
            _textBoxCode.ID 
= TextBoxCodeID;
        }

        
///
        
/// 将此控件呈现给指定的输出参数。
        
///
        
/// 要写出到的 HTML 编写器
        protected override void Render(HtmlTextWriter output)
        {
            EnsureChildControls();
            output.AddAttribute(HtmlTextWriterAttribute.Cellspacing, 
"0");
            output.AddAttribute(HtmlTextWriterAttribute.Cellpadding, 
"0");
            output.AddAttribute(HtmlTextWriterAttribute.Border,
"0");
            output.AddAttribute(HtmlTextWriterAttribute.Style, 
"border:solid 1px #AECAF0;border-collapse:collapse; background:#F0F0F0;");

            output.RenderBeginTag(HtmlTextWriterTag.Table);

            output.RenderBeginTag(HtmlTextWriterTag.Tr);

            output.AddStyleAttribute(HtmlTextWriterStyle.BorderWidth, 
"0px");
            output.RenderBeginTag(HtmlTextWriterTag.Td);
            
//_hiddenField.ID = HiddenFieldID;
            
//_hiddenField.Value = BaseDataID;
            
//_textBoxCode.ID = TextBoxCodeID;
            
//_textBoxCode.Text = BaseDataCode;
            _hiddenField.RenderControl(output);
            _textBoxCode.RenderControl(output);
            output.RenderEndTag();

            output.AddAttribute(HtmlTextWriterAttribute.Style, 
"border-left:solid 1px #AECAF0; border-right:solid 1px #AECAF0; background:#D4D4D4;");
            output.RenderBeginTag(HtmlTextWriterTag.Td);

            
//output.AddAttribute(HtmlTextWriterAttribute.Id, "xxx"+HiddenFieldID);
            output.AddAttribute(HtmlTextWriterAttribute.Src, this.Page.ClientScript.GetWebResourceUrl(this.GetType(), "CreateTech.Retail.ServerControl.Resources.base_data_select.jpg"));
            output.AddAttribute(HtmlTextWriterAttribute.Style, 
"border:0px; width:20px; height:20px; cursor:pointer;");
            output.AddAttribute(HtmlTextWriterAttribute.Onclick, 
"if(typeof(popupURL)!=\"undefined\"){popupURL.SetContentHTML('');popupURL.SetContentUrl('" + BaseDataUrl + "?id="+HiddenFieldClientID+"&code="+TextBoxCodeClientID+"&name="+TextBoxNameClientID+"&t=" + BaseDataType + "&sid=" + FieldName + "&v='+(new Date()).getTime());popupURL.Show();}");
            output.RenderBeginTag(HtmlTextWriterTag.Img);
            output.RenderEndTag();
            output.RenderEndTag();

            output.AddStyleAttribute(HtmlTextWriterStyle.BorderWidth, 
"0px");
            output.RenderBeginTag(HtmlTextWriterTag.Td);
            
//_textBoxName.ID = TextBoxNameID;
            _textBoxName.Text = BaseDataName;
            _textBoxName.RenderControl(output);
            output.RenderEndTag();

            output.RenderEndTag();

            output.RenderEndTag();
        }
    }
}
<cc1:BaseDataSelecter ID="txtBrand" runat="server" FieldName="Brand" BaseDataType="10000" BaseDataUrl="PopupControl/SelectBaseData.aspx" />
<%@ Register Assembly="CreateTech.Retail.ServerControl" Namespace="CreateTech.Retail.ServerControl"
    TagPrefix
="cc1" %>

 

posted @ 2011-04-27 14:17  Yaoquan.Luo  阅读(285)  评论(0)    收藏  举报