Mexx's profile我有方向 沒有答案PhotosBlogLists Tools Help
AmazingCounters.com
新增到您的Live.com

BloggerAds

Loading...

變形金剛:復仇之戰

Loading...

線上收音機

Loading...

流浪動物認養(台南)

Photo 1 of 312

Mexx Hsu

Occupation
Location
Interests
熱衷軟體開發、電腦遊戲、3D動畫
最愛的遊戲:DOS版仙劍奇俠傳、天堂二、N64大亂鬥、三國無雙
最愛的美食:水餃、牛肉麵、虱目魚、鰻魚、滷味、牛奶、麵包、蛋糕、蛋塔、布丁、蚵仔煎、土魠魚羹
最新賞的歌手:張紹涵、周杰倫、梁靜如、S.H.E、伍佰
我的座右銘:不為學習而學習。
送給自己:嚴以律己、寬以待人
No list items have been added yet.
No list items have been added yet.

我有方向 沒有答案

新兵金太郎報到!

 
July 01

Customize Paging and Sorting on GridView

GridView → ObjectDataSource → Logic Layer → Data Layer (Strong Typed DataSet)
詳細請參考:
http://www.asp.net/learn/data-access/tutorial-25-vb.aspx
http://www.asp.net/learn/data-access/tutorial-26-vb.aspx


  1. 先寫好分頁存取和排序的 SQL
    SQL Server 2000 或之前的產品可用 TOP 關鍵字,SQL Server 2005 之後可以用 ROW_NUMBER(),Oracle 可用 rownum,需要的參數不外乎就是 startRowIndex、maximumRows(一頁要放幾筆資料)、要排序的欄位名稱及升降冪
  2. 如果只要自訂分頁而不排序,那麼使用 Visual Studio 的 DataSet Designer 即可;還要可以排序的話,因為目前 DataSet Designer 還沒辦法使用 ORDER BY @SortExpression 的方式(自己寫基礎 ADO.Net 參數模式也無效),所以你可以在 Logic Layer 寫成一個函數,或是用 partial class 的方式附掛在 Data Layer 的 TableAdapter,然後用 "ORDER BY " + sortExpression 串成 SQL 語句,寫基礎的 ADO.Net 程式來執行。順便一提,只要結構完全一樣,你仍然可以用 SqlDataAdapter 把資料倒進 Strong Typed DataTable。
  3. 必須再設計另一段 SQL 並寫成函數,例如 TotalNumbersOfData(),傳回真正的資料總筆數,讓 GridView 可以自動計算目前處於第幾頁
  4. 除了 startRowIndexmaximumRowssortExpression,如果還有其他過濾條件,請自行加上去。但是特別注意,假設加了一個過濾欄位 paramA,那麼也要再多出一個 TotalNumbersOfData(paramA)的函數,否則會出錯

    現在假設我們設計了兩個存取函數如下:
    public DataTable GetData(startRowIndex, maximumRows, sortExpression, paramA)
    public int TotalNumbersOfData(paramA)
  5. 再來就是設定 ObjectDataSource,借一部份原文的重點如下
    • 利用 DataSet Designer 指定 ObjectDataSource 的 TypeName 和 SelectMethod,當然自己手動輸入也可以
    • Set the ObjectDataSource’s EnablePaging property to true
    • Set the ObjectDataSource’s StartRowIndexParameterName and MaximumRowsParameterName Properties Accordingly
      (如果你上面參數的命名不是 "startRowIndex"、"maximumRows",那麼這邊就要改成跟上面參數的名稱一樣,否則可略過,因為這兩個命名是預設)
    • Set the ObjectDataSource’s SelectCountMethod Property
      設定成 TotalNumbersOfData
    • Set the ObjectDataSource’s SortParameterName Property to "sortExpression"
    • Remove the startRowIndex and maximumRows <asp:Parameter>
      設定 EnablePaging = True 之後,會自動將 startRowIndex maximumRows 的值送出去,所以不可以再設定同名的參數,但是額外的參數必須保留下來,例如上面所說的 paramA。請注意 SelectCountMethod 所設定的函數,也會共用 <asp:Parameter> 參數,這就是為什麼我第4點說到,要再多出一個 TotalNumbersOfData(paramA)
  6. 最後就是設定 GridView 的 AllowPaging、AllowSorting 屬性為 True,至於頁面大小,我發覺在屬性視窗的設定無效,必須寫在後端程式,或是在 aspx 的標籤上設定

June 28

從應徵判斷你是否會加班

透過朋友的的撲浪得知,還有其他不錯的文章:)
 
June 27

恭喜自己

