InfoBindingSource


 

【功能說明】

用途:使用於 Client 端,繼承自 BindingSource 元件,與 InfoDataSet 或者 CacheDataSet 配合使用。用於建立各 UI 資料元件與 InfoDataSet 資料表間的連接,並透過本元件來進行對 InfoDataSet 的各種資料操作。

【元件屬性】

Name( 名稱 )(string)

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

AutoApply ( 自動存檔 )( bool)

設為 True 時,在執行 EndEdit () 單筆確認功能時,會讓 InfoDataSet 自動執行 ApplyUpdate () 的動作,也就是每編輯一筆 BindingSource 的資料並確認後,即要自動讓 InfoDataSet 存檔到 Server 端一次,此目的是為了能更即時將 U/I 的資料存檔到資料庫中。如配合 InfoNavigator 元件時,按下 Ok 按鈕時,就會直接將資料儲存到後端資料庫中,如果設為 False ,則需要按下 Apply 才會執行資料的儲存。一般在 InfoDataSet Master/Detail 的情況下,對 Master 一般都是設為 True 的,但如果是 Detail 則都是設為 False

AutoApplyMaster ( 自動表頭存檔 )( bool)

此專門應該在 Master/Detail 的架構上 , 當新增 Master , 並在輸入 Detail 前是否要先將 Master 進行 Apply 存檔 , 此應用在 Master 的主鍵為自增值欄位 ( 每次自動加一 ), 所以要配合 AutoApplyMaster =True 來強迫 Master 存檔並取回鍵值後 , 才能正確對 Detail 輸入資料 .

AutoDisableControl ( 自動失能控制 )( bool)

True/False ,可依據當前資料的編輯狀態,自動控制到連接此 BindingSource UI 資料元件的致能與失能狀態。為 True 代表一般情況下,各 UI 資料元件是處於失能的狀態下,就是不能讓 User 編輯;除非配合 InfoNavigator Edit 功能或執行 BeginEdit () 方法,才會讓各 UI 資料元件進入致能狀態讓 User 編輯。如設為 False ,系統將不會對各 UI 資料元件做任何致能與失能的控制。

CloseProtect ( 關閉保護 )( bool)

用來保護資料在編輯狀態下防止使用者關閉視窗,當設為 True 時,如果對應到本 InfoBindingSource 的資料有被異動且尚未存檔到後端時,則會提示給 User 並禁止關閉視窗,為 False 則不保護此行為。

DataMember ( 資料成員 )(string)

對應的資料表名稱,此可以對應到一個 DataSet 資料集中的某一個 Table ( 因為一個 DataSet 會有多個 Table 的內容 ) ;本屬性要搭配 DataSource 共同使用,不能單獨使用。

DataSource ( 資料源 )( DataSource)

對應的資料集,一般對象是 DataSet ,與 DataMember 配搭使用,當 DataSource 指向 DataSet 時,則 DataMember 就必須設定指向其 DataSet 內的某一個 Table ;但是如果 DataSet Master/Detail 的關聯關係時, Master 可按上述的方式設定, DataSource 指向 DataSet , DataMember 指向 DataSet 內的 Master Table ,但 Detail 則就不一樣了, DataSource 必須指向 Master InfoBindingSource ,而非原來的 DataSet DataMember 則改指向 Master InfoBindingSource 內的 Relation1 關連表 ( 系統自動建立的關連資料表 )

DelayInterval ( 延遲時間 )( int)

這個屬性專門給 RelationDelay 所使用,系統預設是 300 毫秒,也就是 0.3 秒,用途請參考 RelationDelay

FocusedControl ( 焦點元件 )

設定在新增或編輯時,進入焦點的 Control

RelationDelay ( 關聯延遲 )( bool)

本屬性是專門給 Relations 動態關連所使用,設定是否開啟關聯延遲。因為 Relations 會在 User 移動資料時,對另外的 DataSet 請求顯示相對資料,因 Relations 是動態取資料,因此會引發對方的 DataSet 向後端請求資料下載,所以當 User 在原始的 InfoBindingSource DataGridView 中快速移動資料時,將會引發 DataSet 過多的資料下載,使用 RelationDelay 可以延遲 DataSet A/P Server 請求資料的時間,延遲時間則在 DelayInterval 定義之,也就是每 User 移動一筆,除非停留 DelayInterval 的時間,否則對方的 DataSet 不會去下載資料,如此將可以大幅加速 User DataGridView 操作的反應時間,增加系統的效能。

Relations( 關聯明細 )(Collection)

設定本 InfoBindingSource 與其他 DataSet 的關聯關係。可以定義與多個 DataSet 的關係,每個 Relation 的屬性說明如下:

RelationDataSet ( 關聯的資料集 )( DataSet) 所要關聯的資料集,當 InfoBindingSource 每移動一筆資料時,都會引發此 DataSet 重新下載一次資料。

SourceKeyFields ( 來源關聯主鍵 )(string) 設定本 InfoBindingSource 要與其他 DataSet 去關聯時的主鍵,可設定多個欄位。

