using DevExpress.XtraTreeList.Nodes;
|
using DevExpress.XtraTreeList;
|
using Gs.DevApp.Entity;
|
using Gs.DevApp.ToolBox;
|
using Newtonsoft.Json;
|
using System;
|
using System.Collections.Generic;
|
using System.Drawing;
|
using System.Text;
|
using System.Windows.Forms;
|
|
namespace Gs.DevApp.DevFrm.QC
|
{
|
public partial class DefectCode : DevExpress.XtraEditors.XtraUserControl
|
{
|
string _webServiceName = "MesDefectCodeManager/";
|
List<FilterEntity> _filterList = new List<FilterEntity>();
|
|
public string strType = "";//类别(普通信息,认证信息)
|
/// <summary>
|
/// DefectCode类的构造函数
|
/// </summary>
|
/// <param name="_strType">传入的类型参数(如"QC基础资料",用于标识数据类别)</param>
|
public DefectCode(string _strType)
|
{
|
// 1. 初始化控件布局(设计器自动生成的方法,设置控件位置、大小等)
|
InitializeComponent();
|
// 将传入的类型参数赋值给类的成员变量(后续逻辑中使用)
|
strType = _strType;
|
|
// 2. 绑定工具栏按钮事件(加载、查询)
|
// 绑定"加载"按钮点击事件:点击后触发 ToolBarMenu1_btnLoadClick 方法
|
toolBarMenu1.btnLoadClick += ToolBarMenu1_btnLoadClick;
|
// 绑定"查询"按钮点击事件:点击后触发 ToolBarMenu1_btnQueryClick 方法
|
this.toolBarMenu1.btnQueryClick += ToolBarMenu1_btnQueryClick;
|
|
|
// 3. 配置树形列表(tlMenu)的序号列样式
|
// 设置树形列表的"序号列"宽度为50像素
|
tlMenu.IndicatorWidth = 50;
|
// 绑定"自定义绘制序号列"事件:自定义序号显示逻辑
|
tlMenu.CustomDrawNodeIndicator += (s, ee) =>
|
{
|
// 判断当前绘制的是"序号列"
|
if (ee.IsNodeIndicator)
|
{
|
// 获取当前节点在可见列表中的索引(从0开始)
|
var index = ee.Node.TreeList.GetVisibleIndexByNode(ee.Node);
|
// 序号显示为"索引+1"(从1开始计数)
|
ee.Info.DisplayText = (index + 1).ToString();
|
}
|
};
|
|
|
// 4. 初始加载第一页数据
|
getPageList(1);
|
|
|
// 5. 绑定树形列表鼠标点击事件(后续可在 TlMenu_MouseDown 中处理点击逻辑)
|
this.tlMenu.MouseDown += TlMenu_MouseDown;
|
|
|
// 6. 绑定"添加子节点"菜单按钮事件(右键菜单或工具栏按钮)
|
this.toolStripMenuItemAdd.Click += (s, ee) =>
|
{
|
// 初始化节点ID(新增节点暂未生成ID,为空)
|
string strGuid = "";
|
// 父节点ID:如果选中了某个节点,则以该节点为父节点;否则父节点为空(顶级节点)
|
string strUpGuid = "";
|
if (tlMenu.FocusedNode != null)
|
{
|
// 获取选中节点的"guid"字段值,作为新节点的父ID
|
strUpGuid = tlMenu.FocusedNode.GetValue("guid").ToString();
|
}
|
|
// 打开新增节点的弹窗(参数:节点ID、父节点ID、数据类型)
|
Frm_MesDefectCodeShow frm = new Frm_MesDefectCodeShow(strGuid, strUpGuid, strType);
|
// 绑定弹窗的"更新父控件"事件:弹窗关闭后刷新当前页面数据
|
frm.UpdateParent += (s2, ee2) =>
|
{
|
getPageList(1); // 重新加载第一页数据
|
};
|
// 以模态窗口显示弹窗(阻塞当前界面,直到弹窗关闭)
|
frm.ShowDialog();
|
};
|
|
|
// 7. 绑定"添加根节点"菜单按钮事件
|
this.toolStripMenuItemRoot.Click += (s, ee) =>
|
{
|
// 新增根节点:节点ID和父节点ID均为空(无父节点)
|
string strGuid = "";
|
string strUpGuid = "";
|
// 打开新增弹窗(明确添加根节点,父ID为空)
|
Frm_MesDefectCodeShow frm = new Frm_MesDefectCodeShow(strGuid, strUpGuid, strType);
|
// 弹窗关闭后刷新数据
|
frm.UpdateParent += (s2, ee2) =>
|
{
|
getPageList(1);
|
};
|
frm.ShowDialog();
|
};
|
|
|
// 8. 绑定"删除节点"菜单按钮事件
|
this.toolStripMenuItemDel.Click += (s, ee) =>
|
{
|
// 判断是否选中了节点(未选中则提示)
|
if (tlMenu.FocusedNode != null)
|
{
|
// 获取选中节点的ID和名称(用于删除确认)
|
string rowGuid = "";
|
string rowName = "";
|
rowGuid = tlMenu.FocusedNode.GetValue("guid").ToString();
|
rowName = tlMenu.FocusedNode.GetValue("defectName").ToString();
|
|
// 节点ID为空时提示(异常情况处理)
|
if (string.IsNullOrEmpty(rowGuid))
|
{
|
ToolBox.MsgHelper.Warning("请先选择你要操作的行!");
|
return;
|
}
|
|
// 弹出确认框:提示用户是否删除选中的节点
|
if (!MsgHelper.AskQuestion("你选择了【" + rowName + "】,确定删除吗?"))
|
return; // 用户取消删除,直接返回
|
|
// 准备删除参数:将节点ID存入列表(适配接口参数格式)
|
List<dynamic> lst = new List<dynamic>();
|
lst.Add(rowGuid);
|
var _obj = lst;
|
|
try
|
{
|
// 调用WebService接口删除节点(POST请求,传入节点ID列表)
|
string strJson = UtilityHelper.HttpPost("", _webServiceName + "DeleteModel", JsonConvert.SerializeObject(_obj));
|
// 解析接口返回结果
|
ReturnModel<dynamic> _rtn = ToolBox.UtilityHelper.ReturnToDynamic(strJson);
|
|
// 接口返回成功(rtnCode>0):从树形列表中移除该节点
|
if (_rtn.rtnCode > 0)
|
{
|
tlMenu.DeleteNode(tlMenu.FocusedNode);
|
}
|
// 接口返回失败:提示错误信息
|
else
|
ToolBox.MsgHelper.Warning("提示:" + _rtn.rtnMsg);
|
}
|
// 捕获异常(如网络错误、接口报错)并提示
|
catch (Exception ex)
|
{
|
ToolBox.MsgHelper.Warning("提示:" + ex.Message);
|
}
|
}
|
};
|
|
|
// 9. 绑定"编辑节点"菜单按钮事件
|
this.toolStripMenuItemEdt.Click += (s, ee) =>
|
{
|
// 节点ID:选中节点的ID(用于回显数据)
|
string strGuid = "";
|
// 父节点ID:选中节点的父ID(编辑时保持父节点不变)
|
string strUpGuid = "";
|
if (tlMenu.FocusedNode != null)
|
{
|
strGuid = tlMenu.FocusedNode.GetValue("guid").ToString();
|
strUpGuid = tlMenu.FocusedNode.GetValue("pid").ToString();
|
}
|
|
// 打开编辑弹窗(参数:节点ID、父节点ID、数据类型)
|
Frm_MesDefectCodeShow frm = new Frm_MesDefectCodeShow(strGuid, strUpGuid, strType);
|
// 弹窗关闭后刷新当前页面数据
|
frm.UpdateParent += (s2, ee2) =>
|
{
|
getPageList(1);
|
};
|
frm.ShowDialog();
|
};
|
}
|
/// <summary>
|
/// 右键弹出菜单,如果是行,增加子项目,否则增加主项
|
/// </summary>
|
/// <param name="sender"></param>
|
/// <param name="e"></param>
|
private void TlMenu_MouseDown(object sender, MouseEventArgs e)
|
{
|
if (e.Button == MouseButtons.Right)
|
{
|
TreeListHitInfo hInfo = tlMenu.CalcHitInfo(new Point(e.X, e.Y));
|
TreeListNode node = hInfo.Node;
|
tlMenu.FocusedNode = node;
|
if (hInfo.HitInfoType == HitInfoType.Cell ||
|
hInfo.HitInfoType == HitInfoType.Row ||
|
hInfo.HitInfoType == HitInfoType.RowIndent ||
|
hInfo.HitInfoType == HitInfoType.RowIndicator
|
)
|
{
|
if (node != null)
|
{
|
toolStripMenuItemAdd.Visible = true;
|
toolStripMenuItemEdt.Visible = true;
|
toolStripMenuItemDel.Visible = true;
|
toolStripMenuItemRoot.Visible = false;
|
cms1.Show(tlMenu, e.Location);
|
}
|
}
|
else
|
{
|
toolStripMenuItemAdd.Visible = false;
|
toolStripMenuItemEdt.Visible = false;
|
toolStripMenuItemDel.Visible = false;
|
toolStripMenuItemRoot.Visible = true;
|
cms1.Show(tlMenu, e.Location);
|
}
|
}
|
}
|
|
|
/// <summary>
|
/// 查询事件
|
/// </summary>
|
/// <param name="sender"></param>
|
/// <param name="e"></param>
|
private void ToolBarMenu1_btnQueryClick(object sender, EventArgs e)
|
{
|
Gs.DevApp.ToolBox.MsgHelper.ShowInformation("该窗体不支持查询,若想更新页面,请点击 刷新");
|
}
|
|
/// <summary>
|
/// 刷新事件
|
/// </summary>
|
/// <param name="sender"></param>
|
/// <param name="e"></param>
|
private void ToolBarMenu1_btnLoadClick(object sender, EventArgs e)
|
{
|
_filterList.Clear();
|
getPageList(1);
|
}
|
/// <summary>
|
///
|
/// </summary>
|
/// <param name="curPage">第几页</param>
|
/// <param name="pageSize">每页几条</param>
|
private void getPageList(int curPage)
|
{
|
System.Text.StringBuilder sbWhere = new StringBuilder();
|
sbWhere.Append(" and a.defect_sort='" + strType + "'");
|
var pgq = new PageQueryModel(1, 999999, "a.defect_code ", "asc","", sbWhere.ToString());
|
var json = JsonConvert.SerializeObject(pgq);
|
try
|
{
|
var strReturn =
|
UtilityHelper.HttpPost("", _webServiceName + "GetListPage", json);
|
var dd = UtilityHelper.ReturnToTablePage(strReturn);
|
var dt = dd.rtnData.list;
|
tlMenu.DataSource = dt;
|
tlMenu.KeyFieldName = "guid";
|
tlMenu.ParentFieldName = "pid";
|
tlMenu.EndUpdate();
|
//this.tlMenu.CollapseAll();
|
// this.tlMenu.ExpandAll();
|
this.tlMenu.ExpandToLevel(0);
|
}
|
catch (Exception ex)
|
{
|
MsgHelper.Warning("提示:" + ex.Message);
|
}
|
}
|
|
|
}
|
}
|