#region
|
|
using System;
|
using System.Collections;
|
using System.Data;
|
using CSFrameworkV5.Common;
|
using CSFrameworkV5.Core;
|
using CSFrameworkV5.Models;
|
|
#endregion
|
|
namespace CSFrameworkV5.Business.BLL_Permission
|
{
|
/// <summary>
|
/// 拖放操作或用户修改数据源时立即触发的事件。
|
/// </summary>
|
/// <param name="sourceTable">数据源对应的资料表</param>
|
/// <param name="item">当前拖放的项目</param>
|
/// <param name="state">状态(新增,修改,删除)</param>
|
public delegate void DataSourceChanged(DataTable sourceTable,
|
ItemExtend item, DataRowState state);
|
|
/// <summary>
|
/// 扩展的数组结构,用于界面上拖放操作需要操作的数据源。
|
/// 主要用于操作组或用户角色的明细数据,如组的用户,组的角色及用户的角色等。
|
/// </summary>
|
public class DragDropDataSourceBase : ArrayList
|
{
|
protected bool _AllowRemoveDataRow;
|
protected string _PrimaryKeyValue;
|
|
protected DataTable _SourceTable;
|
|
/// <summary>
|
/// 构造器
|
/// </summary>
|
/// <param name="sourceTable">组的明细数据源</param>
|
/// <param name="currentGroup">当前组编号</param>
|
/// <param name="allowRemoveDataRow">允许删除资料行,当拖放操作后是否删除拖放的数据源。</param>
|
public DragDropDataSourceBase(DataTable sourceTable,
|
string primaryKeyValue, bool allowRemoveDataRow)
|
{
|
_SourceTable = sourceTable;
|
_PrimaryKeyValue = primaryKeyValue;
|
_AllowRemoveDataRow = allowRemoveDataRow;
|
}
|
|
/// <summary>
|
/// 数据源对应的资料表
|
/// </summary>
|
public DataTable SourceTable
|
{
|
get => _SourceTable;
|
set => _SourceTable = value;
|
}
|
|
protected event DataSourceChanged _DataSourceChangedEvent;
|
|
/// <summary>
|
/// 添加项目到数组和资料表
|
/// </summary>
|
/// <param name="item">当前项目</param>
|
/// <returns></returns>
|
public virtual int AddToListAndTable(ItemExtend item)
|
{
|
NotifyChanged(item, DataRowState.Added);
|
return base.Add(item);
|
}
|
|
/// <summary>
|
/// 是否存在指定的对象
|
/// </summary>
|
/// <param name="item">对象</param>
|
/// <returns></returns>
|
protected virtual bool Exists(ItemExtend item)
|
{
|
foreach (ItemExtend o in this)
|
if (item.Code == o.Code)
|
return true;
|
|
return false;
|
}
|
|
/// <summary>
|
/// 获取数据表经用户修改的资料行
|
/// </summary>
|
/// <returns></returns>
|
public virtual DataTable GetChanges()
|
{
|
return _SourceTable.GetChanges();
|
}
|
|
/// <summary>
|
/// 通知客户订阅的事件
|
/// </summary>
|
/// <param name="item"></param>
|
/// <param name="state"></param>
|
public void NotifyChanged(ItemExtend item, DataRowState state)
|
{
|
if (_DataSourceChangedEvent != null)
|
_DataSourceChangedEvent(_SourceTable, item, state);
|
}
|
|
/// <summary>
|
/// 拖放操作或用户修改数据源时立即触发的事件
|
/// </summary>
|
public event DataSourceChanged OnDataSourceChanged
|
{
|
add => _DataSourceChangedEvent = value;
|
remove => _DataSourceChangedEvent = null;
|
}
|
|
/// <summary>
|
/// 删除数组的对象及资料表的记录
|
/// </summary>
|
/// <param name="obj">对象</param>
|
public override void Remove(object obj)
|
{
|
base.Remove(obj); //删除数组的对象
|
|
var item = obj as ItemExtend;
|
|
//删除新增状态的记录,直接删除记录
|
if (_AllowRemoveDataRow)
|
{
|
item.Deleted = true; //标记删除
|
NotifyChanged(item, DataRowState.Deleted);
|
}
|
}
|
}
|
|
/// <summary>
|
/// 组用户的数据源
|
/// </summary>
|
public class GroupUserDataSource : DragDropDataSourceBase
|
{
|
/// <summary>
|
/// 构造器
|
/// </summary>
|
/// <param name="sourceTable">组用户的数据表</param>
|
/// <param name="currentGroup">当前组编号</param>
|
/// <param name="allowRemoveDataRow">允许删除资料行,当拖放操作后是否删除资料表的记录行。</param>
|
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();
|
}
|
|
/// <summary>
|
/// 初始化数据源
|
/// </summary>
|
/// <param name="sourceTable">组的用户数据源</param>
|
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);
|
}
|
}
|
}
|
|
/// <summary>
|
/// 组的角色数据源
|
/// </summary>
|
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);
|
}
|
}
|
}
|
|
/// <summary>
|
/// 组的角色数据源
|
/// </summary>
|
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);
|
}
|
}
|
}
|
|
/// <summary>
|
/// 用户的临时角色数据源
|
/// </summary>
|
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);
|
//}
|
}
|
}
|
|
/// <summary>
|
/// 用户的角色扩展类
|
/// </summary>
|
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;
|
}
|
}
|
}
|