InfoDataset
【功能說明】
用途:此元件用於 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 則會下載資料到此資料表中。
PackedRecords( 傳送記錄數 )(int)
代表每次下載的資料筆數, 當 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 才會有效。
DeleteIncomplete( 刪除不完整資料 )(bool)
用在 Master/Detail 中,如果 User 輸入的 Detail 不完整 ( 沒有輸入鍵值 ) 時,此屬性設為 True ,系統就會自動將其刪除,以防止 Detail 不完整的資料 被存回到後端而發生錯誤,預設為 False 。
Locale( 比较表中字符串的区域设置信息
)( CultureInfo )
用於設定語言別,可以依據 DB 的排序規則排序,如:中文按筆劃排
【事件】
DataFilled(Eventarg e)
在取得的 InfoCommand 的資料後,會觸發該事件。
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()
移動到最後一筆。
bool NextPacket()
按設定的 packet 筆數 x ,取得相應的下 x 筆。
IsInserted(TableName)
用來判斷 DataSet 中指定的 Table 是否已經有 Insert 發生 .
IsUpdated(TableName)
用來判斷 DataSet 中指定的 Table 是否已經有 Update 發生 .
IsDeleted(TableName)
用來判斷 DataSet 中指定的 Table 是否已經有 Delete 發生 .
bool ApplyUpdates()
將 Client 端的資料存檔到後端的 UpdateComp 元件中。
bool CanelApply()
將 Client 端的資料放棄不要存檔到後端的 UpdateComp 元件中。
SaveToFile(string schemaFileName , string
dataFileName)
可以利用此方式輸出到指定的 DataFileName( 二進位檔案 ), 其資料結構則存在 SchemaFileName 中 , 是以 XML 的格式來存放。 SaveToFile 會輸出一個 XML 的 SchemaFileName ,當你要還原資料時,也必須使用到此 SchemaFileName 才能將資料還原。
LoadFromFile(string schemaFileName , string dataFileName)
從指定的檔案中取回資料的數據,與 SaveToFile 的動作剛好相反, SchmaFileName 為資料結構的檔案 (XML 格式 ) , DataFileName 則為指定的資料檔案名稱。
bool SetWhere(string
WhereText)
重新設定 InfoCommand 的 SQL Where 語句,到 Server 端重新取得資料。 WhereText 代表 Where 的語法,會自動與 Server 上的 InfoCommand 結合。提供多組 Where 的參數傳到 Server 端的 InfoCommand 中 , 並可以自由控制多組參數的插入位置 ( 如有很多 SubSelect 的語法 )
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= Tmp.Tables[0].Rows[0][‘AR_AMT’].Toint();
if (aramt>max_ar) max_ar=aramt;
}
return max_ar;
Int
getcount(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( inttableIndex, stringxLSFileName,
stringTitle)
用來輸出 InfoDataSet 的資料到 Excel 中, TableIndex 代表 所要輸出的 Table 名稱的索引, XLSFileName 可以包函 Path , Title 代表輸出的 Excel 的文件内容的標題 。
ToExcel( inttableIndex, stringxLSFileName,
stringTitle, stringFilter)
用來輸出 InfoDataSet 的資料到 Excel 中, TableIndex 代表 所要輸出的 Table 名稱的索引, XLSFileName 可以包函 Path , Title 代表輸出的 Excel 的文件内容的標題, Filter 則代表 Filter 再次過濾資料條件。
ToExcel( inttableIndex, stringxLSFileName,
stringTitle, stringFilter,
stringSort)
用來輸出 InfoDataSet 的資料到 Excel 中, TableIndex 代表 所要輸出的 Table 名稱的索引, XLSFileName 可以包函 Path , Title 代表輸出的 Excel 的文件内容的標題, Filter 則代表 Filter 再
次過濾資料條件 ,
Sort 代表輸出資料的排序方式 。
ToExcel( inttableIndex, stringxLSFileName,
stringTitle, stringFilter,
stringSort, List<
string> IgnoreColumns)
用來輸出 InfoDataSet 的資料到 Excel 中, TableIndex 代表 所要輸出的 Table 名稱的索引, XLSFileName 可以包函 Path , Title 代表輸出的 Excel 的文件内容的標題, Filter 則代表 Filter 再
次過濾資料條件 ,
Sort 代表輸出資料的排序方式, IgnoreColumns 代表不用輸出到
Excel 的欄位名稱 。
ToExcel( stringtableName, stringxLSFileName)
用來輸出 InfoDataSet 的資料到 Excel 中 , TableName 代表為 InfoDataSet 的 TableName 名稱, XLSFileName 可以包函 Path 。
ToExcel( stringtableName, stringxLSFileName,
stringTitle)
用來輸出 InfoDataSet 的資料到 Excel 中 , TableName 代表為 InfoDataSet 的 TableName 名稱, XLSFileName 可以包函 Path , Title 代表輸出的 Excel 的文件内容的標題 。
ToExcel( stringtableName, stringxLSFileName,
stringTitle, stringFilter)
用來輸出 InfoDataSet 的資料到 Excel 中 , TableName 代表為 InfoDataSet 的 TableName 名稱, XLSFileName 可以包函 Path , Title 代表輸出的 Excel 的文件内容的標題, Filter 則代表 Filter 再次過濾資料條件 。
ToExcel( stringtableName, stringxLSFileName,
stringTitle, stringFilter,
stringSort)
用來輸出 InfoDataSet 的資料到 Excel 中 , TableName 代表為 InfoDataSet 的 TableName 名稱, XLSFileName 可以包函 Path , Title 代表輸出的 Excel 的文件内容的標題, Filter 則代表 Filter
再次過濾資料條件 , Sort 代表輸出資料的排序方式 。
ToExcel( stringtableName, stringxLSFileName,
stringTitle, stringFilter,
stringSort, List<
string> IgnoreColumns)
用來輸出 InfoDataSet 的資料到 Excel 中 , TableName 代表為 InfoDataSet 的 TableName 名稱, XLSFileName 可以包函 Path , Title 代表輸出的 Excel 的文件内容的標題, Filter 則代表 Filter
再次過濾資料條件 , Sort 代表輸出資料的排序方式, IgnoreColumns 代表不用輸出到 Excel 的欄位名稱 。
ToCSV(
inttableIndex, stringxLSFileName)
用來輸出 InfoDataSet 的資料 為 CSV 格式,解決 Excel 2002 之前版本不支援 XML 格式的問題
, TableIndex 代表 所要輸出的 Table 名稱的索引。
ToCSV(
stringtableName, stringxLSFileName)
用來輸出 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) |