#region
|
|
using System;
|
using System.Collections;
|
using System.Collections.Generic;
|
using System.ComponentModel;
|
using System.Data;
|
using System.Drawing;
|
using System.Windows.Forms;
|
using CSFrameworkV5.Business;
|
using CSFrameworkV5.Business.BLL_Permission;
|
using CSFrameworkV5.Common;
|
using CSFrameworkV5.Core;
|
using CSFrameworkV5.Library.CommonClass;
|
using CSFrameworkV5.Models;
|
using DevExpress.XtraEditors;
|
|
#endregion
|
|
namespace CSFrameworkV5.Library.PermissionForms
|
{
|
public partial class frmUserRolePermission : frmBaseChild
|
{
|
private bllUserRole _BLL;
|
private bllUser _BLLUser;
|
|
private bool _DataChanged;
|
|
public frmUserRolePermission()
|
{
|
InitializeComponent();
|
}
|
|
private void btnCancelRole_Click(object sender, EventArgs e)
|
{
|
if (Msg.AskQuestion("确定要取消操作吗?"))
|
try
|
{
|
frmWaitingEx.ShowMe(this);
|
DoLoadData(
|
ConvertEx.ToString(txt_CurrentUser
|
.EditValue)); //重新加载数据
|
EnterEditMode(false);
|
}
|
finally
|
{
|
frmWaitingEx.HideMe(this);
|
}
|
}
|
|
private void btnEmpty_Click(object sender, EventArgs e)
|
{
|
txt_Account.EditValue = null;
|
txt_Role.EditValue = null;
|
txt_ExpireFrom.Text = "";
|
txt_ExpireTo.Text = "";
|
}
|
|
private void btnFindRole_Click(object sender, EventArgs e)
|
{
|
var currentUser = ConvertEx.ToString(txt_CurrentUser.EditValue);
|
LoadRole(currentUser, txtRoleText.Text);
|
}
|
|
private void btnQuery_Click(object sender, EventArgs e)
|
{
|
DoQuery();
|
ShowSummaryPage(false); //显示Summary页面.
|
if (gvSummary.RowCount == 0) Msg.Warning("没有查到数据!");
|
}
|
|
private void btnSaveRole_Click(object sender, EventArgs e)
|
{
|
try
|
{
|
frmWaitingEx.ShowMe(this);
|
|
var source = gcUserRoles.DataSource as DragDropDataSourceBase;
|
var dt = source.GetChanges();
|
|
if (dt != null)
|
{
|
var success = _BLL.Update(dt);
|
if (success)
|
DoLoadData(
|
ConvertEx.ToString(txt_CurrentUser
|
.EditValue)); //重新加载数据
|
}
|
|
EnterEditMode(false);
|
Msg.ShowInformation("保存成功!");
|
}
|
finally
|
{
|
frmWaitingEx.HideMe(this);
|
}
|
}
|
|
private void btnViewUserRole_Click(object sender, EventArgs e)
|
{
|
try
|
{
|
frmWaitingEx.ShowMe(this);
|
|
//显示用户名称
|
var account = ConvertEx.ToString(txt_CurrentUser.EditValue);
|
lcAccount.Text = "ID:" + account;
|
DoLoadData(account);
|
}
|
finally
|
{
|
frmWaitingEx.HideMe(this);
|
}
|
}
|
|
/// <summary>
|
/// 删除记录
|
/// </summary>
|
/// <param name="sender"></param>
|
public void DoDelete(IButtonInfo sender)
|
{
|
//删除查询表格的数据
|
if (tcBusiness.SelectedTabPage == tpSummary)
|
{
|
if (gvSummary.RowCount == 0)
|
{
|
Msg.Warning("表格内没有资料!");
|
return;
|
}
|
|
if (!Msg.AskQuestion("确定要删除吗?")) return;
|
|
var account =
|
ConvertEx.ToString(
|
gvSummary.GetFocusedRowCellValue(col_Account));
|
var roleID =
|
ConvertEx.ToString(
|
gvSummary.GetFocusedRowCellValue(col_RoleID));
|
|
var success = _BLL.DeleteUserRole(account, roleID);
|
if (success)
|
{
|
gvSummary.DeleteRow(gvSummary.FocusedRowHandle);
|
gcSummary.RefreshDataSource();
|
|
//刷新明细表
|
account = ConvertEx.ToString(txt_CurrentUser.EditValue);
|
DoLoadData(account);
|
|
Msg.ShowInformation("删除成功!");
|
}
|
}
|
|
//删除明细表格的数据
|
if (tcBusiness.SelectedTabPage == tpRole)
|
menuDeleteUserRole.PerformClick();
|
}
|
|
private void DoLoadData(string currentUser)
|
{
|
var dtAllRoles = _BLLUser.GetUserRoles4Picker(currentUser, "");
|
var dtUserRoles = _BLLUser.GetUserRoles(currentUser);
|
|
DragDropDataSourceBase availableRoles =
|
new RoleDataSource(dtAllRoles);
|
DragDropDataSourceBase userRoles =
|
new UserRoleDataSource(dtUserRoles, currentUser, true);
|
|
//观察数据变动情况
|
userRoles.OnDataSourceChanged += userRoles_OnDataSourceChanged;
|
|
lbAllRole.DisplayMember = "Name";
|
lbAllRole.ValueMember = "Code";
|
lbAllRole.DataSource = availableRoles;
|
|
gcUserRoles.DataSource = userRoles;
|
}
|
|
private void DoQuery()
|
{
|
try
|
{
|
frmWaitingEx.ShowMe(this);
|
|
//搜索数据
|
var dt = _BLL.SearchUserRole(
|
ConvertEx.ToString(txt_Account.EditValue),
|
ConvertEx.ToString(txt_Role.EditValue),
|
txt_ExpireFrom.DateTime, txt_ExpireTo.DateTime);
|
|
gcSummary.DataSource = null; //绑定主表的Grid
|
gcSummary.DataSource = dt;
|
}
|
finally
|
{
|
frmWaitingEx.HideMe(this);
|
}
|
}
|
|
/// <summary>
|
/// 查看选中记录的数据
|
/// </summary>
|
/// <param name="sender"></param>
|
public void DoViewContent(IButtonInfo sender)
|
{
|
if (tcBusiness.SelectedTabPage == tpSummary)
|
{
|
if (gvSummary.RowCount == 0)
|
{
|
Msg.Warning("表格内没有资料,请给用户分配角色。");
|
ShowDetailPage(false);
|
}
|
else
|
{
|
var currentUser =
|
ConvertEx.ToString(
|
gvSummary.GetFocusedRowCellValue(col_Account));
|
if (!string.IsNullOrEmpty(currentUser))
|
{
|
LoadRole(currentUser, "");
|
txt_CurrentUser.EditValue = currentUser;
|
ShowDetailPage(false);
|
btnViewUserRole
|
.PerformClick(); //显示当前用户的内容
|
}
|
}
|
}
|
else
|
{
|
btnViewUserRole.PerformClick();
|
}
|
}
|
|
private void EnterEditMode(bool yes)
|
{
|
_DataChanged = yes;
|
|
btnSaveRole.Enabled = yes;
|
btnCancelRole.Enabled = yes;
|
btnViewUserRole.Enabled = !yes;
|
txt_CurrentUser.Enabled = !yes;
|
_buttons.GetButtonByName(ButtonNameList.btnClose).Enable = !yes;
|
_buttons.GetButtonByName(ButtonNameList.btnView).Enable = !yes;
|
}
|
|
private void frmUserRoleManagement_FormClosing(object sender,
|
FormClosingEventArgs e)
|
{
|
if (_DataChanged) e.Cancel = !Msg.AskQuestion("您修改了数据没有保存,确定要退出吗?");
|
}
|
|
private void frmUserRoleManagement_Load(object sender, EventArgs e)
|
{
|
_BLL = new bllUserRole();
|
_BLLUser = new bllUser();
|
|
InitButtons();
|
|
gvSummary.DoubleClick += gvSummary_DoubleClick;
|
|
PermissionBinder.BoundUser(txt_Account);
|
DataBinder.BindingLookupEditDataSource(txt_Role,
|
new bllRole().GetLookupData(), tb_MyRole.RoleName,
|
tb_MyRole.RoleID);
|
|
txt_CurrentUser.Properties.PopupControl =
|
ucCodeNamePicker1.PopupContainer;
|
txt_CurrentUser.QueryPopUp += txt_CurrentUser_QueryPopUp;
|
|
ucCodeNamePicker1.DoSetCaption("帐号", "姓名");
|
ucCodeNamePicker1.DoSetField(tb_MyUser.Account, tb_MyUser.UserName);
|
ucCodeNamePicker1.OnShowFiltredData +=
|
ucCodeNamePicker1_OnShowFiltredData;
|
ucCodeNamePicker1.OnRowClick += ucCodeNamePicker1_OnRowClick;
|
ucCodeNamePicker1.DoSetSize(500);
|
ucCodeNamePicker1.DoShowDefaultData(DataDictCache.Cache.User);
|
|
lbAllRole.Items.Clear();
|
|
DoQuery(); //查询
|
|
EnterEditMode(false);
|
}
|
|
private void gvSummary_DoubleClick(object sender, EventArgs e)
|
{
|
if (gvSummary.RowCount > 0) DoViewContent(null);
|
}
|
|
private void gvUserRoles_DoubleClick(object sender, EventArgs e)
|
{
|
//双击表格,打开修改窗体
|
menuEditUserRole.PerformClick();
|
}
|
|
/// <summary>
|
/// 初始化数据窗体的按钮
|
/// </summary>
|
public override void InitButtons()
|
{
|
base.InitButtons();
|
|
var list = new ArrayList();
|
list.Add(ToolbarRegister.CreateButton(ButtonNameList.btnView, "查看",
|
ToolBarGroup.数据操作,
|
Globals.LoadBitmap("32_View.png"), new Size(57, 28), true, true,
|
DoViewContent));
|
list.Add(ToolbarRegister.CreateButton(ButtonNameList.btnDelete,
|
"删除", ToolBarGroup.数据操作,
|
Globals.LoadBitmap("32_Del.png"), new Size(57, 28), true, true,
|
DoDelete));
|
var ii = (IButtonInfo[])list.ToArray(typeof(IButtonInfo));
|
|
Buttons.AddRange(ii);
|
}
|
|
private void lbAllRole_DoubleClick(object sender, EventArgs e)
|
{
|
//双击移动项目到表格中
|
|
Assertion.AssertEditorEmpty(txt_CurrentUser, "请选择用户!", true);
|
|
var source = lbAllRole.DataSource as DragDropDataSourceBase;
|
var dest = gcUserRoles.DataSource as DragDropDataSourceBase;
|
|
if (source.Count > 0)
|
{
|
var currentUser = ConvertEx.ToString(txt_CurrentUser.EditValue);
|
|
var tag = lbAllRole.SelectedItem as ItemExtend;
|
UserRoleItem U;
|
|
if (frmUserRoleEditor.ExecuteAdd(currentUser, tag, out U))
|
{
|
dest.AddToListAndTable(U);
|
source.Remove(tag);
|
}
|
}
|
|
gcUserRoles.DataSource = null; //刷新表格
|
gcUserRoles.DataSource = dest;
|
|
lbAllRole.DataSource = null;
|
lbAllRole.DataSource = source;
|
}
|
|
private void LoadRole(string currentUser, string searchText)
|
{
|
var dtAllRoles =
|
_BLLUser.GetUserRoles4Picker(currentUser, searchText);
|
DragDropDataSourceBase availableRoles =
|
new RoleDataSource(dtAllRoles);
|
lbAllRole.DisplayMember = "Name";
|
lbAllRole.ValueMember = "Code";
|
lbAllRole.DataSource = availableRoles;
|
}
|
|
private void menuDeleteUserRole_Click(object sender, EventArgs e)
|
{
|
//将表格的数据移动到可选角色
|
if (gvUserRoles.RowCount == 0) return;
|
|
var source = gcUserRoles.DataSource as DragDropDataSourceBase;
|
var dest = lbAllRole.DataSource as DragDropDataSourceBase;
|
if (source.Count > 0)
|
{
|
var o = gvUserRoles.GetRow(gvUserRoles.FocusedRowHandle);
|
var tag = o as ItemExtend;
|
dest.AddToListAndTable(tag);
|
source.Remove(tag);
|
}
|
|
gcUserRoles.RefreshDataSource(); //刷新表格
|
|
lbAllRole.DataSource = null;
|
lbAllRole.DataSource = dest;
|
}
|
|
private void menuEditUserRole_Click(object sender, EventArgs e)
|
{
|
//弹出菜单,打开修改窗体
|
if (gvUserRoles.FocusedRowHandle >= 0)
|
{
|
var R =
|
gvUserRoles.GetRow(gvUserRoles.FocusedRowHandle) as
|
UserRoleItem;
|
if (frmUserRoleEditor.ExecuteEdit(R))
|
{
|
EnterEditMode(true);
|
gvUserRoles.UpdateCurrentRow();
|
}
|
}
|
}
|
|
private void ShowDetailPage(bool disableSummaryPage)
|
{
|
tpRole.PageEnabled = true;
|
tcBusiness.SelectedTabPage = tpRole;
|
tpSummary.PageEnabled = !disableSummaryPage;
|
}
|
|
private void ShowSummaryPage(bool disableDetailPage)
|
{
|
tpSummary.PageEnabled = true;
|
tcBusiness.SelectedTabPage = tpSummary;
|
tpRole.PageEnabled = !disableDetailPage;
|
}
|
|
private void txt_CurrentUser_EditValueChanged(object sender,
|
EventArgs e)
|
{
|
btnViewUserRole.PerformClick();
|
}
|
|
private void txt_CurrentUser_QueryPopUp(object sender,
|
CancelEventArgs e)
|
{
|
ucCodeNamePicker1.DoShowDefaultData(DataDictCache.Cache.User);
|
}
|
|
private void ucCodeNamePicker1_OnRowClick(DataRow clickedRow)
|
{
|
txt_CurrentUser.EditValue = clickedRow[tb_MyUser.Account];
|
ucCodeNamePicker1.Hide();
|
txt_CurrentUser.ClosePopup();
|
btnFindRole.PerformClick();
|
}
|
|
private DataTable ucCodeNamePicker1_OnShowFiltredData(string code,
|
string name)
|
{
|
var dt = DataDictCache.Cache.User.Copy();
|
var filter = "";
|
if (!string.IsNullOrEmpty(code))
|
{
|
if (filter != "") filter = filter + " OR ";
|
|
filter = " Account LIKE '%" + code + "%'";
|
}
|
|
if (!string.IsNullOrEmpty(name))
|
{
|
if (filter != "") filter = filter + " OR ";
|
|
filter = filter + " UserName LIKE '%" + name + "%'";
|
}
|
|
dt.DefaultView.RowFilter = filter;
|
dt = dt.DefaultView.ToTable();
|
return dt;
|
}
|
|
private void userRoles_OnDataSourceChanged(DataTable sourceTable,
|
ItemExtend item, DataRowState state)
|
{
|
if (state == DataRowState.Added || state == DataRowState.Deleted)
|
EnterEditMode(true);
|
}
|
|
#region DragDrop拖放操作
|
|
private void lbAllRole_DragDrop(object sender, DragEventArgs e)
|
{
|
//拖拉用户的角色到可选角色.
|
var dest = lbAllRole.DataSource as DragDropDataSourceBase;
|
var source = gcUserRoles.DataSource as DragDropDataSourceBase;
|
|
if (e.Data.GetDataPresent(typeof(UserRoleItem)))
|
{
|
var tag = e.Data.GetData(typeof(UserRoleItem)) as UserRoleItem;
|
dest.AddToListAndTable(tag);
|
source.Remove(tag);
|
}
|
|
lbAllRole.DataSource = null;
|
lbAllRole.DataSource = dest;
|
|
lbAllRole.SelectedIndex = lbAllRole.ItemCount - 1; //目的地定位到最后一条记录
|
lbAllRole.Focus();
|
lbAllRole.Refresh();
|
|
gcUserRoles.RefreshDataSource();
|
}
|
|
private void OnList_DragOver(object sender, DragEventArgs e)
|
{
|
//拖放到目标控件上触发的事件.
|
|
var list = sender as ImageListBoxControl;
|
var source = list.DataSource as DragDropDataSourceBase;
|
UserRoleItem tag = null;
|
|
if (e.Data.GetDataPresent(typeof(UserRoleItem)))
|
tag = e.Data.GetData(typeof(UserRoleItem)) as UserRoleItem;
|
|
if (e.Data.GetDataPresent(typeof(ItemExtend)))
|
tag = e.Data.GetData(typeof(ItemExtend)) as UserRoleItem;
|
|
if (tag == null || source.IndexOf(tag) >= 0)
|
e.Effect = DragDropEffects.None;
|
else
|
e.Effect = DragDropEffects.Move;
|
}
|
|
private void OnList_MouseDown(object sender, MouseEventArgs e)
|
{
|
//点鼠标右键,一次性拖放多个对象.
|
|
var list = sender as ImageListBoxControl;
|
|
if (e.Button == MouseButtons.Right && list.SelectedItems.Count > 1)
|
list.DoDragDrop(list.SelectedItems, DragDropEffects.Move);
|
}
|
|
private void OnList_MouseMove(object sender, MouseEventArgs e)
|
{
|
//移动鼠标,进入拖拉状态.
|
|
var list = sender as ImageListBoxControl;
|
if (MouseButtons.Left == e.Button && list.SelectedItem != null)
|
list.DoDragDrop(list.SelectedItem, DragDropEffects.Move);
|
|
if (MouseButtons.Right == e.Button)
|
list.DoDragDrop(list.SelectedItems, DragDropEffects.Move);
|
}
|
|
private void gvUserRoles_MouseDown(object sender, MouseEventArgs e)
|
{
|
//点鼠标右键,一次性拖放多个对象.
|
if (e.Button == MouseButtons.Right &&
|
gvUserRoles.SelectedRowsCount > 1)
|
{
|
var iRows = gvUserRoles.GetSelectedRows();
|
var rows = new List<DataRow>();
|
|
foreach (var i in iRows) rows.Add(gvUserRoles.GetDataRow(i));
|
|
gcUserRoles.DoDragDrop(rows, DragDropEffects.Move);
|
}
|
}
|
|
private void gvUserRoles_MouseMove(object sender, MouseEventArgs e)
|
{
|
//移动鼠标,进入拖拉状态.
|
if (MouseButtons.Left == e.Button &&
|
gvUserRoles.FocusedRowHandle >= 0)
|
{
|
var o = gvUserRoles.GetRow(gvUserRoles.FocusedRowHandle);
|
gcUserRoles.DoDragDrop(o, DragDropEffects.Move);
|
}
|
|
if (e.Button == MouseButtons.Right &&
|
gvUserRoles.SelectedRowsCount >= 1)
|
{
|
var iRows = gvUserRoles.GetSelectedRows();
|
var rows = new List<DataRow>();
|
|
foreach (var i in iRows) rows.Add(gvUserRoles.GetDataRow(i));
|
|
gcUserRoles.DoDragDrop(rows, DragDropEffects.Move);
|
}
|
}
|
|
private void gcUserRoles_DragOver(object sender, DragEventArgs e)
|
{
|
//拖放到目标控件上触发的事件.
|
|
//没有用户,不支持拖放
|
if (txt_CurrentUser.Text == "") return;
|
|
var source = gcUserRoles.DataSource as DragDropDataSourceBase;
|
ItemExtend tag = null;
|
|
if (e.Data.GetDataPresent(
|
typeof(BaseListBoxControl.SelectedItemCollection)))
|
{
|
BaseListBoxControl.SelectedItemCollection listSelected;
|
listSelected =
|
e.Data.GetData(
|
typeof(BaseListBoxControl.SelectedItemCollection))
|
as
|
BaseListBoxControl.SelectedItemCollection;
|
tag = listSelected[0] as ItemExtend;
|
}
|
|
if (e.Data.GetDataPresent(typeof(ItemExtend)))
|
tag = e.Data.GetData(typeof(ItemExtend)) as ItemExtend;
|
|
if (e.Data.GetDataPresent(typeof(UserRoleItem)))
|
tag = e.Data.GetData(typeof(UserRoleItem)) as ItemExtend;
|
|
if (tag == null || source.IndexOf(tag) >= 0)
|
e.Effect = DragDropEffects.None;
|
else
|
e.Effect = DragDropEffects.Move;
|
}
|
|
private void gcUserRoles_DragDrop(object sender, DragEventArgs e)
|
{
|
//拖拉可选角色到组的角色.
|
var dest = gcUserRoles.DataSource as DragDropDataSourceBase;
|
var source = lbAllRole.DataSource as DragDropDataSourceBase;
|
|
ItemExtend tag = null;
|
UserRoleItem U = null;
|
|
if (e.Data.GetDataPresent(typeof(ItemExtend)))
|
tag = e.Data.GetData(typeof(ItemExtend)) as ItemExtend;
|
|
if (e.Data.GetDataPresent(typeof(UserRoleItem)))
|
tag = e.Data.GetData(typeof(UserRoleItem)) as UserRoleItem;
|
|
if (tag != null)
|
{
|
var currentUser = ConvertEx.ToString(txt_CurrentUser.EditValue);
|
if (frmUserRoleEditor.ExecuteAdd(currentUser, tag, out U))
|
{
|
dest.AddToListAndTable(U);
|
source.Remove(tag);
|
}
|
|
gcUserRoles.DataSource = null;
|
gcUserRoles.DataSource = dest;
|
|
gvUserRoles.MoveLast(); //目的地定位到最后一条记录
|
lbAllRole.Refresh();
|
}
|
}
|
|
#endregion
|
}
|
}
|