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) |