#region using System; using System.Collections; using System.Data; using CSFrameworkV5.Common; using CSFrameworkV5.Core; using CSFrameworkV5.Models; #endregion namespace CSFrameworkV5.Business.BLL_Permission { /// /// 拖放操作或用户修改数据源时立即触发的事件。 /// /// 数据源对应的资料表 /// 当前拖放的项目 /// 状态(新增,修改,删除) public delegate void DataSourceChanged(DataTable sourceTable, ItemExtend item, DataRowState state); /// /// 扩展的数组结构,用于界面上拖放操作需要操作的数据源。 /// 主要用于操作组或用户角色的明细数据,如组的用户,组的角色及用户的角色等。 /// public class DragDropDataSourceBase : ArrayList { protected bool _AllowRemoveDataRow; protected string _PrimaryKeyValue; protected DataTable _SourceTable; /// /// 构造器 /// /// 组的明细数据源 /// 当前组编号 /// 允许删除资料行,当拖放操作后是否删除拖放的数据源。 public DragDropDataSourceBase(DataTable sourceTable, string primaryKeyValue, bool allowRemoveDataRow) { _SourceTable = sourceTable; _PrimaryKeyValue = primaryKeyValue; _AllowRemoveDataRow = allowRemoveDataRow; } /// /// 数据源对应的资料表 /// public DataTable SourceTable { get => _SourceTable; set => _SourceTable = value; } protected event DataSourceChanged _DataSourceChangedEvent; /// /// 添加项目到数组和资料表 /// /// 当前项目 /// public virtual int AddToListAndTable(ItemExtend item) { NotifyChanged(item, DataRowState.Added); return base.Add(item); } /// /// 是否存在指定的对象 /// /// 对象 /// protected virtual bool Exists(ItemExtend item) { foreach (ItemExtend o in this) if (item.Code == o.Code) return true; return false; } /// /// 获取数据表经用户修改的资料行 /// /// public virtual DataTable GetChanges() { return _SourceTable.GetChanges(); } /// /// 通知客户订阅的事件 /// /// /// public void NotifyChanged(ItemExtend item, DataRowState state) { if (_DataSourceChangedEvent != null) _DataSourceChangedEvent(_SourceTable, item, state); } /// /// 拖放操作或用户修改数据源时立即触发的事件 /// public event DataSourceChanged OnDataSourceChanged { add => _DataSourceChangedEvent = value; remove => _DataSourceChangedEvent = null; } /// /// 删除数组的对象及资料表的记录 /// /// 对象 public override void Remove(object obj) { base.Remove(obj); //删除数组的对象 var item = obj as ItemExtend; //删除新增状态的记录,直接删除记录 if (_AllowRemoveDataRow) { item.Deleted = true; //标记删除 NotifyChanged(item, DataRowState.Deleted); } } } /// /// 组用户的数据源 /// public class GroupUserDataSource : DragDropDataSourceBase { /// /// 构造器 /// /// 组用户的数据表 /// 当前组编号 /// 允许删除资料行,当拖放操作后是否删除资料表的记录行。 public GroupUserDataSource(DataTable sourceTable, string currentGroup, bool allowRemoveDataRow) : base(sourceTable, currentGroup, allowRemoveDataRow) { InitDataSource(sourceTable); } public override int AddToListAndTable(ItemExtend item) { if (Exists(item)) return -1; if (_AllowRemoveDataRow) { var row = SourceTable.NewRow(); row[tb_MyGroupUser.DataSetID] = Loginer.CurrentUser.DBID; row[tb_MyGroupUser.GroupCode] = _PrimaryKeyValue; //组编号 row[tb_MyGroupUser.Account] = item.Code; //用户 SourceTable.Rows.Add(row); item.DataRow = row; NotifyChanged(item, DataRowState.Added); } return base.Add(item); } public override DataTable GetChanges() { //复制原如数据及新增的记录 var temp = SourceTable.Copy(); foreach (ItemExtend item in this) if (item.Deleted) { var rows = temp.Select("GroupCode='" + _PrimaryKeyValue + "' and Account='" + item.Code + "'"); if (rows.Length > 0) rows[0].Delete(); //资料表的记录打上删除标记 } return temp.GetChanges(); } /// /// 初始化数据源 /// /// 组的用户数据源 private void InitDataSource(DataTable sourceTable) { foreach (DataRow row in sourceTable.Rows) { var item = new ItemExtend(); item.Code = row[tb_MyUser.Account].ToStringEx(); item.Name = row[tb_MyUser.UserName].ToStringEx() + " (" + item.Code + ")"; item.DataRow = row; Add(item); } } } /// /// 组的角色数据源 /// public class GroupRoleDataSource : DragDropDataSourceBase { public GroupRoleDataSource(DataTable sourceTable, string currentGroup, bool allowRemoveDataRow) : base(sourceTable, currentGroup, allowRemoveDataRow) { InitDataSource(sourceTable); } public override int AddToListAndTable(ItemExtend item) { if (Exists(item)) return -1; if (_AllowRemoveDataRow) { var row = SourceTable.NewRow(); row[tb_MyGroupRole.DataSetID] = Loginer.CurrentUser.DBID; row[tb_MyGroupRole.GroupCode] = _PrimaryKeyValue; row[tb_MyGroupRole.RoleID] = item.Code; SourceTable.Rows.Add(row); item.DataRow = row; NotifyChanged(item, DataRowState.Added); } return base.Add(item); } public override DataTable GetChanges() { //复制原如数据及新增的记录 var temp = SourceTable.Copy(); foreach (ItemExtend item in this) if (item.Deleted) { var rows = temp.Select("GroupCode='" + _PrimaryKeyValue + "' and RoleID='" + item.Code + "'"); if (rows.Length > 0) rows[0].Delete(); } return temp.GetChanges(); } private void InitDataSource(DataTable sourceTable) { foreach (DataRow row in sourceTable.Rows) { var item = new ItemExtend(); item.Code = row[tb_MyRole.RoleID].ToStringEx(); item.Name = row[tb_MyRole.RoleName].ToStringEx() + " (" + item.Code + ")"; item.DataRow = row; Add(item); } } } /// /// 组的角色数据源 /// public class RoleDataSource : DragDropDataSourceBase { public RoleDataSource(DataTable sourceTable) : base(sourceTable, tb_MyRole.__KeyName, true) { InitDataSource(sourceTable); } public override int AddToListAndTable(ItemExtend item) { if (Exists(item)) return -1; var row = SourceTable.NewRow(); row[tb_MyRole.DataSetID] = Loginer.CurrentUser.DBID; row[tb_MyRole.RoleID] = item.Code; row[tb_MyRole.RoleName] = item.Name; SourceTable.Rows.Add(row); NotifyChanged(item, DataRowState.Added); return base.Add(item); } protected override bool Exists(ItemExtend item) { var temp = item as UserRoleItem; foreach (ItemExtend o in this) if (o.Code == temp.RoleID) return true; return false; } private void InitDataSource(DataTable sourceTable) { foreach (DataRow row in sourceTable.Rows) { var item = new ItemExtend(); item.Code = row[tb_MyRole.RoleID].ToStringEx(); item.Name = row[tb_MyRole.RoleName].ToStringEx(); item.DataRow = row; Add(item); } } } /// /// 用户的临时角色数据源 /// public class UserRoleDataSource : DragDropDataSourceBase { public UserRoleDataSource(DataTable sourceTable, string account, bool allowRemoveDataRow) : base(sourceTable, account, allowRemoveDataRow) { InitDataSource(sourceTable); } public override int AddToListAndTable(ItemExtend item) { if (item is UserRoleItem) { var R = item as UserRoleItem; if (Exists(item)) return -1; if (_AllowRemoveDataRow) { var row = SourceTable.NewRow(); R.WriteToDataRow(row); //对象的属性写入DataRow R.DataRow = row; SourceTable.Rows.Add(row); NotifyChanged(item, DataRowState.Added); } return base.Add(item); //item=R } return -1; } protected override bool Exists(ItemExtend item) { var R = item as UserRoleItem; foreach (UserRoleItem o in this) if (R.Account == o.Account && R.RoleID == o.RoleID) return true; return false; } public override DataTable GetChanges() { //复制原如数据及新增的记录 var temp = SourceTable.Copy(); foreach (ItemExtend item in this) if (item.Deleted) { var rows = temp.Select("Account='" + _PrimaryKeyValue + "' and RoleID='" + item.Code + "'"); if (rows.Length > 0) rows[0].Delete(); } return temp.GetChanges(); } private void InitDataSource(DataTable sourceTable) { foreach (DataRow row in sourceTable.Rows) { var item = new UserRoleItem(row); Add(item); } } } public class SortedItemDataSource : DragDropDataSourceBase { public SortedItemDataSource(DataTable sourceTable, string primaryKeyValue, bool allowRemoveDataRow) : base(sourceTable, primaryKeyValue, allowRemoveDataRow) { InitDataSource(sourceTable); } public override int AddToListAndTable(ItemExtend item) { return 0; //if (this.Exists(item)) //{ // return -1; //} //else //{ // if (_AllowRemoveDataRow) // { // DataRow row = SourceTable.NewRow(); // row[tb_MyGroupRole.DataSetID] = Loginer.CurrentUser.DBID; // row[tb_MyGroupRole.GroupCode] = _PrimaryKeyValue; // row[tb_MyGroupRole.RoleID] = item.Code; // SourceTable.Rows.Add(row); // item.DataRow = row; // this.NotifyChanged(item, DataRowState.Added); // } // return base.Add(item); //} } public override DataTable GetChanges() { return null; //复制原如数据及新增的记录 //DataTable temp = SourceTable.Copy(); //foreach (ItemExtend item in this) //{ // if (item.Deleted) // { // DataRow[] rows = temp.Select("GroupCode='" + _PrimaryKeyValue + "' and RoleID='" + item.Code + "'"); // if (rows.Length > 0) rows[0].Delete(); // } //} //return temp.GetChanges(); } private void InitDataSource(DataTable sourceTable) { //foreach (DataRow row in sourceTable.Rows) //{ // ItemExtendSorted item = new ItemExtendSorted(); // item.Code = row[tb_MyRole.RoleID].ToStringEx(); // item.Name = row[tb_MyRole.RoleName].ToStringEx(); // item.DataRow = row; // this.Add(item); //} } } /// /// 用户的角色扩展类 /// public class UserRoleItem : ItemExtend { private string _Account = ""; private DateTime _CreateTime; private string _CreateUser; private string _DataSetID; private string _Description = ""; private DateTime _ExpireDate; private int _isid; private string _RoleID = ""; private string _RoleName = ""; public UserRoleItem() { } public UserRoleItem(DataRow row) { ReadFromDataRow(row); DataRow = row; } public string Account { get => _Account; set => _Account = value; } public DateTime CreateTime { get => _CreateTime; set => _CreateTime = value; } public string CreateUser { get => _CreateUser; set => _CreateUser = value; } public string DataSetID { get => _DataSetID; set => _DataSetID = value; } public string Description { get => _Description; set => _Description = value; } public DateTime ExpireDate { get => _ExpireDate; set => _ExpireDate = value; } public int isid { get => _isid; set => _isid = value; } public string RoleID { get => _RoleID; set => _RoleID = value; } public string RoleName { get => _RoleName; set => _RoleName = value; } public void ReadFromDataRow(DataRow row) { Code = RoleID; Name = RoleName; RoleID = row[tb_MyUserRoles.RoleID].ToStringEx(); RoleName = row[tb_MyUserRoles.RoleName].ToStringEx(); Account = row[tb_MyUserRoles.Account].ToStringEx(); Description = row[tb_MyUserRoles.Description].ToStringEx(); ExpireDate = ConvertEx.ToDateTimeEx(row[tb_MyUserRoles.ExpireDate]); DataSetID = ConvertEx.ToString(row[tb_MyUserRoles.DataSetID]); CreateUser = ConvertEx.ToString(row[tb_MyUserRoles.CreateUser]); CreateTime = ConvertEx.ToDateTimeEx(row[tb_MyUserRoles.CreateTime]); } public void UpdateInnerDataRow() { if (DataRow != null) WriteToDataRow(DataRow); } public void WriteToDataRow(DataRow row) { row[tb_MyUserRoles.RoleID] = RoleID; row[tb_MyUserRoles.RoleName] = RoleName; row[tb_MyUserRoles.Account] = Account; row[tb_MyUserRoles.Description] = Description; row[tb_MyUserRoles.ExpireDate] = ExpireDate; row[tb_MyUserRoles.CreateUser] = CreateUser; row[tb_MyUserRoles.CreateTime] = CreateTime; row[tb_MyUserRoles.DataSetID] = DataSetID; } } }