自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

ASP.NET控件開發(fā)基礎(chǔ)之實(shí)現(xiàn)控件集合屬性

開發(fā) 后端
ASP.NET控件開發(fā)基礎(chǔ)之實(shí)現(xiàn)控件集合屬性是在學(xué)習(xí)了類型轉(zhuǎn)換器的使用之后,我們繼續(xù)討論討論集合屬性的使用,那么對于自定義控件的操作有什么特別的呢?本文就向你介紹相關(guān)內(nèi)容。

集合屬性相信大家都很熟悉也很常用,如DropDownList,ListBox等控件

  1. ﹤asp:DropDownList ID="DropDownList1" runat="server"﹥  
  2.             ﹤asp:ListItem﹥測試1﹤/asp:ListItem﹥  
  3.             ﹤asp:ListItem﹥測試2﹤/asp:ListItem﹥  
  4.             ﹤asp:ListItem﹥測試3﹤/asp:ListItem﹥  
  5.         ﹤/asp:DropDownList﹥ 

ASP.NET控件開發(fā)基礎(chǔ)之實(shí)現(xiàn)控件集合屬性1.實(shí)現(xiàn)集合屬性效果

經(jīng)過前面幾篇的學(xué)習(xí),相信這一篇看起來已經(jīng)相對簡單了.我們要做的就是,先定義一個(gè)復(fù)雜屬性,然后用迭代語句獲取數(shù)組數(shù)據(jù)即可.

如果看過前面幾篇就看看下面代碼吧,相信看起來很簡單,我們模仿一個(gè)DropDownList,為其屬性添加背景屬性,代碼如下

先定義一個(gè)集合屬性,如下

  1. public class DropItem  
  2.    {  
  3.        private string text;  
  4.        private string value;  
  5.        private Color backColor;  
  6.  
  7.        [  
  8.         Category("Behavior"),  
  9.         DefaultValue(""),  
  10.         Description("項(xiàng)文本"),  
  11.         NotifyParentProperty(true),  
  12.         ]  
  13.        public String Text  
  14.        {  
  15.            get 
  16.            {  
  17.                return text;  
  18.            }  
  19.            set 
  20.            {  
  21.                text = value;  
  22.            }  
  23.        }  
  24.  
  25.        [  
  26.        Category("Behavior"),  
  27.        DefaultValue(""),  
  28.        Description("項(xiàng)值"),  
  29.        NotifyParentProperty(true),  
  30.        ]  
  31.        public String Value  
  32.        {  
  33.            get 
  34.            {  
  35.                return value;  
  36.            }  
  37.            set 
  38.            {  
  39.                this.value = value;  
  40.            }  
  41.        }  
  42.  
  43.        [  
  44.        Category("Behavior"),  
  45.        DefaultValue(""),  
  46.        Description("背景顏色"),  
  47.        NotifyParentProperty(true),  
  48.        ]  
  49.        public Color BackColor  
  50.        {  
  51.            get 
  52.            {  
  53.  
  54.                return backColor;  
  55.            }  
  56.            set 
  57.            {  
  58.                backColor = value;  
  59.            }  
  60.        }  
  61.  
  62.    } 

然后自定義一個(gè)控件,輸出集合屬性,如下代碼

  1. [ParseChildren(true"DropItemList")]  
  2.   public class DropColor:WebControl  
  3.    {  
  4.       private ArrayList dropItemList;  
  5.  
  6.        [  
  7.        Category("Behavior"),  
  8.        Description("項(xiàng)集合"),  
  9.        DesignerSerializationVisibility(  
  10.            DesignerSerializationVisibility.Content),  
  11.        PersistenceMode(PersistenceMode.InnerDefaultProperty),  
  12.         
  13.        ]  
  14.  
  15.       //定義集合屬性  
  16.       public ArrayList DropItemList  
  17.        {  
  18.            get 
  19.            {  
  20.                if (dropItemList == null)  
  21.                {  
  22.                    dropItemList = new ArrayList();  
  23.                }  
  24.                return dropItemList;  
  25.            }  
  26.        }  
  27.  
  28.       //重寫標(biāo)簽  
  29.       protected override HtmlTextWriterTag TagKey  
  30.       {  
  31.           get 
  32.           {  
  33.               return HtmlTextWriterTag.Select;  
  34.           }  
  35.       }  
  36.       protected override void RenderContents(HtmlTextWriter writer)  
  37.       {  
  38.           //輸出集合屬性  
  39.           foreach (DropItem item in dropItemList)  
  40.           {  
  41.               DropItem dr = item as DropItem;  
  42.               if (dropItemList != null && dropItemList.Count ﹥ 0)  
  43.               {  
  44.               //顏色轉(zhuǎn)換  
  45.               WebColorConverter wcc = new WebColorConverter();  
  46.               writer.AddAttribute(HtmlTextWriterAttribute.Value, dr.Value.ToString());  
  47.               writer.AddStyleAttribute(HtmlTextWriterStyle.BackgroundColor, wcc.ConvertToString(dr.BackColor));  
  48.               writer.RenderBeginTag(HtmlTextWriterTag.Option);  
  49.               writer.Write(dr.Text.ToString());  
  50.               writer.RenderEndTag();  
  51.               }  
  52.           }  
  53.           base.RenderContents(writer);  
  54.       }  
  55.    } 

