WebDataSource


 

【功能說明】

用途:使用於 Web 網頁中, 此元件主要功能是為了能連繫 Web 各資料元件與 WebDataSet 彼此的互動關係,也就是說任何資料都是透過 A/P Server InfoCommand 取得數據後交給 WebDataSet WebDataSet 是在 IIS 伺服器上,再由 WebDataSet 將資料交給 WebDataSource ,透過 WebDataSource 能與所有 Web 上的各元件互動呈現資料,如果其所連結的元件在編輯狀態下,也可以透過 WebDataSource 將資料異動給 WebDataSet ,最後再透過 WetDataSet 回到 A/P Server UpdateComp 元件來自動進行資料的異動 ( 如新增 / 更改 / 刪除功能等 ) WebDataSource 元件有兩種取得資料的方式,一種是接到上述的 WebDataSet 上,另一種是可以直接在 WebDataSource 定義 SelectAlias SelectCommand ,前者必須都要定義 InfoCommand WebDataSet ,才能使用:後者就容易多了,只要直接定義 SelectAlas SelectCommand 即可直接使用,不必另外定義 WebDataSet InfoCommand ,方便許多。

【元件屬性】

ID( 名稱 )(string)

元件名稱,用於識別該元件。

WebDataSetID( 資料集 ) (string)

設定要對應到那個 WebDataSet 上。注意,這個 WebDataSet 必須在 ”Component Designner” 中執行過 WebDataSet 右鍵的 ”Save” 功能後才能選擇到該 WebDataSet

DataMember( 資料成員 )(string)

對應的資料表名稱,此可以對應到一個 WebDataSet 資料集中的某一個 Table ( 因為一個 WebDataSet 會有多個 Table 的內容 ) ;本屬性要搭配 WebDataSetID 共同使用,不能單獨使用,也是必須執行過 WebDataSet 的右鍵 ”Save” 功能後才能選擇。

SelectAlias( 資料庫名稱 )(string)

SelectCommand 的指定資料庫名稱,此名稱定義在 EEPNetServer.EXE ”DB Manager” 中,為一個虛擬的資料庫名稱。

SelectCommand(SQL 命令 )(string)

直接以 SQL 命令來取得本元件的資料,資料來自 SelectAlias 所指定的資料庫中,此屬性設定後, WebDataSetID DataMember 都會無效,因為兩者只能選擇其一來運作,不是使用 WebDataSetID 對應到 WebDataSet 就是直接使用 SelectCommand 來下達 SQL 命令,使用 SelectCommand 的好處是簡單容易下達 SQL 命令 ( 也可以使用 “…” 的按鈕呼叫我們的 SQL Builder 來輔助設計 SQL 命令 )

AutoApply( 自動存檔 )(bool)

這與 WebDataSet 內的 AutoApply 是一樣的功能,用來設定是否 User 按下內建的 Navigator OK 或外掛是 WebNavigator 中的 OK 即會自動執行 WebDataSet Apply 存檔動作,預設為 True 。一般在 Master/Detail Detail 中必須要設為 False ,否則每存一筆 Detail ,就會回 Server 存檔一次。

AllowAdd( 允許新增 )(bool)

指示是否允許新增資料,一般不用設定,系統會自動與 WebSecurity 元件來搭配。

AllowUpdate( 允許更改 )(bool)

指示是否允許更新資料,一般不用設定,系統會自動與 WebSecurity 元件來搭配。

AllowDelete( 允許刪除 )(bool)

指示是否允許刪除資料,一般不用設定,系統會自動與 WebSecurity 元件來搭配。

AllowPrint( 允許印表 )(bool)

指示是否允許列印資料,一般不用設定,系統會自動與 WebSecurity 元件來搭配。

AutoRecordLock( 自動鎖定 )(bool)

用來解決資料編輯鎖定的問題,如果 AutoRecordLock=True ,如下的程序:

1. AutoRecordeLockMode Reload ,則在更改資料時,會到 A/P Server 下載該筆最新的資料,以免資料過期:如果 AutoRecordLockMode NoneReload ,則更改前不會下載最新資料,以增加效能。

2. InfoBindingSource 資料被更改時, A/P Server 會自動記錄該 User Table KeyValue 到一個 XML 文件中。

3. 如果已經有其他 User 更改此筆資料,則會自動告訴此 User: 該資料正在被其他使用者更改中 .. ,如果沒有則可以進行編輯。

4. 編輯存檔後,就會清除自己所編輯的 XML 資料狀態,讓別的使用者可以輸入。

AutoRecordLockMode( 鎖定模式 )(enum)

Reload 在更改資料時,會到 A/P Server 下載該筆最新的資料,以免資料過期, NoneReload 則更改前不會下載最新資料,以增加效能。

