重載asp.net的dropdownlist控制項,使其支援樣式和空格的一點改進

來源:互聯網
上載者:User

參考:http://kb.cnblogs.com/a/391555/

這個代碼很好用,讓呆板的DropDownList可以添加漂亮的樣式,並且支援空格.

也很有代表性,可以讓大家舉一反三,靈活使用其他asp控制項.

但在應用的時候,發現了一點小問題:

原作代碼用(char)58853來替換" ",效果看上去是像空格,但並不是空格,如果瀏覽器切換編碼,就會顯示亂碼.

為瞭解決這個問題,我對原代碼稍做修改,就可以任意切換都不會有問題.修改後的代碼如下:

using System;<br />using System.Data;<br />using System.Configuration;<br />using System.Web;<br />using System.Web.Security;<br />using System.Web.UI;<br />using System.Web.UI.WebControls;<br />using System.Web.UI.WebControls.WebParts;<br />using System.Web.UI.HtmlControls;</p><p>using System.ComponentModel;<br />using System.Collections;<br />using System.Drawing;</p><p>namespace reworkControl</p><p>{<br /> /// <summary><br /> /// DropDownLists的摘要說明<br /> /// </summary><br /> public class MyDropDownLists : DropDownList<br /> {<br /> protected override void RenderContents(HtmlTextWriter writer)<br /> {<br /> ListItemCollection listItemCollection = base.Items;<br /> int i = base.Items.Count;<br /> bool flag = false;<br /> if (i > 0)<br /> {<br /> for (int j = 0; j < i; j++)<br /> {<br /> ListItem listItem = listItemCollection[j];<br /> writer.WriteBeginTag("option");<br /> if (listItem.Selected)<br /> {<br /> if (flag)<br /> {<br /> throw new HttpException("Cant_Multiselect_In_DropDownList");<br /> }<br /> flag = true;<br /> writer.WriteAttribute("selected", "selected", false);</p><p> }<br /> writer.WriteAttribute("value", listItem.Value, true);<br /> System.Web.UI.AttributeCollection attributeCollection = listItem.Attributes;<br /> IEnumerator iEnumerator = attributeCollection.Keys.GetEnumerator();<br /> while (iEnumerator.MoveNext())<br /> {<br /> string str2 = (String)iEnumerator.Current;<br /> writer.Write(" " + str2 + "=/"" + attributeCollection[str2] + "/"");<br /> }<br /> writer.Write('>');</p><p> //start 一直到"//end",是修改的地方<br /> //HttpUtility.HtmlEncode(listItem.Text.Replace(" ", ((char)58853).ToString()), writer);<br /> string tmp = listItem.Text.Replace(" ", "§");//這裡的"§"盡量用偏僻的字元 </p><p> char[] pt = tmp.ToCharArray();<br /> for (int i = 0; i < pt.length; i++)<br /> {<br /> if (pt[i] == '§')<br /> {<br /> writer.Write(" ");<br /> }<br /> else<br /> {<br /> writer.Write(pt[i]);<br /> }<br /> }</p><p> //end</p><p> writer.WriteEndTag("option");<br /> writer.WriteLine();<br /> }<br /> }<br /> }</p><p> protected override object SaveViewState()<br /> {<br /> object[] objs = new object[2];<br /> objs[0] = base.SaveViewState();<br /> System.Collections.ArrayList list = new ArrayList();<br /> objs[1] = list;<br /> foreach (ListItem item in this.Items)<br /> {<br /> System.Collections.Hashtable hash = new Hashtable();<br /> foreach (Object key in item.Attributes.Keys)<br /> {<br /> hash.Add(key, item.Attributes[key.ToString()]);<br /> }<br /> list.Add(hash);<br /> }<br /> return objs;<br /> }<br /> protected override void LoadViewState(object savedState)<br /> {<br /> object[] objs = (Object[])savedState;<br /> base.LoadViewState(objs[0]);<br /> System.Collections.ArrayList list = (System.Collections.ArrayList)objs[1];<br /> for (int i = 0; i < list.Count; i++)<br /> {<br /> System.Collections.Hashtable hash = (System.Collections.Hashtable)list[i];<br /> foreach (object key in hash.Keys)<br /> {<br /> Items[i].Attributes.Add(key.ToString(), hash[key].ToString());<br /> }<br /> }<br /> }</p><p> }<br />}</p><p>  

下面對使用方法歸納整理下,便於初學者使用:

1> 將上面的代碼單獨儲存為.cs檔案,比如MyDropdownlist.cs

2>把檔案MyDropdownlist.cs拷貝到C:/WINDOWS/Microsoft.NET/Framework/v3.5檔案下

   (相信大家的Framework都是3.5了, 如果不是,請選相應的檔案夾).

3>運行->程式->附件->dos命令控制台,開啟命令窗後,輸入cd C:/WINDOWS/Microsoft.NET/Framework/v3.5,

   斷行符號進入該目錄,再輸入csc /t:library MyDropdownlist.cs,斷行符號.

4>把該目錄下產生的MyDropdownlist.dll拷貝到你的工程檔案裡面的/WEB/BIN檔案夾下.

5>需要使用該MyDropdownlist控制項的分頁檔(.aspx)頂部添加如下代碼:

 

 <%@ Page Language="C#" AutoEventWireup="true" CodeBehind="TEST.aspx.cs" Inherits="WebApplication.TEST" %>
 <%@ Register TagPrefix="myDDL" Namespace="reworkControl" Assembly="MyDropdownlist" %>  //在這個位置添加這行代碼
 <!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>
   ... ...

6>.aspx頁面調用的代碼如下:

<myDDL:MyDropdownlist ID="xxx" runat="server" Width="12px" DataTextField="Name" DataValueField="Id" />

//跟調用asp原控制項是一樣的,<asp:dropdownlis id="xxx" runat="server" ... ... />

7>頁面後台控制碼例子(照搬原例子):

    protected void Page_Load(object sender, EventArgs e)
    {
        ListItem item = new ListItem("&nbsp;&nbsp;蕭蕭", "bb");
        item.Attributes.Add("style", "color:#ff3939");
        item.Attributes.Add("onClick", "alert('你好')");
        drp.Items.Add(item);
        item = new ListItem("&nbsp;&nbsp;歡歡", "cj");
        item.Attributes.Add("style", "color:#ff39ee");
        item.Attributes.Add("onclick", "alert('我好')");
        drp.Items.Add(item);
    }

 

相信大家都會用了吧,怎麼樣,知道怎麼舉一反三,改造其他控制項來嗎?

當然,不是特別需要,最好不要隨便拓展控制項哦.

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.