天天看點

Winform開發架構之權限管理系統改進的經驗總結(1)-TreeListLookupEdit控件的使用

最近一直在做一些技術性的研究和架構改進工作,部落格也落下好幾天沒有更新了,也該是時候靜下心來,總結這段時間的一些技術改進的經驗了。和上一階段的CRM系統開發和技術研究一樣,我都喜歡在一個項目或者子產品完成後,做一些相關的總結性工作,記錄下前一階段的技術腳印,希望給自己留下一個腳印快照,同時給讀者了解自己的技術動向外,也有所收獲。本随筆主要介紹在下拉清單中展示一個清單,以便實作資料結構的良好展示,并能快速標明所需的節點,這個就是TreeListLookupEdit控件的使用。

首先我們來看看我的Winform開發架構之權限管理系統子產品改進完善後的主界面,然後在介紹其中用到的功能點,以及技術實作。

系統使用者資訊管理界面如下所示。

Winform開發架構之權限管理系統改進的經驗總結(1)-TreeListLookupEdit控件的使用

其中使用者資訊編輯界面如下所示。

Winform開發架構之權限管理系統改進的經驗總結(1)-TreeListLookupEdit控件的使用

其中編輯使用者資訊的界面包括了所屬公司、所屬部門、直屬經理三個輸入的内容,為了減少資料量的顯示,這幾個輸入框是通過級聯的方式進行展示,也就是說,先標明所屬公司,然後在所屬公司中列出該公司的部門清單,標明部門後,再通過擷取指定部門的人員資訊,作為直屬經理的人員展示。

了解這些邏輯關系後,我們來看看所屬公司的清單展示,如下所示。

Winform開發架構之權限管理系統改進的經驗總結(1)-TreeListLookupEdit控件的使用

標明了所屬公司後,所屬部門就根據公司來進行過濾了,如下所示。

Winform開發架構之權限管理系統改進的經驗總結(1)-TreeListLookupEdit控件的使用

通過公司和部門的條件,我們就可以列出有限的人員清單,作為直屬經理的人員清單了,這個清單使用普通的下拉清單展示即可,在此不再贅述。

以上的樹狀結構的下拉清單,在DevExpress控件中是通過TreeListLookupEdit控件進行實作的。

 由于這些所屬公司、所屬部門的功能子產品,一般需要不少代碼進行處理,為了更好重用這些子產品,我們通過使用者控件的封裝方式進行,然後在資料編輯界面上,通過拖動控件方式即可實作布局,并隻需要設定或者通路某個屬性即可,封裝的使用者界面控件如下所示。

Winform開發架構之權限管理系統改進的經驗總結(1)-TreeListLookupEdit控件的使用

1)所屬公司控件代碼

所屬公司是一個使用者控件,讓其繼承自XtraUserControl即可,為了在選擇内容後觸發值的變化事件,我們定義了一個事件EventHandler EditValueChanged,這樣我們在内部控件的值變化的時候,可以通知外部的界面進行處理。

為了實作清單資料的綁定,以及增加圖示作為區分節點,TreeListLookupEdit控件的資料綁定操作是這個控件的核心所在。

在下面的代碼邏輯裡面,我們通過擷取公司清單,然後把它轉換為一個DataTable,并根據集團、公司的層次給予不同的圖示,綁定資料,并設定好控件的KeyFieldName、ParentFieldName、ValueMember、DisplayMember幾個重要屬性即可,如下所示。

為了友善編輯界面中,對所屬公司的指派與擷取操作,我們需要增加一個Text屬性和一個Value屬性。我們需要重載Text屬性,用來擷取或設定所屬公司的名稱;添加一個Value屬性,用來擷取所屬公司的ID,如下所示。

2)所屬部門的控件代碼

所屬部門的代碼邏輯和所屬公司差不多,唯一不同的是,所屬部門需要一個上級的部門辨別(公司ID)作為資料的過濾擷取,如下所示。

3)主界面的控件使用

封裝好所屬公司和所屬部門的控件後,我們就可以通過在工具箱裡面拖動控件到主編輯界面裡面去了,這樣我們隻需要簡單對控件進行設定和指派即可實作,減少對控件邏輯過多的代碼處理。

資料編輯界面中,控件的使用代碼如下所示。

a)界面指派操作

b)界面資料擷取操作

c)界面事件的處理操作

由于界面上兩個控件是級聯的關系,是以需要處理他們控件的值發生變化的事件,如下所示。

Winform開發架構之權限管理系統改進的經驗總結(1)-TreeListLookupEdit控件的使用

總體來說,這個控件實作的效果還是非常不錯的,例子代碼如下所示,其節點和TreeView的操作類似,通過ComboTreeNode對象進行添加即可。

不過可能沒有上面的那個效果好一點。 

以上這些就是關于級聯下拉清單,并在下拉清單裡面展示層次關系的樹形結構的功能實作和核心代碼的操作,本随筆介紹了基于DevExpress樣式和傳統樣式兩種方案的實作過程,重點對DevExpress控件中的TreeListLookupEdit控件的實作進行介紹,希望大家能夠在實際工作中用上。

繼續閱讀