【功能說明】
用途:此元件用於Web的Component Desiginer中,繼承自InfoDataSet元件,用來配合EEP A/P Server端的InfoCommand相互連接,使得Web網頁可以透過對應的InfoCommand的SQL命令取得Database Server的資料,並實現對網頁上各個元件對資料庫的存取各種操作。
【元件屬性】
Name(名稱)(string)
元件名稱,用於識別該元件。
Active(啟動)(bool)
設定當前的WebDataSet是否要開啟,設定為True時,系統會從A/P Server上的InfoCommand元件中下載資料到此元件中。此屬性可在設計模式中設定預設True或False來控制開啟表單時是否要啟動此InfoDataSet。
AlwaysClose(開啟模式)(bool)
用來控制在此元件被啟動時是否要去下載資料,True代表不會去下載(會使用Where 1=0的方式將資料表打開但沒有資料),False則會下載資料到此資料表中。
PackedRecords(傳送記錄數)(int)
代表每次下載的資料筆數,當WebDataSet要向InfoCommand取得資料時,每次要DownLoad多少比資料,都是由此屬性來決定,預設為100,代表每次下載一百筆;若為 -1,代表要將全部資料下載。除了資料在數千筆以下,否則盡量調整本值在數百筆以內,好讓系統的效能可以增加。PackedRecord在資料移出範圍時,系統會自動再從InfoCommand上重抓下一個範圍資料,此屬性須配合InfoCommand的KeyFields才能抓取區塊範圍的資料。
RemoteName(遠程InfoCommand)(string)
在A/P Server上,每個InfoDataModule都可以有多個遠程資料表(InfoCommand),透過InfoCommand可以向Database取得資料,在將資料存放在本元件的Table元件中,以提供Client各元件的資料存取服務。RemoteName的格式是 DLL.CommandName,前者是DLL的模組名稱,後者則是InfoCommand的名稱。設計模式時可以在此選擇DataModule名稱(DLL)與所對應的InfoCommand名稱。
ServerModify(隨伺服端更新)(bool)
此屬性是設定如果Server端在Insert/Update後,如果後端的資料庫有發生其他的異動 (如Stored Procedure或Trigger引發的資料異動或定序自增值的欄位等),此時Client的資料則不是最新的,透過此屬性就可以將最新的資料傳回Client端,但此屬性必須配合UpdateComp.ServerModify也要設定為True才會有效。
【事件】
DataFilled(資料填入)
在取得的InfoCommand的資料後,會觸發該事件。
【功能函數】
First()
移動到第一筆。
Next()
移動到下一筆。
Prior()
移動到前一筆。
Last()
移動到最後一筆。
IsInserted(TableName)
用來判斷DataSet中指定的Table是否已經有Insert發生。
IsUpdated(TableName)
用來判斷DataSet中指定的Table是否已經有Update發生。
IsDeleted(TableName)
用來判斷DataSet中指定的Table是否已經有Delete發生。
bool ApplyUpdates()
將Client端的資料存檔到後端的UpdateComp元件中。
LoadFromFile(string schemaFileName,string dataFileName)
從指定的檔案中取回資料的數據,與SaveToFile的動作剛好相反,SchmaFileName為資料結構的檔案(XML格式),DataFileName則為指定的資料檔案名稱。
bool SetWhere(string WhereText)
重新設定InfoCommand的SQL Where語句,到Server端重新取得資料。WhereText代表Where的語法,會自動與Server上的InfoCommand結合。
例如:InfoDataSet1.SetWhere(”CUST_NO LIKE C%”)
DataSet Excute(string SQLText)
重新下SQL語句到Server端取得資料,SQLText為你重新所下達的SQL語法,其傳回值為一個DataSet,可以利用此DataSet來存放資料。
例如:
InitializeComponent();
//在Web上有執行此命令才能讓WebDataSet存在
DataSet tmp;
Tmp=WebDataSet1.Excute(”SELECT * FROM CUSTOMER”);
Int max_ar=0;
for (int i = 0; i <
Tmp.Tables[0].Rows.Count; i++)
{ int aramt=Tmp.Tables[0].Rows[0][‘AR_AMT’].Toint();
if
(aramt>max_ar) max_ar=aramt;
}
return max_ar;
ToExcel(string
TableName,string XLSFileName)
可以直接指定一個Table來輸出成Excel檔案。XLSFileName可以包函Path。
【其他說明】
在Web網頁使用WebDataSet元件時,由於此元件不是網頁中的元件,因此無法利用Web元件的EnableViewState,就是在前後網頁中能保存狀態(可以保存元件的屬性與記憶體),因此在每次使用到WebDataSet時,必須事先執行InitializeComponent()這個指令,才會讓”Component Designer”內的元件重現,一般情況下WebDataSource會將WebDataSet的資料取走,並利用EnableViewState緩存資料,所以User在操作前後網頁時,不會一直去打開WebDataSet與讓WebDataSource資料取重新讀取;另一方面WebDataSet負責提供資料給WebDataSource,而WebDataSource負責提供資料給所有Web的元件,如果資料可以編輯也是一樣,異動到WebDataSource也會影響到WebDataSet,並透過WebDataSet來回存到A/P Server上的UpdateComp元件,達到回寫資料庫的目的。