上面代碼注意顏色類型之間的轉(zhuǎn)換,以下為HTML代碼

  1. ﹤custom:DropColor ID="DropColor1" runat="server" ForeColor="White"﹥  
  2.         ﹤custom:DropItem BackColor="Yellow" Text="黃色" Value="yellow" /﹥  
  3.         ﹤custom:DropItem BackColor="Red" Text="紅色" Value="red" /﹥  
  4.         ﹤custom:DropItem BackColor="Blue" Text="藍(lán)色" Value="blue" /﹥  
  5.         ﹤custom:DropItem BackColor="Green" Text="綠色" Value="green" /﹥  
  6.         ﹤custom:DropItem BackColor="Black" Text="黑色" Value="Black" /﹥  
  7.         ﹤/custom:DropColor﹥ 

輸出以后的效果如下圖

輸出以后的效果 

效果還不錯(cuò)吧,而且挺實(shí)用的.

ASP.NET控件開發(fā)基礎(chǔ)之實(shí)現(xiàn)控件集合屬性2.定義編輯器

大家一般在添加集合屬性的時(shí)候往往會在.net自帶的編輯器中添加數(shù)據(jù),這樣可以提高效果,不用在HTML視圖添加數(shù)據(jù).如下圖

添加集合屬性 

我們也可以為其添加自定義的編輯器,其實(shí)我們一直在用.net自帶的編輯器,我們稱之為 UI編輯器或視圖編輯器,如顏色,時(shí)間,超級鏈接等,大家該有所體會

其編輯器的基類為位于System.Drawing.Design命名空間的UITypeEditor,很多UI編輯器都從此類派生,有興趣的可以去了解下這個(gè)類.

你們?nèi)绾问褂檬褂肬I編輯器呢?也跟上一篇講的類型轉(zhuǎn)換器一樣,你先要定義一個(gè)UI編輯器,然后與相關(guān)屬性關(guān)聯(lián)起來.

因?yàn)樗x的是一個(gè)集合類,而.net已經(jīng)為我們提供了一個(gè)集合編輯器的CollectionEditor類,其已經(jīng)為我們做了很多工作了,我們最簡單的只需重寫幾個(gè)方法即可.具體其他屬性和方法請參考MSDN,如下代碼

  1. public class DropItemEditor : CollectionEditor  
  2.  {  
  3.      public DropItemEditor(Type type)  
  4.          : base(type)  
  5.      {  
  6.      }  
  7.      //一次可否選擇多項(xiàng)  
  8.      protected override bool CanSelectMultipleInstances()  
  9.      {  
  10.          return false;  
  11.      }  
  12.  
  13.      //獲取此集合包含的數(shù)據(jù)類型  
  14.      protected override Type CreateCollectionItemType()  
  15.      {  
  16.          return typeof(DropItem);  
  17.      }  
  18.  } 

然后把集合屬性與編輯器關(guān)聯(lián)起來,添加了一個(gè)EditorAttribute,第一個(gè)參數(shù)為指定的編輯器類型,第二個(gè)為基本類型

  1.  Category("Behavior"),  
  2.  Description("項(xiàng)集合"),  
  3.  DesignerSerializationVisibility(  
  4.      DesignerSerializationVisibility.Content),  
  5.  PersistenceMode(PersistenceMode.InnerDefaultProperty),  
  6.  Editor(typeof(DropItemEditor), typeof(UITypeEditor)),  
  7.  ]  
  8. //定義集合屬性  
  9. public ArrayList DropItemList  
  10.  {  
  11.      get 
  12.      {  
  13.          if (dropItemList == null)  
  14.          {  
  15.              dropItemList = new ArrayList();  
  16.          }  
  17.          return dropItemList;  
  18.      }  
  19.  } 

然后再來看下效果,這樣就方面很多了.

效果 