TargetKeyFields ( 目的關聯主鍵 )(string) 設定對方 DataSet 的關聯主鍵,也可設定多個欄位,但應與 SourceKeyFields 裡設定的欄位數量相同,保持一對一的對應,並且依次序對應。

Active( 啟用 )( bool) 是否開啟 Relation ,可以利用此屬性暫時關閉關連關係。

AllowInsert ( 允許新增 ) ( bool)

是否允許此 BindingSource 新增資料,用來配合 InfoSecurity 的功能 , 控制那些群組可以有權限使用這些功能。

AllowDelete ( 允許刪除 ) ( bool)

是否允許此 BindingSource 刪除資料,用來配合 InfoSecurity 的功能 , 控制那些群組可以有權限使用這些功能。

AllowUpdate ( 允許更改 ) ( bool)

是否允許此 BindingSource 更改資料,用來配合 InfoSecurity 的功能 , 控制那些群組可以有權限使用這些功能。

AllowPrint ( 允許印表 ) ( bool)

是否允許此 BindingSource 列印資料 ( InfoNaivagor 的「 Print 」的 Buttons 是否可以執行 ) ,用來配合 InfoSecurity 的功能 , 控制那些群組可以有權限使用這些功能。

DisibleKeyFields ( 鍵值唯讀 )( bool)

設定對應的 KeyFields 元件,在更改時不能輸入 ( ReadOnly) ,新增時則可以輸入。

AutoRecordLock ( 自動鎖定 )( bool)

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

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

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

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

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

AutoDisibleStyle ( 控制 可操作類型 )( enum)

性可設定 ReadOnly Enabled ,該 屬性配合 AutoDisableControls 使用,當 AutoDisableControls true 時, 控制連接 位設 為為 ReadOnly =true 還是 Enabled=false ,預設 Enabled

 

【事件】

AddingNew ( EventArg e)

在新增時觸發。

AfterDelete ( EventArg e)

在刪除以後觸發。

AfterEdit ( EventArg e)

在編輯完成後觸發。

BeforeEdit( EventArg e)

在編輯時觸發。

BindingComplete(EventArg e)

在與 DataSet 進行完資料的綁定之後時觸發。

ListChanged()(EventArg e)

在資料有移動後時觸發。

 

【功能函數】

AddNew()

對目前 InfoBindingSource 所對應的資料進行新增的動作。

BeginEdit()

對目前筆資料進行編輯的動作。

EndEdit()

對目前筆資料進行編輯確認的動作 如果 AutoApply=True 此功能會讓 DataSet 引發 Apply 的動作。

CancelEdit()

對目前筆資料取消編輯的動作。

MoveFirst()

讓資料移動到首筆。

MoveLast()

讓資料移動到末筆。

MoveNext()

讓資料移動到下筆。

MovePrevious()

讓資料移動到上筆。

RemoveCurrent()

對目前筆資料進行刪除的動作。

Refresh()

讓對應的 DataSet 重新到 Server 上讀取最新的資料下來。並能重新定位到原來那一筆資料。

ResumeBinding ()

DataSet 重新進行資料綁定的動作。

SuspendBinding ()

DataSet 進行取消資料綁定的動作。

GetCurrentValue ( string FieldName)

取得目前 Row 的新值。

GetOldValue ( string FieldName)

取得目前 Row 的舊值

 

【其他說明】

其實在設計資料編輯時,各 UI 資料編輯元件可透過 InfoDataSet 直接與 Table 相互綁定,但在 EEP 中不建議這樣使用,而必須透過 InfoBindingSource InfoDataSet 連接使用,這是因為 EEP 的很多 U/I 元件都是以 InfoBindingSource 為基礎做一些基本控制,尤其是 RefVal InfoNavigator 等元件更是與 InfoBindingSource 息息相關,因此在開發上須密切的配合。

 

【範例】

以下是從 InfoBindingSource 中取欄位值的方法:

ibsDetail.MoveFirst ( );

while (ibsDetail.Position+1<= ibsDetail.Count)   // 沒有 eof 的旗幟,所以要使用 Count 來判斷

{

       DataRowView dr= ( DataRowView ) ibsDetail.Current;

       MessageBox.Show ( dr.Row[" ProductID"]. ToString());

       int oldPos= ibsDetail.Position;

       ibsDetail.MoveNext ();

      if ( ibsDetail.Position== oldPos) break;  // Position 一樣代表沒有資料了

}

 

以下是從 InfoBindingSource 中自行新增資料的方法:

 

ibsDetail.AddNew ();  // 新增

DataRowView dr= ( DataRowView) ibsDetail.Current;   // 取出 DataRow Object, DataRow 進行處理

dr.Row [ " ProductID"] = 12;

dr.Row [ "Quantity"] = 10;

dr.Row [ " UnitPrice"] = 10;

dr.Row [ "Discount"] = 1;

ibsDetail.EndEdit ();   // 確定欄位的設值

 

以下是從 InfoBindingSource 中自行刪除資料的方法:

{

   // ibsDetail.RemoveAt( ibsDetail.Position);  // 這樣寫也可以 .

    ibsDetail.RemoveCurrent ();

 }

 

Converted from CHM to HTML with chm2web Pro 2.85 (unicode)