Appendix BClient端元件\InfoBindingSource

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才會執行資料的儲存。一般在InfoDataSetMaster/Detail的情況下,對Master一般都是設為True的,但如果是Detail則都是設為False

 

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

此專門應該在Master/Detail的架構上,當新增Master後,並在輸入Detail前是否要先將Master進行Apply存檔,此應用在Master的主鍵為自增值欄位(每次自動加一),所以要配合

AutoApplyMaster=True來強迫Master存檔並取回鍵值後,才能正確對Detail輸入資料。

 

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

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

 

AutoDisableStyle(自動失能控制樣式)(Srvtools.InfoBindingSource.AutoDisableStyleType)

自動失能控制樣式,有EnableReadOnly兩種。

 

CloseProtect(關閉保護)(bool)

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

 

DataMember(資料成員)(string)

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

 

DataSource(資料源)(DataSource)

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

 

DelayInterval(延遲時間)(int32)

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

 

DisableKeyFields(隱藏主鍵欄位)(bool)

隱藏主鍵欄位。

 

FocusedControl(焦點元件)

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

 

RelationDelay(關聯延遲)(bool)

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

 

Relations(關聯明細)(Collection)

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

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

 

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

 

TargetKeyFields(目的關聯主鍵)(string)設定對方DataSet

的關聯主鍵,也可設定多個欄位,但應與SourceKeyFields

裡設定的欄位數量相同,保持一對一的對應,並且依次序對

應。

 

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

 

AllowAdd(允許新增) (bool)

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

 

AllowDelete(允許刪除) (bool)

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

 

AllowUpdate(允許更改) (bool)

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

 

AllowPrint (允許印表) (bool)

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

 

【事件】

AddingNew(新增前)

在新增時觸發。

AfterDelete(刪除後)

在刪除以後觸發。

AfterEdit(編輯後)

在編輯完成後觸發。

BeforeEdit(編輯前)

在編輯時觸發。

BindingComplete(綁定後)

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

CurrentChanged(當前值改變後)

在當前一筆的值改變後觸發。

CurrentItemChanged(當前項改變後)

在當前項的屬性值改變後觸發。

ListChanged()(資料移動後)

在資料有移動後時觸發。

PositionChanged()(資料移動後)

在資料有移動後時觸發。

AllowProperyChanged(InfoBindingSource中的所有Allow類屬性變化後)

InfoBindingSourceAllowAdd,AllowUpdate,AllowDelete以及AllowPrint的屬性值有變化時觸發

 

 

【功能函數】

AddNew()

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

BeginEdit()

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

EndEdit()

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

CancelEdit()

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

MoveFirst()

讓資料移動到首筆。

MoveLast()

讓資料移動到末筆。

MoveNext()

讓資料移動到下筆。

MovePrevious()

讓資料移動到上筆。

RemoveCurrent()

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

Refresh()

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

ResumeBinding()

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

SuspendBinding()

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

 

【其他說明】

其實在設計資料編輯時,各UI資料編輯元件可透過InfoDataSet直接與Table相互綁定,但在EEP中不建議這樣使用,而必須透過InfoBindingSourceInfoDataSet連接使用,這是因為EEP的很多U/I元件都是以InfoBindingSource為基礎做一些基本控制,尤其是RefValInfoNavigator等元件更是與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();

}

 

 

Top of Page