熱點推薦:
您现在的位置: 電腦知識網 >> 編程 >> .NET編程 >> 正文

如何在Asp.net中實現多彩下拉框

2013-11-13 10:05:16  來源: .NET編程 

  開發背景
   有人曾經要我開發一個根據不同選擇而顯示不同顏色的管理工具我開始考慮利用下拉框來實現條目背景及顯示顏色根據條目名稱不同而進行變化根據這個思路我在網上搜了半天也沒有找到任何相關的解決方案最後我想到了一個比當初需求要復雜的方案(包括數據庫)所以我嘗試著找到一個更簡單的實現方案
  
   該文主要是演示如何讀取系統顏色並在下拉框中的每個條目中顯示對應的顏色該源碼主要展示以下內容
   如何獲得SystemDrawingKnownColor顏色控件的列表枚舉
   如何排除系統環境顏色Active Border
   如何分配顏色到下拉框的每個條目 
   
  代碼詳解
   命名下拉框為ddlMultiColor 來顯示顏色名稱及顏色用<div>標簽顯示右側矩形結果Aspx代碼如下


     <table>
   <tr>
   <td>
   <asp:DropDownList ID =ddlMultiColor
   OnSelectedIndexChanged=ddlMultiColor_OnSelectedIndexChanged
   runat=server AutoPostBack=true>
   </asp:DropDownList>
   </td>
   <td>
   <div id=msgColor runat=server>
   </div>
   </td>
   </tr>
  </table> 

  在cs文件中我們需要引用以下命名空間

     using System;
  using SystemWeb;
  using SystemReflection;
  using SystemDrawing;
  using SystemCollectionsGeneric; 

  我們先看一下Page_Load事件在Page_Load中我們對選中的下拉列表進行處理顯示

     protected void Page_Load(object sender EventArgs e)
  {
   if (PageIsPostBack == false)
   {
   populateDdlMultiColor(); //
   colorManipulation();
   }
  } 

  現在讓我們來看一下populateDdlMultiColor() 函數

     private void populateDdlMultiColor()
  {
   ddlMultiColorDataSource = finalColorList();
   ddlMultiColorDataBind(); //liudao 翻譯
  }
  
   finalColorList()方法
  private List finalColorList()
  {
   string[] allColors = EnumGetNames(typeof(SystemDrawingKnownColor));
   string[] systemEnvironmentColors =
   new string[(
   typeof(SystemDrawingSystemColors))GetProperties()Length];
  
   int index = ;
  
   foreach (MemberInfo member in (
   typeof(SystemDrawingSystemColors))GetProperties())
   {
   systemEnvironmentColors[index ++] = memberName;
   }
  
   List finalColorList = new List();
  
   foreach (string color in allColors)
   {
   if (ArrayIndexOf(systemEnvironmentColors color) < )
   {
   finalColorListAdd(color);
   }
   }
   return finalColorList;
  } 

  SystemDrawingKnownColor是系統本身自帶顏色我已經通過枚舉列出了這些顏色並通過 finalColorList()函授進行綁定為了實現該功能我使用了最基本的枚舉特征之一EnumGetNames() 共享方法該方法對枚舉內容進行檢測並輸出結果為字符串序列該字符串中每個值都對應枚舉中的每個結果
   然而該方法還是有些問題的按照上面的思路枚舉金額過中會包括系統環境顏色比如Active Border(注活動邊框)為了解決該問題我擴展了系統環境顏色我用了SystemReflectionMemberInfo類
   這裡我用SystemDrawingSystemColors屬性填充systemEnvironmentColors 然後創建一個名稱為finalColorList 的圖形列表在finalColorList 中我只調用已知顏色但是不在系統環境顏色中然後把finalColorList綁定到ddlMultiColor中至此我們已經有了一個包括全部顏色名稱的下拉框下面讓我們來操作一下


     private void colorManipulation()
  {
   int row;
   for (row = ; row < ddlMultiColorItemsCount ; row++)
   {
   ddlMultiColorItems[row]AttributesAdd(style
   backgroundcolor: + ddlMultiColorItems[row]Value);
   }
   ddlMultiColorBackColor =
   ColorFromName(ddlMultiColorSelectedItemText);//liudao翻譯
  } 

  下拉框中的每一行背景顏色的Style]屬性都與該行顯示的顏色名稱對應的在OnSelectedIndexChanged 事件中下拉框中被選中的行通過下面的函數結合<div>標簽進行高亮顯示同時右側的矩形顏色也隨之變化

     protected void ddlMultiColor_OnSelectedIndexChanged(object sender
   EventArgs e)
  {
   ddlMultiColorBackColor = ColorFromName(ddlMultiColorSelectedItemText);
   colorManipulation();
   ddlMultiColorItemsFindByValue(ddlMultiColorSelectedValue)Selected =
   true;
   msgColorAttributesAdd(style background: +
   ddlMultiColorSelectedItemValue + ;width:px;height:px;);
  }  
   至此我們學會了如果獲取SystemDrawing並排出系統環境顏色並綁定顏色名稱到下拉列表


From:http://tw.wingwit.com/Article/program/net/201311/12522.html
    推薦文章
    Copyright © 2005-2013 電腦知識網 Computer Knowledge   All rights reserved.