【功能說明】
用途:此元件用於Client端,繼承自DataSet元件,用來配合Server端的InfoCommand相互連接,使得Client端可以透過對應的InfoCommand的SQL命令取得DatabaseServer的資料,並實現對資料的各種操作。
【元件屬性】
Name(名稱)(string)
元件名稱,用於識別該元件。
Active(啟動)(bool)
設定當前的InfoDataSet是否要開啟,設定為True時,系統會從Server上的InfoCommand元件中下載資料到此元件中。此屬性可在設計模式中設定預設True或False來控制開啟表單時是否要啟動此InfoDataSet。
AlwaysClose(開啟模式)(bool)
用來控制在此元件被啟動時是否要去下載資料,True代表不會去下載(會使用Where 1=0的方式將資料表打開但沒有資料),False則會下載資料到此資料表中。
DataCompressed(資料壓縮)(bool)
用來控制是否要壓縮InfoDataSet的資料。
PackedRecords(傳送記錄數)(int32)
代表每次下載的資料筆數,當InfoDataSet要向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(Eventarg e)
在取得的 InfoCommand 的資料後,會觸發該事件。
BeforeApplyUpdates(Eventarg e)
在 ApplyUpdate之前會被觸發。
AfterApplyUpdates(Eventarg e)
在 ApplyUpdate 成功時會被觸發。
ApplyError(Eventarg e)
此事件可以用來自行處理 Apply 的錯誤訊息,如可以在 Server 端的 UpdateComp 中,利用 throw 拋出自定的 Error Message ,再讓 ApplyError 接收,如下:
private void ucOrderDetails_BeforeModify(object sender, UpdateComponentBefore ModifyEventArgs e)
{
// 檢查條件 , 當Quantity<=0 時 , 要告之 User
if (Convert.ToDecimal(ucOrderDetails.GetFieldCurrentValue("Quantity")) <= 0)
{
throw new Exception("StockNotEnough"); // 拋出自定訊息
return;
}
}
在 InfoDataSet 的 ApplyError 中,去讀取 Server 端的自定訊息:
private void idOrders_ApplyError(object sender, ApplyErrorEventArgs e)
{
// 檢查是否為自定訊息
if (e.Exception.InnerException.Message == "StockNotEnough")
{
MessageBox.Show("Stock Not Enough!"); // 自行處理
e.Cancel = true; // 讓系統知道後端有錯誤
}
}
NextPacket(object sender, PacketEventArgs e)
此事件會在取得 Packet 所設筆數前後各處發一次 , 可以用e.State 為 Before 或After 來辨識是 NextPacket 之前還是之後。
【功能函數】
First()
移動到第一筆。
Next()
移動到下一筆。
Prior()
移動到前一筆。
Last()
移動到最後一筆。
IsInserted(TableName)
用來判斷DataSet中指定的Table是否已經有Insert發生。
IsUpdated(TableName)
用來判斷DataSet中指定的Table是否已經有Update發生。
IsDeleted(TableName)
用來判斷DataSet中指定的Table是否已經有Delete發生。
bool ApplyUpdates()
將Client端的資料存檔到後端的UpdateComp元件中。
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來存放資料。
例如:
DataSet tmp;
Tmp=InfoDataSet1.Excute(”SELECT * FROM CUSTOMER”);
Int max_ar=0;
for (int i = 0; i < Tmp.Tables[0].Rows.Count; i++)
{ int aramt=Convert.ToInt32(Tmp.Tables[0].Rows[0][‘AR_AMT’]);
if (aramt>max_ar) max_ar=aramt;
}
return max_ar;
Int GetRecordsCount(string where)
取得 DataSet 主 Table 的資料總筆數,如果有設 Where 代表某個 Where 條件,不指定代表整個 Table 。
ReadFromTxt(int tableIndex, string txtFileName)
用來提供外部讀取 Txt 文件, TableIndex 代表 DataSource 中 Table 的索引, txtFileName 代表為 Txt 文字檔格式的文件所在路徑,其中 txt 文件内容中欄位間是以"," 或 "TAB" 為間格符號 , 資料是以 "LF" 換行作為資料格式。 如果遇到整行為空白資料,則會被過濾不被新增進 InfoDataSet 中。
ReadFromTxt(string TableName, string txtFileName)
用來提供外部讀取 Txt 文件, TableName 代表為 InfoDataSet 的 TableName 名稱, txtFileName 代表為 Txt 文字檔格式的文件所在路徑,其中 txt 文件内容中欄位間是以"," 或 "TAB" 為間格符號 , 資料是以 "LF" 換行作為資料格式。 如果遇到整行為空白資料,則會被過濾不被新增進 InfoDataSet 中。
ReadFromXls(int tableIndex, string xlsFileName)
用來提供外部讀取 Excel 文件, TableIndex 代表 DataSource 中 Table 的索引, xlsFileName 代表為 xls 文字檔格式的文件所在路徑。 如果遇到整行為空白資料,則會被過濾不被新增進 InfoDataSet 中。
public void ReadFromXls(int tableIndex, string xlsFileName, int beginrow, int begincell)
用來提供外部讀取 Excel 文件, TableIndex 代表 DataSource 中 Table 的索引, xlsFileName 代表為 xls 文字檔格式的文件所在路徑, BeginRow 表示 讀入的起始 Row 號, BeginCol 表示讀入的起始 Col 號. 。 如果遇到整行為空白資料,則會被過濾不被新增進 InfoDataSet 中。
ReadFromXls(string tableName, string xlsFileName)
用來提供外部讀取 Excel 文件, TableName 代表為 InfoDataSet 的 TableName 名稱, xlsFileName 代表為 xls 文字檔格式的文件所在路徑。 如果遇到整行為空白資料,則會被過濾不被新增進 InfoDataSet 中。
ReadFromXls(string tableName, string xlsFileName, int beginrow, int begincell)
用來提供外部讀取 Excel 文件, TableName 代表為 InfoDataSet 的 TableName 名稱, xlsFileName 代表為 xls 文字檔格式的文件所在路徑, BeginRow 表示 讀入的起始 Row 號, BeginCol 表示讀入的起始 Col 號. 。 如果遇到整行為空白資料,則會被過濾不被新增進 InfoDataSet 中。
SetOrder(string strOrder)
在前端對資料排序, strOrder 代表排序欄位及方法。例如 : InfoDataSet.SetOrder("ID Desc"); // 以 ID 來排序 , Desc 為降冪排序
ToExcel( inttableIndex, stringxLSFileName)
用來輸出 InfoDataSet 的資料到 Excel 中, TableIndex 代表 所要輸出的Table 名稱的索引, XLSFileName 可以包函 Path 。
ToExcel( int tableIndex, string xLSFileName, string Title)
用來輸出 InfoDataSet 的資料到 Excel 中, TableIndex 代表 所要輸出的Table 名稱的索引, XLSFileName 可以包函 Path , Title 代表輸出的 Excel 的文件内容的標題 。
ToExcel( int tableIndex, string xLSFileName, string Title, string Filter)
用來輸出 InfoDataSet 的資料到 Excel 中, TableIndex 代表 所要輸出的Table 名稱的索引, XLSFileName 可以包函 Path , Title 代表輸出的 Excel 的文件内容的標題, Filter 則代表 Filter 再次過濾資料條件。
ToExcel(int tableIndex, string xLSFileName, string Title, string Filter, string Sort)
用來輸出 InfoDataSet 的資料到 Excel 中, TableIndex 代表 所要輸出的Table 名稱的索引, XLSFileName 可以包函 Path , Title 代表輸出的 Excel 的文件内容的標題, Filter 則代表 Filter 再 次過濾資料條件 , Sort 代表輸出資料的排序方式。
ToExcel(int tableIndex, string xLSFileName, string Title, string Filter, string Sort, List< string> IgnoreColumns)
用來輸出 InfoDataSet 的資料到 Excel 中, TableIndex 代表 所要輸出的Table 名稱的索引, XLSFileName 可以包函 Path , Title 代表輸出的 Excel 的文件内容的標題, Filter 則代表 Filter 再 次過濾資料條件 , Sort 代表輸出資料的排序方式, IgnoreColumns 代表不用輸出到 Excel 的欄位名稱 。
ToExcel( string tableName, string xLSFileName)
用來輸出 InfoDataSet 的資料到 Excel 中 , TableName 代表為 InfoDataSet 的TableName 名稱, XLSFileName 可以包函 Path 。
ToExcel( string tableName, string xLSFileName, string Title)
用來輸出 InfoDataSet 的資料到 Excel 中 , TableName 代表為 InfoDataSet 的TableName 名稱, XLSFileName 可以包函 Path , Title 代表輸出的 Excel 的文件内容的標題 。
ToExcel( string tableName, string xLSFileName, string Title, string Filter)
用來輸出 InfoDataSet 的資料到 Excel 中 , TableName 代表為 InfoDataSet 的TableName 名稱, XLSFileName 可以包函 Path , Title 代表輸出的 Excel 的文件内容的標題, Filter 則代表 Filter 再次過濾資料條件 。
ToExcel(string tableName, string xLSFileName, string Title, string Filter, string Sort)
用來輸出 InfoDataSet 的資料到 Excel 中 , TableName 代表為 InfoDataSet 的TableName 名稱, XLSFileName 可以包函 Path , Title 代表輸出的 Excel 的文件内容的標題, Filter 則代表 Filter 再次過濾資料條件 , Sort 代表輸出資料的排序方式 。
ToExcel(string tableName, string xLSFileName, string Title, string Filter, string Sort, List< string> IgnoreColumns)
用來輸出 InfoDataSet 的資料到 Excel 中 , TableName 代表為 InfoDataSet 的TableName 名稱, XLSFileName 可以包函 Path , Title 代表輸出的 Excel 的文件内容的標題, Filter 則代表 Filter
再次過濾資料條件 , Sort 代表輸出資料的排序方式, IgnoreColumns 代表不用輸出到 Excel 的欄位名稱 。
ToCSV(int tableIndex, string xLSFileName)
用來輸出 InfoDataSet 的資料為 CSV 格式,解決 Excel 2002 之前版本不支援 XML 格式的問題 , TableIndex 代表所要輸出的 Table 名稱的索引。
ToCSV(string tableName, string xLSFileName)
用來輸出 InfoDataSet 的資料為 CSV 格式,解決 Excel 2002 之前版本不支援 XML 格式的問題 , TableName 代表為 InfoDataSet 的TableName 名稱。
【其他說明】
在設計過程中,如果將此元件的Active屬性設為True後,可以直接在元件上Double Click打開欄位選擇窗口,點選要使用的欄位,將其拉向表單中,會自動生成對應的編輯元件,例如InfoTextBox,RichTextBox, Label, DateTimePicker等元件,並會自動與Table的欄位Binding好。因為可以一此拖出多個欄位,因此可以在”Optoins”這頁中設定欄位排列方式與欄位間隔。 另外此項功能支持資料字典(Data Dictionary)功能,在產生各元件時,會自動到COLDEF這個系統表中抓取對應的Caption設定。例如,如果在COLDEF中已經設定ORDER表的OrderID字段的Caption為「訂單編號」,則用此欄位選擇拉出的InfoTextBox上的對應Label顯示的就是「訂單編號」,同時也會自動依D.D.(系統Table:ColDef)來決定其MaxLength的長度,因為如果沒定義好時,User萬一輸出超過時,後端資料庫會發生錯誤並退回,因此,最好在EEPManager的D.D.事先將FieldLength設定好(系統會自動讀取)。
Converted from CHM to HTML with chm2web Pro 2.85 (unicode) |