2008年4月29日 星期二

checkbox 全選或取消

介紹一個將 checkbox 全選或是取消的方法。
關鍵的 js 語法如下:




function chkall(input1,input2)
{
var objForm = document.forms[input1];
var objLen = objForm.length;
for (var iCount = 0; iCount < objLen; iCount++)
{  
if (input2 == true)  
{   
if (objForm.elements[iCount].type == "checkbox")
{  
objForm.elements[iCount].checked = true;  
}  
}
else
{  
if (objForm.elements[iCount].type == "checkbox")  
{
objForm.elements[iCount].checked = false;
}
}
}
}

這方法的優點,是會將 form 名稱當參數傳入。在ASP.Net 2.0可以發現,如果你有使用 MasterPage時,預設的 form 名稱會變成 aspnetForm。 缺點是,這是會影響目前畫面上的所有 checkbox,如果你的畫面上出現的都是你想要變更的 checkbox,那就無妨,否則還需要作一些加工才能符合需求。

詳細程式碼:[Here]


在這個範例中,分別用了2個 GridView,其中一個採用 預設的 checkbox ServerControl ,另一個則是 Html checkbox,當畫面上有個觸發 PostBack 的按鈕執行後,只剩下 ServerControl 依然能夠維持目前所勾選的狀態。

2008年4月26日 星期六

image 出現手指的游標

<image> 是個很簡單的物件。有時候我們可能只是放一個按鈕圖示而已。但希望當滑鼠游標移到按鈕上頭時,要能變成手指的圖示,這時候,可以透過 javascript去設定 onmouseover的屬性來達成。


ex:

img.Attributes.Add("onmouseover", "style.cursor='pointer'");

在 IE 4/5 版本,是支援 "style.cursor='hand'" 當作是『手指』的游標符號。但後來 W3C 公佈的標準裡採用 pointer 當作手指的符號,所以IE 6 以後的版本也可使用 pointer 來指定手指游標。目前的 FireFox 或 Google 瀏覽器則都是採用 pointer。

附上常見 游標符號:



CSS 樣式顯現結果
{ cursor: crosshair; }
滑鼠游標圖案是 crosshair
{ cursor: pointer; }
滑鼠游標圖案是 pointer
{ cursor: text; }
滑鼠游標圖案是 text
{ cursor: move; }
滑鼠游標圖案是 move
{ cursor: wait; }
滑鼠游標圖案是 wait
{ cursor: help; }
滑鼠游標圖案是 help
{ cursor: progress; }
滑鼠游標圖案是 progress
{ cursor: not-allowed; }
滑鼠游標圖案是 not-allowed
{ cursor: no-drop; }
滑鼠游標圖案是 no-drop
{ cursor: no-vertical-text; }
滑鼠游標圖案是 no-vertical-text
{ cursor: all-scroll; }
滑鼠游標圖案是 all-scroll
{ cursor: col-resize; }
滑鼠游標圖案是 col-resize
{ cursor: row-resize; }
滑鼠游標圖案是 row-resize
{ cursor: e-resize; }
滑鼠游標圖案是 e-resize
{ cursor: ne-resize; }
滑鼠游標圖案是 ne-resize
{ cursor: n-resize; }
滑鼠游標圖案是 n-resize
{ cursor: nw-resize; }
滑鼠游標圖案是 nw-resize
{ cursor: w-resize; }
滑鼠游標圖案是 w-resize
{ cursor: sw-resize; }
滑鼠游標圖案是 sw-resize
{ cursor: s-resize; }
滑鼠游標圖案是 s-resize
{ cursor: se-resize; }
滑鼠游標圖案是 se-resize

我們也可以自定游標圖案。自定圖案的語法是:
{ cursor: url(圖案網址); }

更新日期:20090701

在 Server Control 裡使用 資源檔

Ref :http://aspalliance.com/articleViewer.aspx?aId=726&pId=-1

以往在設計 Server Control 元件時,常常會為了需要嵌入圖片或是JavaScript檔而煩惱。透過 .Net 2.0所提供的新方法,讓我們在設計自行研發的元件時,更有彈性。

一、如何建立 Server Control。
01.先建立一個測試專案:ServerControlTest

02.在ServerControlTest專案中,建立一個資源檔(Resource) .resx

03.開啟 Resource.resx,選擇加入資源頁籤,並加入你的檔案。可以是圖檔、文字檔。範例中,我同時加入圖片檔(icon-find.gif)、Javascript(jsMMS.js)檔以及字串 test來說明。

04.由於我們希望將圖片、文字檔都能夠包在未來所產生的元件裡,不再需要透過連結方式來存取,所以要記得分別點選方案總管下的Resource資料夾裡的 icon-find.gif、jsMMS.js,將建置動作改為『內嵌資源』。

05.為了讓元件能夠存取資源檔裡所加入的檔案,可以到方案總管,看到專案裡的屬性頁籤資料夾,找到 AssemblyInfo.cs 檔,打開並編輯。

[詳細程式碼]

加入兩行:
[assembly: System.Web.UI.WebResource("ServerControlTest.Resources.icon-find.gif", "img/gif")]
[assembly: System.Web.UI.WebResource("ServerControlTest.Resources.jsMMS.js", "text/js")]

