using Core.Mes.Client.Comm.Control;
using Core.Mes.Client.Comm.Server;
using Core.Mes.Client.Comm.Tool;
using CoreFS.CA06;
using Infragistics.Win.UltraWinGrid;
using Infragistics.Win.UltraWinTree;
using System;
using System.Collections;
using System.Data;
using System.Drawing;
using System.Windows.Forms;
namespace Core.StlMes.Client.Qcm
{
public partial class FrmPermissionConfigure : FrmBase
{
public FrmPermissionConfigure()
{
InitializeComponent();
ExceptionHelper.RegistException();
}
public override void ToolBar_Click(object sender, string ToolbarKey)
{
switch (ToolbarKey)
{
case "doQuery":
doQuery();
break;
case "doSave":
doSave();
break;
case "Close":
this.Close();
break;
}
}
///
/// 树节点选中事件触发时,存储父节点id,防止当父节点选中项转移到其他焦点时,无法获取数据。
///
private static string parentCode = "";
///
/// 用于修改时验证重复项
///
private static string VName = "";
///
/// 查找具体的tag
///
///
///
///
private void FindTreeNodeFromTag(TreeNode trnode, string treeTag, ref ArrayList treelist)
{
if (trnode.Tag != null && trnode.Tag.ToString() == treeTag)
{
treelist.Add(trnode);
}
foreach (TreeNode anode in trnode.Nodes)
{
FindTreeNodeFromTag(anode, treeTag, ref treelist);
}
}
///
/// 刷新操作
///
private void doQuery()
{
this.dataTable1.Clear();
DataTable dt = new DataTable();
dt = ServerHelper.GetData("com.steering.pss.qcm.CorePermissionConfigure.doQuery", new Object[] { utName.Text }, this.ob);
GridHelper.CopyDataToDatatable(ref dt, ref this.dataTable1, true);
//内容自适应
GridHelper.RefreshAndAutoSizeExceptRows(ultraGrid1, new UltraGridColumn[] {
ultraGrid1.DisplayLayout.Bands[0].Columns["REMARK"]
});
}
///
/// 刷新操作
///
private void QueryUserInfo()
{
this.dataTable2.Clear();
if (ultraGrid1.ActiveRow == null)
return;
DataTable dt = new DataTable();
dt = ServerHelper.GetData("com.steering.pss.qcm.CorePermissionConfigure.QueryUserInfo", new Object[] { ultraGrid1.ActiveRow.Cells["ID"].Text }, this.ob);
GridHelper.CopyDataToDatatable(ref dt, ref this.dataTable2, true);
GridHelper.RefreshAndAutoSize(ultraGrid2);
}
///
/// 保存
///
private void doSave()
{
if (ultraGrid1.ActiveRow == null)
{
MessageUtil.ShowTips("请选中需要保存的角色信息");
return;
}
ArrayList parm = new ArrayList();
getTreeAllInfo(treeView1.Nodes, parm);
CoreClientParam ccp = new CoreClientParam();
ccp.ServerName = "com.steering.pss.qcm.CorePermissionConfigure";
ccp.MethodName = "doSave";
ccp.ServerParams = new object[] { ultraGrid1.ActiveRow.Cells["ID"].Text, UserInfo.GetUserID(), UserInfo.GetUserName(), parm };
ccp = this.ExecuteNonQuery(ccp, CoreInvokeType.Internal);
if (ccp != null)
{
if (ccp.ReturnCode == -1)
{
MessageUtil.ShowWarning(ccp.ReturnInfo);
return;
}
}
else
{
return;
}
MessageUtil.ShowTips("保存成功");
bandTreeView();
}
public void getTreeAllInfo(TreeNodesCollection tnc, ArrayList parm)
{
foreach (UltraTreeNode node in tnc)
{
if (node.CheckedState == CheckState.Checked || node.CheckedState == CheckState.Indeterminate)
parm.Add(node.Tag);
if (node.Nodes.Count > 0)
{
getTreeAllInfo(node.Nodes, parm);
}
}
}
public void checkByList(TreeNodesCollection tnc, ArrayList parm)
{
foreach (UltraTreeNode node in tnc)
{
if (node.Nodes.Count > 0)
{
checkByList(node.Nodes, parm);
}
else
{
if (parm.Contains(node.Tag))
{
node.CheckedState = CheckState.Checked;
setparent(node);
}
}
}
}
///
/// 树控件绑定数据源
///
public void bandTreeView()
{
treeView1.Nodes.Clear();
DataTable dt = new DataTable();
dt = ServerHelper.GetData("com.steering.pss.qcm.CoreMenuzConfigure.getTreeData", new Object[] { }, this.ob);
ArrayList list = new ArrayList();
if (ultraGrid1.ActiveRow != null)
{
DataTable dt1 = new DataTable();
dt1 = ServerHelper.GetData("com.steering.pss.qcm.CorePermissionConfigure.getPageRole", new Object[] { ultraGrid1.ActiveRow.Cells["ID"].Text }, this.ob);
if (dt.Rows.Count > 0)
{
foreach (DataRow dr in dt1.Rows)
{
list.Add(dr["PAGE_ID"].ToString());
}
}
}
//树控件递归绑定方法。
Bind_Tv(dt, treeView1.Nodes, null, "PAGE_ID", "SORT_CODE", "PAGE_NAME", list);
checkByList(treeView1.Nodes, list);
}
///
/// top复选框选中事件触发,更新树控件数据源
///
///
///
private void chbx_CheckedChanged(object sender, EventArgs e)
{
if (this.Cursor == Cursors.WaitCursor) return;
//刷新功能。
try
{
this.Cursor = Cursors.WaitCursor;
bandTreeView();
}
finally
{
this.Cursor = Cursors.Default;
}
}
///
/// 绑定TreeView(利用TreeNodeCollection)
///
/// TreeNodeCollection(TreeView的节点集合)
/// 父id的值
/// 数据库 id 字段名
/// 数据库 父id 字段名
/// 数据库 文本 字段值
private void Bind_Tv(DataTable dtOld, TreeNodesCollection tnc, string pid_val, string id, string pid, string text, ArrayList list)
{
dtOld.DefaultView.Sort = id + " Asc";
DataTable dt = dtOld.DefaultView.ToTable();
DataView dv = new DataView(dt);//将DataTable存到DataView中,以便于筛选数据
UltraTreeNode tn;//建立TreeView的节点(TreeNode),以便将取出的数据添加到节点中
//以下为三元运算符,如果父id为空,则为构建“父id字段 is null”的查询条件,否则构建“父id字段=父id字段值”的查询条件
string filter = string.IsNullOrEmpty(pid_val) ? pid + " is null" : string.Format(pid + "='{0}'", pid_val);
dv.RowFilter = filter;//利用DataView将数据进行筛选,选出相同 父id值 的数据
dt.DefaultView.Sort = id + " Asc";
foreach (DataRowView drv in dv)
{
tn = new UltraTreeNode();//建立一个新节点(学名叫:一个实例)
tn.Tag = drv[id].ToString();//节点的Value值,一般为数据库的id值
tn.Text = drv[text].ToString();//节点的Text,节点的文本显示
//if (list.Contains(drv[id].ToString()))
// tn.CheckedState = CheckState.Checked;
tnc.Add(tn);//将该节点加入到TreeNodeCollection(节点集合)中
Bind_Tv(dt, tn.Nodes, tn.Tag.ToString(), id, pid, text, list);//递归(反复调用这个方法,直到把数据取完为止)
}
}
private void FrmPermissionConfigure_Load(object sender, EventArgs e)
{
bandTreeView();
}
private void ultraButton1_Click(object sender, EventArgs e)
{
doQuery();
}
private void ultraGrid1_AfterRowActivate(object sender, EventArgs e)
{
QueryUserInfo();
bandTreeView();
}
//设置标志,防止死循环
bool check = false;
//设置半勾选
int indeterFlag = 0;
int checkFlag = 0;
private void treeView1_AfterCheck(object sender, NodeEventArgs e)
{
if (check)
{
check = false;
setchild(e.TreeNode);
setparent(e.TreeNode);
}
}
//设置子节点状态
private void setchild(UltraTreeNode node)
{
foreach (UltraTreeNode child in node.Nodes)
{
child.CheckedState = node.CheckedState;
if (child.Nodes.Count > 0)
setchild(child);
}
}
//设置父节点状态
private void setparent(UltraTreeNode node)
{
if (node.Parent != null)
{
//如果当前节点状态为勾选,则需要所有兄弟节点都勾选才能勾选父节点
foreach (UltraTreeNode brother in node.Parent.Nodes)
{
if (brother.CheckedState == CheckState.Indeterminate)
indeterFlag++;
if (brother.CheckedState == CheckState.Checked)
checkFlag++;
}
if (checkFlag == 0 && indeterFlag == 0)
{
checkFlag = 0;
indeterFlag = 0;
node.Parent.CheckedState = CheckState.Unchecked;
}
else if (checkFlag == node.Parent.Nodes.Count)
{
checkFlag = 0;
indeterFlag = 0;
node.Parent.CheckedState = node.CheckedState;
}
else
{
checkFlag = 0;
indeterFlag = 0;
node.Parent.CheckedState = CheckState.Indeterminate;
}
if (node.Parent.Parent != null)
setparent(node.Parent);
}
}
private void treeView1_MouseUp(object sender, MouseEventArgs e)
{
check = true;
}
}
}