我最弱的一科 MCTS SQL2008 (Maintenance)
延了一個多月再來一次,總算過了...低空掠過^^"
 
(千萬別問我 SQL Server,這是我最沒信心的 哈哈!還得繼續努力)
June 24

被瘋狗咬

今天又被瘋狗咬了,以前是大約每隔一個月被咬一次
我猜~
從今天開始,我應該會每三兩天就會被瘋狗咬一次吧?
 哈哈哈!爽!
 
June 20

MCPD ASP.Net 3.5

考過了,自己偷偷慶祝一下^^...
June 17

Why 「Web Site Project」 instead of 「Web Application Project」?

從 VS2005 開始,就開始支援「Web Site」的開發模式,跟之前的 VS2002/VS2003 的「Web Application」不太一樣。但是,為什麼要這樣改?有什麼用意?
 
我的想法是,讓協同開發可以更方便,另一個好處是,ASP.Net 和 Visual Studio 的關係可以稍微鬆一點。
 
原本專案所屬的檔案,其檔名與位置都必須寫入專案檔加以管理,但有個缺點,就是如果非程式人員沒有 Visual Studio.Net(也許不習慣它、喜歡用其他軟體寫網頁、或是電腦太慢不想安裝大怪物),那麼對專案的存取會很不方便。例如該專案有個子目錄,是美編人員常常異動的,可能常常換圖片、新增圖片,如果每次有新增檔案,就要跟工程師講一次,豈不囉唆?如果有一個子目錄是專門放文件,也是一樣的道理;或是B工程師新增了程式,也要告知A工程師加入專案,諸如此類協同開發的問題‧‧‧
 
VS2005 之後採用網站模式,這麼一來,Visual Studio 只需要安裝在工程師的電腦,其他人員則可以用自己習慣的軟體,各自在自己相關的子目錄內任意修修改改,想要嚴謹一點的話,就設定目錄存取權限即可。
 
另外,為何到 VS2008 都還是保留 Web Application 的開發模式,當然是為了相容之前的舊專案,例如想把 ASP.Net 1.x 的網站升級到 ASP.Net 3.5,就可以沿用 Web Application 模式。
 
June 02

Convert known type to generic type

If you want to convert some known type, say System.Web.UI.Control, to another generic type T, you probably run into this error at design time: value of type 'System.Web.UI.Control' cannot be converted to 'T'. Just try the following approach that solves.
 
VB:
Public Sub MyMethod(Of T As Control)(Byval ctrl As Control)
    Dim test As T
    If TypeOf ctrl Is T Then test = CType(ctrl, T)
End Sub
 
C#
public void MyMethod<T>(Control ctrl) where T:Control    {
    T test;
    if (ctrl is T) { test = ctrl as T; }
}
 
May 30

ADO.Net Data Service 是為了解決什麼?

先來看一下現在的 Service(Web Service、WCF) 長什麼樣:
  • GetCustomers()
  • GetCustomerById(int customerId)
  • GetCustomers(string orderBy)
  • GetCustomers(string orderBy, int count)
  • GetOrders()
  • GetOrderById()
  • GetOrders(datetime beginDate, datetime endDate)
  • GetOrdersByCustomerId(int customerId)
  • .....
  • .........

簡單的說,前端存取資料,仍然相當依賴後端提供的方法,沒有對資料存取的自主性!

使用 ADO.Net Data Service,可以透過簡單的網址來處理 CRUD(Create、Read、Update、Delete),例如:

這當然不是要用來取代其他的 ADO.Net 相關技術,它的舞台,應該是 AJAX、Silverlight ...

必須安裝 .Net Framework 3.5 SP1 才能使用 ADO.Net Data Service。

May 26

DataSource 控制項配合網址參數加密

DataSource 控制項可以直接取網址參數,來做 SQL 查詢或傳給資料層、中間層,但如果你想要加密 ClientID、CustomerID 這類數值,又要讓 DataSource 控制項可以正常運作,我想到的有兩種作法:
  1. 在頁面的程式碼實做所有加解密的動作,這是最直覺的作法。但我用 ObjectDataSource,在 Selecting 事件觸發之前,竟然就會先驗證參數的長度和型別?!這還滿詭異的,照理說,參數還沒真的送出去之前,我都應該要可以進一步處理,不知道是 ObjectDataSource 的 Bug,還是我哪邊沒設定好?
    後來找到方法了,原來是 Parameter 的型別必須更改,如果加密後的結果是英數字串,型別就必須改為 String
  2. 直接在中間層新增可以解密資料的 Insert、Update、Delete、Select 函數,也就是在頁面的程式碼會把加密資料直接丟給中間層,由中間層負責先解密後再取資料。