AutoApplyForInsert( 新增時自動存檔 )(bool)

預設為 False ,此屬性用來控制是否在新增狀態下按 Naivgator "OK" 時自動去 "APPLY"( 存檔 ) ,此必須配合 AutoApply True ,用在 Master/Detail 時, Master 為自增值 (Identity) 的狀態下,必須在 User 按下 "OK" 時,先讓 Master 到存到後端並取回自動編號,才能讓 Detail 可以繼續輸入。一般在 Master/Detail 情況下, WebNavigator "OK" 不會引發 Master Apply ,即使 AutoApply=True ,因為 "OK" 是為了讓 User 可以繼續輸入 Detail 資料,而不是真正讓 Master 存檔,一直到 User 按下 "Apply" 才會讓 Master/Detail 一起存檔。 AutoApplyForInsert 可以控制讓 Master 優先存檔來取得自動編號。

CacheDataSet( 存儲 DataSet)(bool)

預設為 False ,此屬性用來控制 InnerDataSet 的存儲在 Session 或者 ViewState 兩种存儲方式。設為 True 時,可以大幅減少 EnabledViewState rue 所增加出來的網頁流量 , 因為 EnableViewState 會將 InnerDataSet 的資料 ( 來自 WebDataSet) 也序列化到前端網頁中 , 尤其是 Master/Detail 的資料會讓 User 的網頁效能變差 , 使用 CacheDataSet 之後 , 就會讓 InnerDataSet Cache Session , 不會被序列化到網頁中 , 可以大幅提升網頁數度 , 但此會增加 IIS Server 的記憶體負擔 , 如果 User 數很多時 , IIS Server RAM 須倍數增加。

CommandPacketRecord(SQL 命令傳送記錄數 )(int)

此屬性可是讓 SelectCommand 方式取得的 WebDataSource 也可以有 PackageRecord 功能,預設為 -1

 

【功能函數】

bool ApplyUpdates()

將已異動的資料 , 存檔到後端的 A/P Server 上,並返回成功與否。

 

bool SetWhere(string strWhere)

以傳入的 Where 條件到原 SelectCommand InfoCommand 所指定的 SQL 語法中,並重新獲取新的資料。

 

void ExecuteSelect(object selectedObject)

Master/Detail 中, Detail 是以本 Method 來取得與 Master 資料的同步, SelectObject 一般是指其 Master 的資料元件,可以是 WebFormView WebDetailView 等元件,並注意此 SelectObject 中必須存在 Master/Detail 的關連欄位才能同步。

如: Detail.ExecuteSelect(wfvMaster);  // wfvMaster 這個 WebFormView 元件中取的鍵值後,對 Detail 進行同步對應。

    DataBind(); // WebDataSource 資料可以與其相對的 Control 來重新進行資料綁定

 

void ExecuteAdd(object selectedObject)

Master/Detail 中,如果 Master 新增時, Detail 資料應該要產生一筆空的資料讓 User 來輸入,就必須是以本 Method 來產生。 SelectObject 一般是指其 Master 的資料元件,可以是 WebFormView WebDetailView 等元件。

如: if (e.CommandName == "cmdAdd" ) // WebNavigator 中檢查是否按到新增

       {

           Detail.ExecuteAdd(wfvMaster); // wfvMaster 這個 WebFormView 元件中取的鍵值後,對 Detail 清空資料。

           DataBind(); // WebDataSource 資料可以與其相對的 Control 來重新進行資料綁定

       }

 

void ExecuteSync(object selectedObject)

可以用來同步本 WebDataSource 的資料與 SelectedObject 的目前筆資料,系統會自動從 SelectObject( 通常為 WebGridView 元件 ) 中取出鍵值,對定自己的 WebDataSource SetWhere() 來取得最新目前筆增料。

如:在 WebGridView1 SelectedIndexChanged 事件中寫著下列程式來同步 Master/Detail 的資料指向 WebGridView1 同一筆資料:

protected void WebGridView1_SelectedIndexChanged( object sender, EventArgs e)

{

   Master.ExecuteSync(WebGridView1); // WebGridView1 的鍵值同步 Master 的資料

   DataBind();

   Detail.ExecuteSelect(wfvMaster); // wfvMaster 的鍵值同步 Detail 的資料

   DataBind();

}

 

ToExcel(string TableName )

用來輸出 WebDataSource 的資料到 Excel 中, TableName 代表 所要輸出的 InfoCommand 的名稱

 

ToExcel(string TableName ,string Filter)

用來輸出 WebDataSource 的資料到 Excel 中, TableName 代表 所要輸出的 InfoCommand 的名稱 Filter 則代表 Filter 再次過濾資料條件。

 

