#region using System; using System.Collections.Generic; using System.Data; using System.Linq; using System.Text; using System.Windows.Forms; using CSFrameworkV5.Business; using CSFrameworkV5.Business.BLL_Permission; using CSFrameworkV5.Common; using CSFrameworkV5.Core; using CSFrameworkV5.Interfaces; using CSFrameworkV5.Interfaces.InterfaceModels; using CSFrameworkV5.Library.CommonClass; using CSFrameworkV5.Models; using DevExpress.XtraEditors; using DevExpress.XtraEditors.Controls; using DevExpress.XtraGrid.Views.Base; using ItemCheckEventArgs = DevExpress.XtraEditors.Controls.ItemCheckEventArgs; #endregion namespace CSFrameworkV5.Library { public partial class frmGroupOrganization_DataRightsConfig : XtraForm { private List _AllGrids = new List(); private IDictionary> _cache = new Dictionary>(); private NodeModel _nodeModel; private frmGroupOrganization_DataRightsConfig() { InitializeComponent(); } private void btnAddConfig_Click(object sender, EventArgs e) { if (txtTables.Text == "") { txtTables.Focus(); return; } var o = txtTables.Properties.GetDataSourceRowByKeyValue(txtTables .EditValue); var m = o as DbTableModel; var dtConfig = gcMain.DataSource as DataTable; var rows = dtConfig.Select( $"DataType='{_nodeModel.Type}' AND DataId='{_nodeModel.DataID}' AND DBName='{m.DBName}' AND TableName='{m.TableName}'"); if (rows.Length > 0) { Msg.Warning("当前用户已经存此表格的配置,不可重复!"); return; } var R = dtConfig.Rows.Add(); R[sys_DataPermission.RowID] = Guid.NewGuid().ToStringEx().ToLower(); R[sys_DataPermission.DataSetID] = Loginer.CurrentUser.DBID; R[sys_DataPermission.DataType] = _nodeModel.Type; R[sys_DataPermission.DataID] = _nodeModel.DataID; R[sys_DataPermission.DBName] = m.DBName; R[sys_DataPermission.TableName] = m.TableName; R[sys_DataPermission.AllowColumns] = ""; R[sys_DataPermission.ColumnCount] = 0; R[sys_DataPermission.CreateTime] = DateTime.Now; R["DisplayText"] = _nodeModel.Text; //lookup字段 R["FlagChild"] = "N"; //lookup字段 //刷新表格,定位新增的记录 gcMain.RefreshDataSource(); gvMain.FocusedRowHandle = gvMain.GetRowHandle(dtConfig.Rows.IndexOf(R)); if (gvMain.RowCount == 1) gvMain_FocusedRowChanged(gvMain, new FocusedRowChangedEventArgs(0, 0)); txtTables.EditValue = null; } private void btnCancel_Click(object sender, EventArgs e) { Close(); } private void btnCheckAll_Click(object sender, EventArgs e) { listColumns.CheckAll(); } private void btnOk_Click(object sender, EventArgs e) { DoSave(); } private void btnUnCheck_Click(object sender, EventArgs e) { listColumns.UnCheckAll(); } private void DoSave() { try { frmWaitingEx.ShowMe(this); SetAllColumns(); var data = (gcMain.DataSource as DataTable).GetChanges(); if (data == null) return; //没有修改数据 var ok = new bllPermission().SaveDataPermission(data); if (ok) { (gcMain.DataSource as DataTable).AcceptChanges(); Msg.ShowInformation("保存成功!"); } else { Msg.Warning("保存失败!"); } } finally { frmWaitingEx.HideMe(this); } } /// /// /// 数据类型:Group/User /// 组编号GroupCode/用户账号Account public static void Execute(NodeModel m) { var form = new frmGroupOrganization_DataRightsConfig(); form._nodeModel = m; form.ShowDialog(); } private void frmGridPermissionConfig_FormClosing(object sender, FormClosingEventArgs e) { if (gcMain.DataSource != null && (gcMain.DataSource as DataTable).GetChanges() != null) e.Cancel = !Msg.AskQuestion("您配置了表格权限数据没有保存,确定要退出吗?"); } private void frmGridPermissionConfig_Load(object sender, EventArgs e) { DataBinderTools.BoundCheckEdit(chk); txtTables.Properties.DropDownRows = 25; txtTables.Properties.PopupWidth = 400; LoadTablesLookup(); LoadConfig(); } 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(); } private void LoadConfig() { if (_nodeModel.Type.ToUpper() == "USER") { var data = new bllPermission().GetDataPermissionConfigByUser(_nodeModel .DataID); gcMain.DataSource = data; picCurrent.Image = picUser.Image; lblCurrent.Text = _nodeModel.Text + "(" + _nodeModel.DataID + ")"; } if (_nodeModel.Type.ToUpper() == "GROUP") { var data = new bllPermission().GetDataPermissionConfigByGroup( _nodeModel.DataID); gcMain.DataSource = data; picCurrent.Image = picDept.Image; lblCurrent.Text = _nodeModel.Text + "(" + _nodeModel.DataID + ")"; } } /// /// 加载表格列表 /// private void LoadTablesLookup() { var data = CommonData.GetDbTables(); txtTables.Properties.DisplayMember = "TableName"; txtTables.Properties.ValueMember = "TableName"; txtTables.Properties.DataSource = data; } private void SetAllColumns() { var R = gvMain.GetFocusedDataRow(); var sb = new StringBuilder(); foreach (CheckedListBoxItem item in listColumns.Items) sb.Append((item.Value as ColumnItem).FieldName + ","); R["AllFields"] = sb.ToStringEx(); } /// /// 显示当前配置的详细资料。 /// /// private void ShowConfig(DataRow R) { var allowFields = ConvertEx.ToString( R[sys_DataPermission.AllowColumns]); //已配置的数据权限 var key = ConvertEx.ToString(R[sys_DataPermission.RowID]); var dbname = ConvertEx.ToString(R[sys_DataPermission.DBName]); var tableName = ConvertEx.ToString(R[sys_DataPermission.TableName]); var flagChild = ConvertEx.ToString(R["FlagChild"]); var allowColumns = allowFields.Split(new[] { ',' }, StringSplitOptions.RemoveEmptyEntries); var allFields = new List(); if (_cache.ContainsKey(key)) { allFields = _cache[key]; } else { allFields = CommonData.GetDbTableFields(dbname, tableName); _cache[key] = allFields; } listColumns.Items.Clear(); foreach (var m in allFields) { var isCheck = allowColumns .Where(e => m.FieldName.ToLower() == e.ToLower()) .FirstOrDefault() != null; listColumns.Items.Add( new ColumnItem(m.FieldName, m.DisplayName), isCheck); } //子级组不可配置 listColumns.Enabled = flagChild == "N"; lblTip.Visible = flagChild == "Y"; } 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_DataPermission.AllowColumns] = sb.ToStringEx(); R[sys_DataPermission.ColumnCount] = listColumns.CheckedItems.Count; } private void 全部不勾选ToolStripMenuItem_Click(object sender, EventArgs e) { listColumns.UnCheckAll(); } private void 全部勾选ToolStripMenuItem_Click(object sender, EventArgs e) { listColumns.CheckAll(); } } 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; } } }