#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;
}
}
}