ToExcel(string TableName ,string Filter ,bool Open )

用來輸出 WebDataSource 的資料到 Excle 中, TableName 代表 所要輸出的 InfoCommand 的名稱 Filter 則代表 Filter 再次過濾資料條件 Open 代表打開 Excel 下載畫面

 

  ToExcel(string TableName ,string Filter ,bool Open,string Title )

用來輸出 WebDataSource 的資料到 Excel 中, TableName 代表 所要輸出的 InfoCommand 的名稱 Filter 則代表 Filter 再次過濾資料條件 Open 代表打開 Excel 下載畫面, Title 代表輸出的 Excel 的文件内容的標題

 

ToExcel(string TableName ,string Filter ,string Sort,bool Open,string Title )

用來輸出 WebDataSource 的資料到 Excel 中, TableName 代表 所要輸出的 InfoCommand 的名稱 Filter 則代表 Filter 再次過濾資料條件 Sort 代表輸出資料的排序方式, Open 代表打開 Excel 下載畫面, Title 代表輸出的 Excel 的文件内容的標題

 

ToExcel( stringTableName, stringFilter, stringSort, boolOpen, stringTitle, List< string> IgnoreColumns)

用來輸出 WebDataSource 的資料到 Excel 中, TableName 代表 所要輸出的 InfoCommand 的名稱 Filter 則代表 Filter 再次過濾資料條件 Sort 代表輸出資料的排序方式, Open 代表打開 Excel 下載畫面, Title 代表輸出的 Excel 的文件内容的標題, IgnoreColumns 代表不用輸出到 Excel 的欄位名稱。

 

ToExcel( int TableIndex )

用來輸出 WebDataSource 的資料到 Excel 中, TableIndex 代表 所要輸出的 Table 名稱的索引

 

ToExcel( int TableIndex ,string Filter)

用來輸出 WebDataSource 的資料到 Excel 中, TableIndex 代表 所要輸出的 Table 名稱的索引 Filter 則代表 Filter 再次過濾資料條件。

 

ToExcel( int TableIndex ,string Filter ,bool Open )

用來輸出 WebDataSource 的資料到 Excle 中, TableIndex 代表 所要輸出的 Table 名稱的索引 Filter 則代表 Filter 再次過濾資料條件 Open 代表打開 Excel 下載畫面

 

  ToExcel( int TableIndex ,string Filter ,bool Open,string Title )

用來輸出 WebDataSource 的資料到 Excel 中, TableIndex 代表 所要輸出的 Table 名稱的索引 Filter 則代表 Filter 再次過濾資料條件 Open 代表打開 Excel 下載畫面, Title 代表輸出的 Excel 的文件内容的標題

 

ToExcel( int TableIndex ,string Filter ,string Sort,bool Open,string Title )

用來輸出 WebDataSource 的資料到 Excel 中, TableIndex 代表 所要輸出的 Table 名稱的索引 Filter 則代表 Filter 再次過濾資料條件 Sort 代表輸出資料的排序方式, Open 代表打開 Excel 下載畫面, Title 代表輸出的 Excel 的文件内容的標題

 

ToExcel( intTableIndex, stringFilter, stringSort, boolOpen, stringTitle, List< string> IgnoreColumns)

用來輸出 WebDataSource 的資料到 Excel 中, TableIndex 代表 所要輸出的 Table 名稱的索引 Filter 則代表 Filter 再次過濾資料條件 Sort 代表輸出資料的排序方式, Open 代表打開 Excel 下載畫面, Title 代表輸出的 Excel 的文件内容的標題, IgnoreColumns 代表不用輸出到 Excel 的欄位名稱。

例如:

 List<string> lst = new List<string>(new string[2]{"Field1","Field2"});

        infoDataSet1.ToExcel(0, "C:\\my.xls", "", "", "", lst);

 

ReadFromTxt(int tableIndex, string txtFileName)

用來提供外部讀取 Txt 文件, TableIndex 代表 DataSource Table 的索引, txtFileName 代表為 Txt 文字檔格式的文件所在路徑,其中 txt 文件内容中欄位間是以 "," "TAB" 為間格符號 , 資料是以 "LF" 換行作為資料格式。

 

ReadFromTxt(string TableName, string txtFileName)

用來提供外部讀取 Txt 文件, TableName 代表為 WebDataSource TableName 名稱, txtFileName 代表為 Txt 文字檔格式的文件所在路徑,其中 txt 文件内容中欄位間是以 "," "TAB" 為間格符號 , 資料是以 "LF" 換行作為資料格式。

 

ReadFromXls(int tableIndex, string xlsFileName)

