#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 _AllGrids = new List(); 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 Convert(DataTable dtUsers) { var list = new List(); 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(); } /// /// 获取支持表格权限的界面 /// /// /// private List 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(); } 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)); } /// /// 加载表格列表 /// 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); } /// /// 显示当前配置的详细资料。 /// /// 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; } } }