附錄附錄\Appendix Web端元件\WebDataSource

WebDataSource

 

 

【功能說明】

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

 

【元件屬性】

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

 

AutoApply(自動存檔)(bool)

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

AllowAdd(允許新增)(bool)

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

AllowUpdate(允許更改)(bool)

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

AllowDelete(允許刪除)(bool)

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

 

AllowPrint(允許印表)(bool)

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

 

AutoRecordLock(自動鎖定)(bool)

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

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

 

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

 

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

 

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

AutoRecordLockMode(鎖定模式)(enum)

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

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

預設為False,此屬性用來控制是否在新增狀態下按Naivgator"OK"時自動去"APPLY"(存檔),此必須配合AutoApplyTrue,用在Master/Detail時,Master為自增值(Identity)的狀態下,必須在User按下"OK"時,先讓Master到存到後端並取回自動編號,才能讓Detail可以繼續輸入。一般在Master/Detail情況下,WebNavigator"OK"不會引發MasterApply,即使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條件到原SelectCommandInfoCommand所指定的SQL語法中,並重新獲取新的資料。

 

void ExecuteSelect(object selectedObject)

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

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

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

 

void ExecuteAdd(object selectedObject)

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

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

        {

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

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

        }

void ExecuteSync(object selectedObject)

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

如:在WebGridView1SelectedIndexChanged事件中寫著下列程式來同步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)

如同InfoDataSetApplyError一樣,用來當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,但是因為WebDataSetWeb 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) WebDataSet有自己的InfoCommandUpdateComp元件,而SelectCommand是固定連結到GLModule”cmdRefValUse”這個共用的InfoCommand,因此SelectCommand並沒有UpdateComp來進行資料異動的回寫,所以就只能是唯讀的模式。

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

 

 

Top of Page