如果還不想看到編輯器里的CustomComponents的命名空間的話,你可以像上一篇一樣自定義一個(gè)類型轉(zhuǎn)換器,代碼如下:

  1. public class DropItemConverter : ExpandableObjectConverter  
  2. {  
  3.     方法#region 方法  
  4.       
  5.     public override bool CanConvertFrom(ITypeDescriptorContext context, Type sourceType)  
  6.     {  
  7.         if (sourceType == typeof(string))  
  8.         {  
  9.             return true;  
  10.         }  
  11.         return base.CanConvertFrom(context, sourceType);  
  12.     }  
  13.  
  14.     public override bool CanConvertTo(ITypeDescriptorContext context, Type destinationType)  
  15.     {  
  16.         if (destinationType == typeof(string))  
  17.         {  
  18.             return true;  
  19.         }  
  20.         return base.CanConvertTo(context, destinationType);  
  21.     }  
  22.  
  23.     public override object ConvertFrom(ITypeDescriptorContext context, CultureInfo culture,  
  24.         object value)  
  25.     {  
  26.         if (value == null)  
  27.         {  
  28.             return new DropItem();  
  29.         }  
  30.         if (value is string)  
  31.         {  
  32.             string s = (string)value;  
  33.             if (s.Length == 0)  
  34.             {  
  35.                 return new DropItem();  
  36.             }  
  37.             return "DropItem";  
  38.  
  39.         }  
  40.         return base.ConvertFrom(context, culture, value);  
  41.     }  
  42.  
  43.     public override object ConvertTo(  
  44.         ITypeDescriptorContext context,  
  45.         CultureInfo culture, object value, Type destinationType)  
  46.     {  
  47.         if (value != null)  
  48.         {  
  49.             if (!(value is DropItem))  
  50.             {  
  51.                 throw new ArgumentException(  
  52.                     "Invalid DropItem""value");  
  53.             }  
  54.         }  
  55.  
  56.         if (destinationType == typeof(string))  
  57.         {  
  58.             if (value == null)  
  59.             {  
  60.                 return String.Empty;  
  61.             }  
  62.             return "DropItem";  
  63.         }  
  64.         return base.ConvertTo(context, culture, value,  
  65.             destinationType);  
  66.     }  
  67.     #endregion  

然后還是照著步驟把屬性與其關(guān)聯(lián)起來

  1. [TypeConverter(typeof(DropItemConverter))]  
  2.   public class DropItem  
  3.   {  
  4.   } 

再來看下效果

效果 

好了,這回講的比較簡單又實(shí)用,希望對大家有幫助.大家同時(shí)也可以參考MSDN里的例子,下面的示例代碼下載我也加上了MSDN的例子.
已經(jīng)寫了10篇了,我們應(yīng)該有些基礎(chǔ)了,我想大家該可以做出一些簡單實(shí)用的控件了.

ASP.NET控件開發(fā)基礎(chǔ)之實(shí)現(xiàn)控件集合屬性的相關(guān)內(nèi)容就講解到這里,希望對你了解ASP.NET控件開發(fā)基礎(chǔ)之實(shí)現(xiàn)控件集合屬性有所幫助。

【編輯推薦】

  1. ASP.NET自定義控件屬性淺析
  2. ASP.NET控件開發(fā)基礎(chǔ)之自定義控件樣式屬性淺析
  3. ASP.NET控件開發(fā)基礎(chǔ)之復(fù)合控件淺析
  4. ASP.NET控件開發(fā)基礎(chǔ)之復(fù)合控件事件處理淺析
  5. ASP.NET控件開發(fā)基礎(chǔ)之類型轉(zhuǎn)換器淺析
責(zé)任編輯:仲衡 來源: 博客園
相關(guān)推薦

2009-08-06 10:49:45

ASP.NET服務(wù)器控

2009-08-06 18:18:27

ASP.NET控件開發(fā)ASP.NET復(fù)合控件

2009-08-06 17:52:45

ASP.NET控件開發(fā)自定義控件

2009-08-07 13:31:41

ASP.NET控件開發(fā)

2009-08-04 10:43:59

ASP.NET控件開發(fā)

2009-08-07 14:42:02

ASP.NET控件開發(fā)

2009-08-06 09:18:01

ASP.NET自定義控ASP.NET控件開發(fā)

2009-08-06 18:32:00

ASP.NET控件開發(fā)ASP.NET復(fù)合控件

2009-08-07 15:24:16

ASP.NET模板控件

2009-08-06 13:08:23

ASP.NET控件開發(fā)

2009-07-30 16:52:38

復(fù)合控件ASP.NET服務(wù)器控

2009-08-07 14:05:21

ASP.NET控件

2009-08-06 17:13:56

ASP.NET自定義控

2009-08-07 15:34:15

ASP.NET數(shù)據(jù)綁定

2009-07-28 14:47:18

ASP.NET MVC

2009-08-07 13:56:46

ASP.NET控件開發(fā)

2009-08-19 13:44:00

ASP.NET Lis

2009-07-29 13:50:26

UpdatePanelASP.NET

2009-08-05 15:57:03

ASP.NET控件ID

2009-08-17 09:24:25

ASP.NET控件
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號