透過WebResource( v1,v2),定義了要去抓取資源檔的位置與檔案型態。
WebResource(v1,v2) 第一個參數,是一個包含完整的NameSpace名稱與資源檔所在路徑與檔名。[NameSpace].[路徑].[檔名],對照目前的範例,就是ServerControlTest.Resources.icon-find.gif。第二個參數則是檔案的型態定義:img/gif、text/js



二、如何使用 Resource。

01.在方案總管裡,我們需要加入兩個參考(Reference):
System.Web
System.Drawing


02.加入一個新的類別 SCTest01.cs [詳細程式碼]
並在其 using 的區塊,新增兩個 :
using System.Web.UI;
using System.ComponentModel;

我們將這個類別(SCTest01.cs)去繼承 Control 物件

03.覆寫 Render方法
protected override void Render(HtmlTextWriter writer)

首先建立一個 Image 物件,而這 Image物件的圖片來源,則是透過事先存在資源檔的圖片當作其來源。抓取資源檔的方法為:GetWebResourceUrl( )。
在這個方法裡,有兩個參數,第一個是要指定資源檔的類型,我們可以傳入 this.GetType()。第二個參數,則是要傳入資源名稱。這裡需特別注意的地方,是要傳入包含完整的NameSpace名稱與資源檔所在路徑與檔名。[NameSpace].[路徑].[檔名],對照目前的範例,就是ServerControlTest.Resources.icon-find.gif

介紹了抓圖檔之後,再提抓資源檔裡的字串方法,以Image.ToolTip為例。這個資源檔裡的字串,就相對簡單些了,只需要透過資源檔變數的屬性,就可以完成設定的動作。
[資源檔變數].[字串名稱]
Resource1.Test

為了讓這個圖示比較完美些,也在程式中加入了一個 onmouseover 的處理,讓游標移到 Image 物件上時,能夠變成『手指』的樣子。

此外,加入了 User 壓下按鈕時會觸發 JavaScript 的事件。

img.Attributes["onclick"] = "showWelcome();";

而 showWelcome() 正是我們事先定義在資源檔裡的 JavaScript。

最後,則是將設定好的 Image 物件加入目前的 控制項物件裡。

三、陷阱。

大部分的Server Control,都是透過覆寫 Render( ) 方法來完成。然而現在所介紹的資源檔,在使用字串、圖片等,都沒有問題。唯一有問題的,是 javascript。如果我們在 Render()方法裡去註冊事先定義在資源檔裡的 javascript,則會發生當 USER 觸發了按鈕而啟動 javascript方法時,因為 javascript尚未產生出來而發生錯誤的現象。為了避免這問題,就需要將註冊 javascript的動作提前,例如範例中,我將註冊的時間點提前在 OnInit( ) 的地方。

ps:可以參考先前 Server Control 生命週期 的介紹

四、使用 Server Control

01.先建立一個網站,MyTestWeb
02.在工具箱裡的一般頁籤,按滑鼠右鍵,點選『選擇項目』。

03.點選『瀏覽』按鈕,並挑選剛剛 Server Control 專案所產生的 dll 檔,確定後,就會在工具箱多了一個我們自訂的元件。

04.將我們自訂的元件,拖拉至 .aspx 頁面,即完成 Server Control 的叫用。


參考程式碼:\\3probe-server\RD2\Document\Program\Server Control\ServerControlTest.rar

2008年4月25日 星期五

呼叫 User Control 所定義的方法

一個 User Control,裡面大多會自己定義了許多的方法,當主頁面加入了這個 User Control之後,並想要呼叫 User Control 的方法,[Professional ASP.NET Server Controls]作者有介紹了一篇不錯的用法:



假設 User Control 定義了:
public string ShowUCMsgWithSomeString(string str)
{
return string.Format("This message is from usercontrol and with some strign :{0}", str);
}

則主頁呼叫的方式為:


// 待會給 MethodInfo 使用
using System.Reflection;

//抓目前頁面上的 UserControl
Control ctl = Page.FindControl("MyUC1");

//取得執行個體的 Type
Type ctlType = ctl.GetType();


//取得已定義的方法
MethodInfo ctlMethod = ctlType.GetMethod("ShowUCMsgWithSomeString");

//取得已定義方法的參數
ParameterInfo[] p = ctlMethod.GetParameters();

//輸入參數宣告
Object[] parameters = new Object[p.Length];
string strPassInfo = "Hello my usercontrol!";
parameters[0] = strPassInfo;

//執行 UserControl 所定義的方法
lbMsg2.Text = ctlMethod.Invoke(ctl, parameters).ToString();

程式參考:
\\3probe-server\RD2\Document\Program\User Control\UCTest01.zip

2008年4月23日 星期三

技能清單

ASP.Net
SQL
  • Store-Procedure
  • Transaction
  • Join
  • String函數

HTML
  • ifreame


JavaScript


Reporting Service
  • Layout Report
  • 透過WebService製作 PDF
  • SubReport


專案管理技巧
專案時程制定與檢視(PDCA:Plan-Do It-Check-Action)
陳頂立的PDCA

無法辨認的組態區段 authentication

最近有個 VS2005的專案,重新 Compiler時會出現
Web.Config【無法辨認的組態區段 authentication】
的錯誤訊息,檢查了該檔案並沒有任何拼錯的地方,
最後試著將IIS上的站台移除,並重新開啟專案,讓
VS2005幫我自動在IIS上重新建立一個虛擬站台,
同時,也將VSS暫時解除繫結,Compiler之後就正常了。