Appendix BClient端元件\InfoDataset

InfoDataset

 

 

【功能說明】

用途:此元件用於Client端,繼承自DataSet元件,用來配合Server端的InfoCommand相互連接,使得Client端可以透過對應的InfoCommandSQL命令取得DatabaseServer的資料,並實現對資料的各種操作。

 

【元件屬性】

Name(名稱)(string)

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

 

Active(啟動)(bool)

設定當前的InfoDataSet是否要開啟,設定為True時,系統會從Server上的InfoCommand元件中下載資料到此元件中。此屬性可在設計模式中設定預設TrueFalse來控制開啟表單時是否要啟動此InfoDataSet

 

AlwaysClose(開啟模式)(bool)

用來控制在此元件被啟動時是否要去下載資料,True代表不會去下載(會使用Where 1=0的方式將資料表打開但沒有資料)False則會下載資料到此資料表中。

 

DataCompressed(資料壓縮)(bool)

用來控制是否要壓縮InfoDataSet的資料。

 

PackedRecords(傳送記錄數)(int32)

代表每次下載的資料筆數,InfoDataSet要向InfoCommand取得資料時,每次要DownLoad多少比資料,都是由此屬性來決定,預設為100,代表每次下載一百筆;若為 -1,代表要將全部資料下載。除了資料在千筆以下,否則盡量調整本值在數百筆以內,好讓系統的效能可以增加。PackedRecord在資料移出範圍時,系統會自動再從InfoCommand上重抓下一個範圍資料,此屬性須配合InfoCommandKeyFields才能抓取區塊範圍的資料。

 

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 ProcedureTrigger引發的資料異動或定序自增值的欄位等),此時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)

重新設定InfoCommandSQL 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打開欄位選擇窗口,點選要使用的欄位,將其拉向表單中,會自動生成對應的編輯元件,例如InfoTextBoxRichTextBox, Label, DateTimePicker等元件,並會自動與Table的欄位Binding好。因為可以一此拖出多個欄位,因此可以在”Optoins”這頁中設定欄位排列方式與欄位間隔。另外此項功能支持資料字典(Data Dictionary)功能,在產生各元件時,會自動到COLDEF這個系統表中抓取對應的Caption設定。例如,如果在COLDEF中已經設定ORDER表的OrderID字段的Caption為「訂單編號」,則用此欄位選擇拉出的InfoTextBox上的對應Label顯示的就是「訂單編號」,同時也會自動依D.D.(系統Table:ColDef)來決定其MaxLength的長度,因為如果沒定義好時,User萬一輸出超過時,後端資料庫會發生錯誤並退回,因此,最好在EEPManagerD.D.事先將FieldLength設定好(系統會自動讀取)

 

 

Top of Page