用來提供外部讀取 Excel 文件, TableIndex 代表 DataSource Table 的索引, xlsFileName 代表為 xls 文字檔格式的文件所在路徑。

 

public void ReadFromXls(int tableIndex, string xlsFileName, int beginrow, int begincell)

用來提供外部讀取 Excel 文件, TableIndex 代表 DataSource Table 的索引, xlsFileName 代表為 xls 文字檔格式的文件所在路徑, BeginRow 表示 讀入的起始 Row 號, BeginCol 表示讀入的起始 Col .

 

ReadFromXls(string tableName, string xlsFileName)

用來提供外部讀取 Excel 文件, TableName 代表為 WebDataSource TableName 名稱, xlsFileName 代表為 xls 文字檔格式的文件所在路徑。

 

public void ReadFromXls(string tableName, string xlsFileName, int beginrow, int begincell)

用來提供外部讀取 Excel 文件, TableName 代表為 WebDataSource TableName 名稱, xlsFileName 代表為 xls 文字檔格式的文件所在路徑, BeginRow 表示 讀入的起始 Row 號, BeginCol 表示讀入的起始 Col .

 

ToCSV( intTableIndex)

用來輸出 WebDataSource 的資料 CSV 格式,解決 Excel 2002 之前版本不支援 XML 格式的問題 TableIndex 代表 所要輸出的 Table 名稱的索引。

 

ToCSV( stringTableName)

用來輸出 WebDataSource 的資料 CSV 格式,解決 Excel 2002 之前版本不支援 XML 格式的問題 TableName 代表為 WebDataSource TableName 名稱。

 

[ 事件 ]

Adding(Eventarg e)

WebDataSource 新增時會觸發此事件。

Updating(Eventarg e)

WebDataSource 更改時會觸發此事件。

Deleting(Eventarg e)

WebDataSource 刪除時會觸發此事件。

ApplyError(EventArg e)

如同 InfoDataSet ApplyError 一樣 , 用來當 WebDataSource Apply 資料到後端發生 Error 時,就會觸發本事件,用來對錯誤訊息做進一步的處理,如下的案例 :

protected void Master_ApplyError(object sender, Srvtools.ApplyErrorEventArgs e)

 {

   // 檢查是否為自定訊息

   if (e.Exception.InnerException.Message == "StockNotEnough")

   {

     Label1.Text = "Stock Not Enough!";  // 自行處理

     e.Cancel = true;  // 讓系統知道後端有錯誤

   }

 }

 

【其他說明】

1. 使用 WebDataSet 的方式時,雖然在設計模式中我們已經定義好 WebDataSource.DataSourceID 為那一個 WebDataSet ,但是因為 WebDataSet Web Server 中並不能被保存狀態 ( 上一個服務存在下一個服務就已經不存在 ) ,因此,你必須在用到 WebDataSet 的網頁上的 Page_Load 中加上下列的指令,才能正常使用 WebDataSource ,使用時所有 WebDataSource 如果是對應到 WebDataSet 時,都必須對應,如下:

protected void Page_Load( object sender, EventArgs e)

{

   if (!IsPostBack)

    {

       InitializeComponent(); // 要執行此命令才會讓 WebDataSet 存在 Web Server

       Master.DataSource = WebMaster;  // 設定 Master 這個 WebDataSource 資料來自 WebMaster 這個 WebDataSet.

       Detail.DataSource = WebMaster; // Detail 也是來自 WebMaster 即可

       View.DataSource = WebView; // View 這個 WebDataSource 資料來自 WebView 這個 WebDataSet.

    }

}

注意 , 如果你使用的是 SelectCommand 方式,則在 Page_Load() 中就可以按以上方式來處理。

2. 使用 WebDataSet 連結資料方式與 SelectCommand 直接取得資料的方式中,其中有一些不小的差異,說明如下:

(1) WebDataS et 有自己的 InfoCommand UpdateComp 元件,而 SelectCommand 是固定連結到 GLModule cmdRefValUse” 這個共用的 InfoCommand ,因此 SelectCommand 並沒有 UpdateComp 來進行資料異動的回寫,所以就只能是唯讀的模式。

(2) 也因為 SelectCommand 沒有 WebDataSet 元件可以設定 PackedRecords 數,並能進行緩存的處理,所以, SelectCommand 的方式只能一次將資料下到 Web Server 上,如果資料有數千或數萬筆資料時,最好還是改用 WebDataSet 才能有較好的效能 ( 因為有了 PackedRecord 功能 ) ,除非你能在 SelectCommand 中以 Where 來降低資料筆數。

 

Converted from CHM to HTML with chm2web Pro 2.85 (unicode)