DualListControl
簡介:
它是個雙列表框選擇控制項。它適用於在一個指定的範圍內選擇一部所需要的內容。在DotNetNuke程式中他可以通用,而且使用簡單,只用設定好相應的屬性即可。例如:要做一個授權的功能的時候,就可以在Available列表中讀取系統所有的角色,將需要被授權的角色移動到Assigned列表中。
位置:
DNN目錄\controls\DualListControl.ascx
屬性:
ListBoxWidth:類型String,列表框寬度
ListBoxHeight:類型String,列表框寬度
Available:類型ArrayList,可供選擇的內容
Assigned:類型ArrayList,選定的內容
DataTextField:類型String,列表框文字欄位
DataValueField:類型String,列表框值欄位
Enabled:類型Boolean,是否有效
使用方法:
1、首先在需要應用的頁面中註冊這個控制項,如:
<%@ Register TagPrefix="Portal" TagName="DualList" Src="~/controls/DualListControl.ascx" %>
2、在需要用到位置寫下如下的代碼,如:
<portal:duallist id="ctlAdminRoles" runat="server" ListBoxWidth="130" ListBoxHeight="130" DataValueField="RoleName" DataTextField="RoleName"></portal:duallist>
3、在後台代碼中聲明該控制項
Protected WithEvents ctlAdminRoles As DotNetNuke.UI.UserControls.DualListControl
4、在後台代碼中分別綁定Available和Assigned的ArrayList,如:
Dim objRoles As New RoleController
Dim arrSysRoles As New ArrayList
'擷取當前網站所有的角色
arrSysRoles = objRoles.GetPortalRoles(PortalId)
Dim arrAvailableAdminRoles As New ArrayList
Dim arrAssignedAdminRoles As New ArrayList
arrAvailableAdminRoles = arrSysRoles
'當不是建立時,初始化已選定角色ArrayList,在可選擇角色ArrayList中派出已選擇部分
'objInfo.AdminRoles是以分號分隔的角色名稱
'ctlAdminRoles:DualListControl
If Not objInfo Is Nothing Then
'擷取已經選定的角色
Dim arrAdminRoles As String() = objInfo.AdminRoles.Split(";")
Dim RoleName As String
For Each RoleName In arrAdminRoles
Dim objRole As New RoleInfo
objRole.RoleName = RoleName
arrAssignedAdminRoles.Add(objRole)
Next
For Each objAvailableRole As RoleInfo In arrAvailableAdminRoles
For Each objAssignedRole As RoleInfo In arrAssignedAdminRoles
If objAvailableRole.RoleName = objAssignedRole.RoleName Then
arrAvailableAdminRoles.Remove(objAvailableRole)
End If
Next
Next
End If
ctlAdminRoles.Available = arrAvailableAdminRoles
ctlAdminRoles.Assigned = arrAssignedAdminRoles
ctlAdminRoles.DataBind()
更正如下:
Dim arrAdminRoles As String() = "已選擇角色1;已選擇角色2;"
For Each RoleName As String In arrAdminRoles
If RoleName.Trim().Length > 0 Then
Dim objRole As New RoleInfo
objRole.RoleName = RoleName
arrAssignedAdminRoles.Add(objRole)
End If
Next
'arrSysRoles:全部角色
For Each objAvailableRole As RoleInfo In arrSysRoles
Dim IsInAssigned As Boolean = False
For Each objAssignedRole As RoleInfo In arrAssignedAdminRoles
If objAvailableRole.RoleName = objAssignedRole.RoleName Then
IsInAssigned = True
Exit For
End If
Next
If Not IsInAssigned Then
arrAvailableAdminRoles.Add(objAvailableRole)
End If
Next
ctlAdminRoles.Available = arrAvailableAdminRoles
ctlAdminRoles.Assigned = arrAssignedAdminRoles
ctlAdminRoles.DataBind()
5、從控制項中擷取選定項
'strAdminRoles:以分號分隔的角色名稱
'ctlAdminRoles:DualListControl
Dim strAdminRoles As String = String.Empty
For Each objItem As ListItem In ctlAdminRoles.Assigned
strAdminRoles = strAdminRoles + ";" + objItem.Text
Next
strAdminRoles = strAdminRoles.Substring(1)
更正如下:
'strAdminRoles:以分號分隔的角色名稱
'ctlAdminRoles:DualListControl
Dim strAdminRoles As String = String.Empty
For Each objItem As ListItem In ctlAdminRoles.Assigned
strAdminRoles = strAdminRoles + objItem.Text + ";"
Next