#region
|
|
using System;
|
using System.Collections.Generic;
|
using System.Data;
|
using System.Linq;
|
using System.Text;
|
using System.Windows.Forms;
|
using CSFrameworkV5.Business.BLL_Permission;
|
using CSFrameworkV5.Common;
|
using CSFrameworkV5.Core;
|
using CSFrameworkV5.Library;
|
using CSFrameworkV5.Library.CommonClass;
|
using CSFrameworkV5.Models;
|
using DevExpress.XtraEditors;
|
using DevExpress.XtraEditors.Controls;
|
using DevExpress.XtraGrid.Columns;
|
using DevExpress.XtraGrid.Views.Base;
|
using ItemCheckEventArgs = DevExpress.XtraEditors.Controls.ItemCheckEventArgs;
|
|
#endregion
|
|
namespace CSFrameworkV5.SystemModule
|
{
|
public partial class frmGridPermissionConfig : XtraForm
|
{
|
private List<GridPermissionItem> _AllGrids =
|
new List<GridPermissionItem>();
|
|
private DataTable _AllUsers;
|
|
private bool _IsChecked;
|
|
public frmGridPermissionConfig()
|
{
|
InitializeComponent();
|
}
|
|
private void btnAddConfig_Click(object sender, EventArgs e)
|
{
|
if (txtGrids.Text == "")
|
{
|
txtGrids.Focus();
|
return;
|
}
|
|
var dtConfig = gcMain.DataSource as DataTable;
|
|
var rows = dtConfig.Select($"GridId='{txtGrids.EditValue}'");
|
if (rows.Length > 0)
|
{
|
Msg.Warning("当前用户已经存此表格的配置,不可重复!");
|
return;
|
}
|
|
var R = dtConfig.Rows.Add();
|
|
R[sys_GridPermission.RowID] = Guid.NewGuid().ToStringEx().ToLower();
|
R[sys_GridPermission.GridId] = txtGrids.EditValue;
|
R[sys_GridPermission.GridDisplayName] = txtGrids.Text;
|
R[sys_GridPermission.UserId] =
|
(listUsers.SelectedItem as UserItem).Account;
|
R[sys_GridPermission.HiddenColumns] = "";
|
R[sys_GridPermission.ColumnCount] = 0;
|
R[sys_GridPermission.CreateTime] = DateTime.Now;
|
|
//刷新表格,定位新增的记录
|
gcMain.RefreshDataSource();
|
gvMain.FocusedRowHandle =
|
gvMain.GetRowHandle(dtConfig.Rows.IndexOf(R));
|
|
ShowConfig(R);
|
|
txtGrids.EditValue = null;
|
}
|
|
private void btnCheckAll_Click(object sender, EventArgs e)
|
{
|
listColumns.CheckAll();
|
}
|
|
private void btnFilter_Click(object sender, EventArgs e)
|
{
|
if (_AllUsers == null) return;
|
|
var filter =
|
$"UserName LIKE '%{txtContent.Text}%' OR UserName LIKE '%{txtContent.Text}%'";
|
_AllUsers.DefaultView.RowFilter = filter;
|
listUsers.DataSource = Convert(_AllUsers.DefaultView.ToTable());
|
}
|
|
private void btnSave_Click(object sender, EventArgs e)
|
{
|
if (_IsChecked == false &&
|
(gcMain.DataSource as DataTable).GetChanges() == null)
|
{
|
Msg.Warning("没有任何修改!");
|
return;
|
}
|
|
try
|
{
|
frmWaitingEx.ShowMe(this);
|
|
var data = (gcMain.DataSource as DataTable).GetChanges();
|
if (data == null) return; //没有修改数据
|
|
var ok = new bllPermission().SaveGridPermission(data);
|
|
if (ok)
|
{
|
_IsChecked = false;
|
(gcMain.DataSource as DataTable).AcceptChanges();
|
Msg.ShowInformation("保存成功!");
|
}
|
else
|
{
|
Msg.Warning("保存失败!");
|
}
|
}
|
finally
|
{
|
frmWaitingEx.HideMe(this);
|
}
|
}
|
|
private void btnUnCheck_Click(object sender, EventArgs e)
|
{
|
listColumns.UnCheckAll();
|
}
|
|
private List<UserItem> Convert(DataTable dtUsers)
|
{
|
var list = new List<UserItem>();
|
|
foreach (DataRow R in dtUsers.Rows)
|
list.Add(new UserItem(R[tb_MyUser.Account].ToStringEx(),
|
R[tb_MyUser.UserName].ToStringEx() + " (" +
|
R[tb_MyUser.Account].ToStringEx() + ")"));
|
|
return list;
|
}
|
|
private void frmGridPermissionConfig_FormClosing(object sender,
|
FormClosingEventArgs e)
|
{
|
if (_IsChecked || (gcMain.DataSource != null &&
|
(gcMain.DataSource as DataTable).GetChanges() !=
|
null))
|
e.Cancel = !Msg.AskQuestion("您配置了表格权限数据没有保存,确定要退出吗?");
|
}
|
|
private void frmGridPermissionConfig_Load(object sender, EventArgs e)
|
{
|
DataBinderTools.BoundUser(repUser);
|
|
LoadGrids();
|
LoadUsers();
|
}
|
|
/// <summary>
|
/// 获取支持表格权限的界面
|
/// </summary>
|
/// <param name="formNamespace"></param>
|
/// <returns></returns>
|
private List<GridPermissionItem> GetModuleGrids(string formNamespace)
|
{
|
var type =
|
(MdiTools.MainForm as IMdiForm).GetGlobalType(formNamespace);
|
if (type != null)
|
{
|
var o = Activator.CreateInstance(type);
|
if (o is IFormGridPermission)
|
return (o as IFormGridPermission).GetGrids();
|
}
|
|
return new List<GridPermissionItem>();
|
}
|
|
private void gvMain_FocusedRowChanged(object sender,
|
FocusedRowChangedEventArgs e)
|
{
|
var R = gvMain.GetFocusedDataRow();
|
if (R != null)
|
ShowConfig(R);
|
else
|
listColumns.Items.Clear();
|
}
|
|
private void listColumns_ItemCheck(object sender, ItemCheckEventArgs e)
|
{
|
UpdateRow();
|
_IsChecked = true;
|
}
|
|
private void listUsers_SelectedIndexChanged(object sender, EventArgs e)
|
{
|
if (listUsers.SelectedItem == null) return;
|
|
var userID = (listUsers.SelectedItem as UserItem).Account;
|
var dt = new bllPermission().GetGridPermission(userID);
|
gcMain.DataSource = dt;
|
gcMain.RefreshDataSource();
|
|
gvMain_FocusedRowChanged(gvMain,
|
new FocusedRowChangedEventArgs(-1, gvMain.FocusedRowHandle));
|
}
|
|
/// <summary>
|
/// 加载表格列表
|
/// </summary>
|
private void LoadGrids()
|
{
|
//添加当前模块(系统管理模块)的表格实例
|
_AllGrids.AddRange((new frmDatasetMgr() as IFormGridPermission)
|
.GetGrids());
|
_AllGrids.AddRange((new frmDocNoRule() as IFormGridPermission)
|
.GetGrids());
|
|
//添加其他模块的表格实例
|
_AllGrids.AddRange(
|
GetModuleGrids("CSFrameworkV5.Report.frmGridTester"));
|
|
txtGrids.Properties.DisplayMember = "DisplayName";
|
txtGrids.Properties.ValueMember = "GridId";
|
txtGrids.Properties.DataSource = _AllGrids;
|
}
|
|
private void LoadUsers()
|
{
|
_AllUsers = new bllUser().GetUsers();
|
listUsers.DisplayMember = tb_MyUser.UserName;
|
listUsers.ValueMember = tb_MyUser.Account;
|
listUsers.ImageIndexMember = "ImageIndex";
|
listUsers.DataSource = Convert(_AllUsers);
|
}
|
|
/// <summary>
|
/// 显示当前配置的详细资料。
|
/// </summary>
|
/// <param name="R"></param>
|
private void ShowConfig(DataRow R)
|
{
|
var columns =
|
ConvertEx.ToString(R[sys_GridPermission.HiddenColumns]);
|
var gridId = ConvertEx.ToString(R[sys_GridPermission.GridId]);
|
|
if (string.IsNullOrWhiteSpace(gridId)) return;
|
|
var item = _AllGrids.Where(e => e.GridId == gridId)
|
.FirstOrDefault();
|
if (item != null)
|
{
|
listColumns.Items.Clear();
|
foreach (GridColumn col in item.GridView.Columns)
|
{
|
var isCheck = columns.IndexOf(col.FieldName + ",") >= 0;
|
listColumns.Items.Add(
|
new ColumnItem(col.FieldName, col.Caption), isCheck);
|
}
|
}
|
else
|
{
|
listColumns.Items.Clear();
|
}
|
}
|
|
private void UpdateRow()
|
{
|
var R = gvMain.GetFocusedDataRow();
|
if (R == null) return;
|
|
var sb = new StringBuilder();
|
|
foreach (var item in listColumns.CheckedItems)
|
{
|
var cdata = (item as CheckedListBoxItem).Value as ColumnItem;
|
sb.Append(cdata.FieldName + ",");
|
}
|
|
R[sys_GridPermission.HiddenColumns] = sb.ToStringEx();
|
R[sys_GridPermission.ColumnCount] = listColumns.CheckedItems.Count;
|
}
|
}
|
|
public class ColumnItem
|
{
|
public ColumnItem(string fieldName, string caption)
|
{
|
FieldName = fieldName;
|
Caption = caption;
|
}
|
|
public string Caption { get; set; }
|
|
public string FieldName { get; set; }
|
|
public override string ToString()
|
{
|
return Caption;
|
}
|
}
|
|
public class UserItem
|
{
|
public UserItem(string userId, string name)
|
{
|
Account = userId;
|
UserName = name;
|
}
|
|
public string Account { get; set; }
|
|
public int ImageIndex { get; set; } = 0;
|
|
public string UserName { get; set; }
|
|
public override string ToString()
|
{
|
return UserName;
|
}
|
}
|
}
|