2010年6月24日 星期四

新增/移除select內的option

在這邊記錄一下 Javascript 如何新增 / 移除 select 內的 option
<input type="text" id="myText">
<input type="button" value="Add text to select"
      onclick="AddText()">
<br>
<select id="mySelect"></select>
<br>
<input type="button" value="Remove text from select"
      onclick="RemoveOption()">

<script language="javascript">
   function AddText()
   {
      var myText = document.getElementById("myText");
      var mySelect = document.getElementById("mySelect");
      var NewOption = document.createElement("option");
      NewOption.text = myText.value;
      NewOption.value = myText.value;
      try {
         mySelect.add(NewOption,null); //其他瀏覽器
      }
      catch (ex) {
         mySelect.add(NewOption); //IE
      }
   }

   function RemoveOption()
   {
      var mySelect = document.getElementById("mySelect");
      for (i=mySelect.options.length-1; i>=0; i--)
      {   //倒過來移除 options
         if (mySelect.options[i].selected)
            mySelect.remove(i);
      }
   }
</script>

兩個複選下拉選單互相搬移 option 的 Sample
<table border="0">
   <tr>
      <td>
         <select id="LeftPool" multiple size="5">
            <option value="1">Line 1</option>
            <option value="2">Line 2</option>
            <option value="3">Line 3</option>
         </select>
      </td>
      <td align="center">
         <input type="button" value=" → "
            onclick="MoveOption('LeftPool', 'RightPool')">
         <br><br>
         <input type="button" value=" ← "
            onclick="MoveOption('RightPool', 'LeftPool')">
      </td>
      <td>
         <select id="RightPool" multiple size="5">
         </select>
      </td>
   </tr>
</table>

<script language="javascript">
   function MoveOption(FromPool, ToPool)
   {
      var FromPool = document.getElementById(FromPool);
      var ToPool = document.getElementById(ToPool);
      for (i=0; i<FromPool.options.length; i++)
      {
         if (FromPool.options[i].selected)
         {
            var NewOption = document.createElement("option");
            NewOption.text = FromPool.options[i].text;
            NewOption.value = FromPool.options[i].value;
            try {
               ToPool.add(NewOption,null);
            }
            catch (ex) {
               ToPool.add(NewOption);
            }
         }
      }
      for (i=FromPool.options.length-1; i>=0; i--)
      {
         if (FromPool.options[i].selected)
            FromPool.remove(i);
      }
   }
</script>

2010年6月15日 星期二

HtmlEncode 及 HtmlDecode

因為資料庫編碼的關係
有時候需要將資料先編碼後再存入
而取出來時, 則需將資料再解碼

所以記錄一下 .NET 的 Server.HtmlEncode() 及 HtmlDecode() 作用
   //寫入DB前,先將資料編碼
   string A = Server.HtmlEncode("は");
   //存入DB的資料為 '&#12399;'

   //讀出資料為'&#12399;',將資料解碼
   string A = Server.HtmlDecode(dt.rows[0][0].toString());
   //解碼後資料為'は'

[應用]
1.因為 Outlook 的 Email Subject 不會像 Email Body 一樣
   自動將編碼後的資料自動解碼為 Unicode 資料
   所以如果將編碼後的資料丟給 Outlook Email Subject,
   它就會原封不動的輸出, 以致於主旨會有 &#12399; 這種資料出現

2.Excel 也和 Outlook Email Subject 一樣
   並不會自動解碼, 所以在丟給 Excel 之前
   就要自行先將資料解碼

2010年6月14日 星期一

讓Checkbox 唯讀

因為Checkbox 沒辦法設定Readonly
如果將Checkbox 設定為Disabled , 則Server 又接不到Checkbox 的值
上網查了一下解決的方法
在此記錄一下
<input type="checkbox" checked onclick="return false;">必選選項

2010年6月1日 星期二

ClientScriptManager.RegisterStartupScript 無效

今天在 ASP.Net 網站中寫一個共用程式(common.cs)
想供各頁面引用
結果寫一個簡單的 Javascript Alert() function 就一直死不出來
在這邊記錄一下正確寫法
public void AlertMessage(System.Web.UI.Page page, string ScriptID, string Message)
{
   ClientScriptManager cs = page.ClientScript;
   if (!cs.IsStartupScriptRegistered(typeof(string), ScriptID))
   {
      string Script = "<script language=\"javascript\">";
      Script += " alert(\"" + Message + "\");";
      Script += "</script>"

      sc.RegisterStartupScript(typeof(string), ScriptID, Script);
   }
}

之前是死在我自行宣告的 page 物件
因為 page 物件是我建構出來的
並不是呼叫頁面的 page
RegisterStartupScript 加入的是我自行宣告的 page 物件中
而非原呼叫頁面
所以原呼叫頁面完全沒有這段 script 內容

原錯誤程式如下:
public void AlertMessage(string ScriptID, string Message)
{
   System.Web.UI.Page page = new System.Web.UI.Page();
   ClientScriptManager cs = page.ClientScript;
   if (!cs.IsStartupScriptRegistered(typeof(string), ScriptID))
   {
      string Script = "<script language=\"javascript\">";
      Script += " alert(\"" + Message + "\");";
      Script += "</script>"

      sc.RegisterStartupScript(typeof(string), ScriptID, Script);
   }
}

ASP 操作 Excel 簡單範例

.Net , ASP 操作 Excel 的方式都有些不同
所以在這記錄一下

<%
   ' 建立 Excel 應用程式
   Set xlApp=Server.CreateObject("Excel.Application")
   ' 建立 WorkBook
   Set xlBook = xlApp.Workbooks.Add
   ' 建立 WorkSheet
   Set xlSheet = xlBook.Worksheets.Add

   ' 給儲存格值
   xlSheet.Cells(1,1)="A1"
   xlSheet.Cells(1,2)="B1"

   ' 範圍文字變粗體
   xlSheet.Range("A1:B1").Font.Bold = true
   ' 範圍儲存格設框線
   xlSheet.Range(xlSheet.Cells(1,1),
         xlSheet.Cells(1,2)).Borders.Weight = 2
   ' WorkSheet 自動欄寬
   xlSheet.Columns.Autofit()

   ' 存檔
   xlBook.SaveAs "c:\test.xls"
   xlBook.Close
   xlApp.Quit

   Set xlApp = Nothing
   Set xlBook = Nothing
%>

參考下篇 : ASP 操作 Excel 簡單範例 (二)