当前位置: 首页 > news >正文

c# 基于xml文件和devexpress插件 的工作流程配置

效果如下:

屏幕录制 2025-10-28 134826

前言

c# winform 使用DevExpress制作表格:

https://blog.csdn.net/2302_76790436/article/details/151212974?spm=1011.2415.3001.10575&sharefrom=mp_manage_link

c# 读取xml文件内的数据 

https://blog.csdn.net/2302_76790436/article/details/150614884?spm=1011.2415.3001.10575&sharefrom=mp_manage_link

界面设置

主界面:

包括  按钮,文本框,和devexpress表格

namespace testProcess
{partial class Form1{/// <summary>/// 必需的设计器变量。/// </summary>private System.ComponentModel.IContainer components = null;/// <summary>/// 清理所有正在使用的资源。/// </summary>/// <param name="disposing">如果应释放托管资源,为 true;否则为 false。</param>protected override void Dispose(bool disposing){if (disposing && (components != null)){components.Dispose();}base.Dispose(disposing);}#region Windows 窗体设计器生成的代码/// <summary>/// 设计器支持所需的方法 - 不要修改/// 使用代码编辑器修改此方法的内容。/// </summary>private void InitializeComponent(){this.components = new System.ComponentModel.Container();this.button_choose = new System.Windows.Forms.Button();this.gridControl1 = new DevExpress.XtraGrid.GridControl();this.gridView1 = new DevExpress.XtraGrid.Views.Grid.GridView();this.behaviorManager1 = new DevExpress.Utils.Behaviors.BehaviorManager(this.components);this.button_Design = new System.Windows.Forms.Button();this.button_start = new System.Windows.Forms.Button();this.textBox1 = new System.Windows.Forms.TextBox();((System.ComponentModel.ISupportInitialize)(this.gridControl1)).BeginInit();((System.ComponentModel.ISupportInitialize)(this.gridView1)).BeginInit();((System.ComponentModel.ISupportInitialize)(this.behaviorManager1)).BeginInit();this.SuspendLayout();// // button_choose// this.button_choose.Location = new System.Drawing.Point(51, 3);this.button_choose.Name = "button_choose";this.button_choose.Size = new System.Drawing.Size(144, 81);this.button_choose.TabIndex = 0;this.button_choose.Text = "选择配置";this.button_choose.UseVisualStyleBackColor = true;this.button_choose.Click += new System.EventHandler(this.button_choose_Click);// // gridControl1// this.gridControl1.Location = new System.Drawing.Point(51, 101);this.gridControl1.MainView = this.gridView1;this.gridControl1.Name = "gridControl1";this.gridControl1.Size = new System.Drawing.Size(464, 300);this.gridControl1.TabIndex = 1;this.gridControl1.ViewCollection.AddRange(new DevExpress.XtraGrid.Views.Base.BaseView[] {this.gridView1});// // gridView1// this.gridView1.GridControl = this.gridControl1;this.gridView1.Name = "gridView1";this.gridView1.OptionsView.ShowGroupPanel = false;// // button_Design// this.button_Design.Location = new System.Drawing.Point(318, 3);this.button_Design.Name = "button_Design";this.button_Design.Size = new System.Drawing.Size(133, 81);this.button_Design.TabIndex = 2;this.button_Design.Text = "流程设置";this.button_Design.UseVisualStyleBackColor = true;this.button_Design.Click += new System.EventHandler(this.button_Design_Click);// // button_start// this.button_start.Location = new System.Drawing.Point(173, 452);this.button_start.Name = "button_start";this.button_start.Size = new System.Drawing.Size(198, 50);this.button_start.TabIndex = 3;this.button_start.Text = "启动";this.button_start.UseVisualStyleBackColor = true;this.button_start.Click += new System.EventHandler(this.button_start_Click);// // textBox1// this.textBox1.Location = new System.Drawing.Point(687, 101);this.textBox1.Multiline = true;this.textBox1.Name = "textBox1";this.textBox1.Size = new System.Drawing.Size(323, 300);this.textBox1.TabIndex = 4;// // Form1// this.AutoScaleDimensions = new System.Drawing.SizeF(8F, 15F);this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;this.ClientSize = new System.Drawing.Size(1079, 564);this.Controls.Add(this.textBox1);this.Controls.Add(this.button_start);this.Controls.Add(this.button_Design);this.Controls.Add(this.gridControl1);this.Controls.Add(this.button_choose);this.Name = "Form1";this.Text = "Form1";((System.ComponentModel.ISupportInitialize)(this.gridControl1)).EndInit();((System.ComponentModel.ISupportInitialize)(this.gridView1)).EndInit();((System.ComponentModel.ISupportInitialize)(this.behaviorManager1)).EndInit();this.ResumeLayout(false);this.PerformLayout();}#endregionprivate System.Windows.Forms.Button button_choose;private DevExpress.XtraGrid.GridControl gridControl1;private DevExpress.XtraGrid.Views.Grid.GridView gridView1;private DevExpress.Utils.Behaviors.BehaviorManager behaviorManager1;private System.Windows.Forms.Button button_Design;private System.Windows.Forms.Button button_start;private System.Windows.Forms.TextBox textBox1;}
}

配置流程界面:

表格,按钮

namespace testProcess
{partial class designprocess{/// <summary>/// Required designer variable./// </summary>private System.ComponentModel.IContainer components = null;/// <summary>/// Clean up any resources being used./// </summary>/// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>protected override void Dispose(bool disposing){if (disposing && (components != null)){components.Dispose();}base.Dispose(disposing);}#region Windows Form Designer generated code/// <summary>/// Required method for Designer support - do not modify/// the contents of this method with the code editor./// </summary>private void InitializeComponent(){this.gridControl1 = new DevExpress.XtraGrid.GridControl();this.gridView1 = new DevExpress.XtraGrid.Views.Grid.GridView();this.button_save = new System.Windows.Forms.Button();((System.ComponentModel.ISupportInitialize)(this.gridControl1)).BeginInit();((System.ComponentModel.ISupportInitialize)(this.gridView1)).BeginInit();this.SuspendLayout();// // gridControl1// this.gridControl1.Location = new System.Drawing.Point(238, 30);this.gridControl1.MainView = this.gridView1;this.gridControl1.Name = "gridControl1";this.gridControl1.Size = new System.Drawing.Size(436, 310);this.gridControl1.TabIndex = 0;this.gridControl1.ViewCollection.AddRange(new DevExpress.XtraGrid.Views.Base.BaseView[] {this.gridView1});// // gridView1// this.gridView1.GridControl = this.gridControl1;this.gridView1.Name = "gridView1";this.gridView1.OptionsView.ShowGroupPanel = false;// // button_save// this.button_save.Location = new System.Drawing.Point(362, 390);this.button_save.Name = "button_save";this.button_save.Size = new System.Drawing.Size(177, 67);this.button_save.TabIndex = 1;this.button_save.Text = "导出配置";this.button_save.UseVisualStyleBackColor = true;this.button_save.Click += new System.EventHandler(this.button_save_Click);// // designprocess// this.AutoScaleDimensions = new System.Drawing.SizeF(8F, 15F);this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;this.ClientSize = new System.Drawing.Size(870, 512);this.Controls.Add(this.button_save);this.Controls.Add(this.gridControl1);this.Name = "designprocess";this.Text = "Form2";((System.ComponentModel.ISupportInitialize)(this.gridControl1)).EndInit();((System.ComponentModel.ISupportInitialize)(this.gridView1)).EndInit();this.ResumeLayout(false);}#endregionprivate DevExpress.XtraGrid.GridControl gridControl1;private DevExpress.XtraGrid.Views.Grid.GridView gridView1;private System.Windows.Forms.Button button_save;}
}

重命名窗口:

实现

数据格式:

    //构造xml数据格式
    public class ProjectParams
    {
        public string Name { get; set; }
        public List<Process> Processes { get; set; } = new List<Process>();
    }

    public class Process
    {
        public string Name { get; set; }
        public string DisplayText { get; set; }
    }

每个项目ProjectParams有 一个Name 和 多个Processes,

其中Processes中有Name和 DisplayText

xml文件的内容示例:

在配置流程界面中添加右键菜单

        private void GridView1_PopupMenuShowing(object sender, DevExpress.XtraGrid.Views.Grid.PopupMenuShowingEventArgs e)
        {
            if (e.HitInfo.InRow)
            {
                _rightClickedRowHandle = e.HitInfo.RowHandle;
                e.Menu.Items.Clear();

                // 创建右键菜单项
                DevExpress.Utils.Menu.DXMenuItem menuItem;

                menuItem = new DevExpress.Utils.Menu.DXMenuItem("添加市场调研", 添加市场调研ToolStripMenuItem_Click);
                e.Menu.Items.Add(menuItem);

                menuItem = new DevExpress.Utils.Menu.DXMenuItem("添加产品设计", 添加产品设计ToolStripMenuItem_Click);
                e.Menu.Items.Add(menuItem);

                menuItem = new DevExpress.Utils.Menu.DXMenuItem("添加营销推广", 添加营销推广ToolStripMenuItem_Click);
                e.Menu.Items.Add(menuItem);

                menuItem = new DevExpress.Utils.Menu.DXMenuItem("添加主持会议", 添加主持会议ToolStripMenuItem_Click);
                e.Menu.Items.Add(menuItem);

                menuItem = new DevExpress.Utils.Menu.DXMenuItem("添加产线升级", 添加产线升级ToolStripMenuItem_Click);
                e.Menu.Items.Add(menuItem);

                e.Menu.Items.Add(new DevExpress.Utils.Menu.DXMenuItem("-"));

                // 添加删除流程菜单项
                menuItem = new DevExpress.Utils.Menu.DXMenuItem("删除流程", 删除流程ToolStripMenuItem_Click);
                e.Menu.Items.Add(menuItem);

                e.Menu.Items.Add(new DevExpress.Utils.Menu.DXMenuItem("-"));

                menuItem = new DevExpress.Utils.Menu.DXMenuItem("重命名项目", 重命名ToolStripMenuItem_Click);
                e.Menu.Items.Add(menuItem);
            }
        }

完成表格的绘制后,转换为xml

        private void ExportToXml(string filePath)
        {
            try
            {
                XElement root = new XElement("root");

                // 按项目名称分组
                var projects = dataTable.AsEnumerable()
                    .GroupBy(row => new
                    {
                        ProjectName = row.Field<string>("项目名称"),
    
                    });

                foreach (var projectGroup in projects)
                {
                    XElement projectElement = new XElement("Project",
                        new XAttribute("name", projectGroup.Key.ProjectName)
                        );

                    foreach (var row in projectGroup)
                    {
                        string processName = row.Field<string>("项目流程");
                        string displayText = GetDisplayTextByProcessName(processName);

                        XElement processElement = new XElement("process",
                            new XAttribute("name", processName));

                        XElement paramElement = new XElement("param",
                            new XAttribute("name", "text"),
                            new XAttribute("value", displayText));

                        processElement.Add(paramElement);
                        projectElement.Add(processElement);
                    }

                    root.Add(projectElement);
                }

                XDocument doc = new XDocument(root);
                doc.Save(filePath);
            }
            catch (Exception ex)
            {
                MessageBox.Show($"导出XML失败: {ex.Message}", "错误", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
        }
 

相应的,主界面中加载xml,并绘制表格:

        //加载XML文件并显示在gridControl1
        private void LoadXmlFile(string filePath)
        {
            try
            {
                projects.Clear(); // 清空现有项目列表

                XDocument doc = XDocument.Load(filePath);

                // 初始化DataTable
                DataTable dataTable = new DataTable();
                dataTable.Columns.Add("项目名称");
                dataTable.Columns.Add("流程名称");

                foreach (var projectElement in doc.Root.Elements("Project"))
                {
                    string projectName = projectElement.Attribute("name")?.Value;

                    var project = new ProjectParams
                    {
                        Name = projectName,
                    };

                    foreach (var processElement in projectElement.Elements("process"))
                    {
                        string processName = processElement.Attribute("name")?.Value;
                        string displayText = processElement.Element("param")?.Attribute("value")?.Value;

                        project.Processes.Add(new Process
                        {
                            Name = processName,
                            DisplayText = displayText
                        });

                        // 添加到DataTable
                        dataTable.Rows.Add(projectName, processName);
                    }

                    projects.Add(project);
                }

                gridControl1.DataSource = dataTable;

                // 强制生成列
                gridView1.PopulateColumns();

                // 现在再设置合并单元格
                gridView1.OptionsView.AllowCellMerge = true;
                gridView1.Columns["项目名称"].OptionsColumn.AllowMerge = DevExpress.Utils.DefaultBoolean.True;
                gridView1.Columns["流程名称"].OptionsColumn.AllowMerge = DevExpress.Utils.DefaultBoolean.False;

                gridView1.BestFitColumns();

                MessageBox.Show($"成功加载配置文件,共 {projects.Count} 个项目", "成功",
                    MessageBoxButtons.OK, MessageBoxIcon.Information);
            }
            catch (Exception ex)
            {
                MessageBox.Show($"加载XML文件失败: {ex.Message}", "错误",
                    MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
        }

完整代码

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.Xml.Linq;
using System.IO;
using System.Threading;namespace testProcess
{public partial class Form1 : Form{public static string newname;string filePath;private List<ProjectParams> projects = new List<ProjectParams>();public Form1(){InitializeComponent();}//设置流程private void button_Design_Click(object sender, EventArgs e){designprocess designprocess1 = new designprocess();designprocess1.ShowDialog();}//选择并加载流程配置文件xmlprivate void button_choose_Click(object sender, EventArgs e){//选择xml文件using (OpenFileDialog openFileDialog = new OpenFileDialog()){openFileDialog.Filter = "XML文件|*.xml|所有文件|*.*";openFileDialog.Title = "选择流程配置文件";if (openFileDialog.ShowDialog() == DialogResult.OK){filePath = openFileDialog.FileName;LoadXmlFile(filePath);}}}//加载XML文件并显示在gridControl1private void LoadXmlFile(string filePath){try{projects.Clear(); // 清空现有项目列表XDocument doc = XDocument.Load(filePath);// 初始化DataTableDataTable dataTable = new DataTable();dataTable.Columns.Add("项目名称");dataTable.Columns.Add("流程名称");foreach (var projectElement in doc.Root.Elements("Project")){string projectName = projectElement.Attribute("name")?.Value;var project = new ProjectParams{Name = projectName,};foreach (var processElement in projectElement.Elements("process")){string processName = processElement.Attribute("name")?.Value;string displayText = processElement.Element("param")?.Attribute("value")?.Value;project.Processes.Add(new Process{Name = processName,DisplayText = displayText});// 添加到DataTabledataTable.Rows.Add(projectName, processName);}projects.Add(project);}gridControl1.DataSource = dataTable;// 强制生成列gridView1.PopulateColumns();// 现在再设置合并单元格gridView1.OptionsView.AllowCellMerge = true;gridView1.Columns["项目名称"].OptionsColumn.AllowMerge = DevExpress.Utils.DefaultBoolean.True;gridView1.Columns["流程名称"].OptionsColumn.AllowMerge = DevExpress.Utils.DefaultBoolean.False;gridView1.BestFitColumns();MessageBox.Show($"成功加载配置文件,共 {projects.Count} 个项目", "成功",MessageBoxButtons.OK, MessageBoxIcon.Information);}catch (Exception ex){MessageBox.Show($"加载XML文件失败: {ex.Message}", "错误",MessageBoxButtons.OK, MessageBoxIcon.Error);}}//根据流程配置.xml,运行各项private void button_start_Click(object sender, EventArgs e){if (projects.Count == 0){MessageBox.Show("请先选择流程配置文件", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information);return;}textBox1.Clear();textBox1.AppendText("开始执行流程:" + "\r\n");textBox1.AppendText("====================" + "\r\n");foreach (var project in projects){textBox1.AppendText($"项目: {project.Name}" + "\r\n");foreach (var process in project.Processes){textBox1.AppendText($"  → {process.DisplayText}" + "\r\n");// 这里可以添加实际的业务逻辑Thread.Sleep(1000);Application.DoEvents(); // 让UI能够更新}textBox1.AppendText("\r\n");}textBox1.AppendText("所有流程执行完成!" + "\r\n");}}//构造xml数据格式public class ProjectParams{public string Name { get; set; }public List<Process> Processes { get; set; } = new List<Process>();}public class Process{public string Name { get; set; }public string DisplayText { get; set; }}public static class GlobalVariables{public static string newname { get; set; } = "项目1";}
}

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.Xml.Linq;
using System.IO;namespace testProcess
{public partial class designprocess : Form{private DataTable dataTable;private int _rightClickedRowHandle = -1;public designprocess(){InitializeComponent();Load += Initialize_gridControl;// 绑定右键菜单事件gridView1.PopupMenuShowing += GridView1_PopupMenuShowing;gridView1.MouseDown += GridView1_MouseDown;}private void GridView1_MouseDown(object sender, MouseEventArgs e){if (e.Button == MouseButtons.Right){var hitInfo = gridView1.CalcHitInfo(e.Location);if (hitInfo.InRow){_rightClickedRowHandle = hitInfo.RowHandle;}}}private void GridView1_PopupMenuShowing(object sender, DevExpress.XtraGrid.Views.Grid.PopupMenuShowingEventArgs e){if (e.HitInfo.InRow){_rightClickedRowHandle = e.HitInfo.RowHandle;e.Menu.Items.Clear();// 创建右键菜单项DevExpress.Utils.Menu.DXMenuItem menuItem;menuItem = new DevExpress.Utils.Menu.DXMenuItem("添加市场调研", 添加市场调研ToolStripMenuItem_Click);e.Menu.Items.Add(menuItem);menuItem = new DevExpress.Utils.Menu.DXMenuItem("添加产品设计", 添加产品设计ToolStripMenuItem_Click);e.Menu.Items.Add(menuItem);menuItem = new DevExpress.Utils.Menu.DXMenuItem("添加营销推广", 添加营销推广ToolStripMenuItem_Click);e.Menu.Items.Add(menuItem);menuItem = new DevExpress.Utils.Menu.DXMenuItem("添加主持会议", 添加主持会议ToolStripMenuItem_Click);e.Menu.Items.Add(menuItem);menuItem = new DevExpress.Utils.Menu.DXMenuItem("添加产线升级", 添加产线升级ToolStripMenuItem_Click);e.Menu.Items.Add(menuItem);e.Menu.Items.Add(new DevExpress.Utils.Menu.DXMenuItem("-"));// 添加删除流程菜单项menuItem = new DevExpress.Utils.Menu.DXMenuItem("删除流程", 删除流程ToolStripMenuItem_Click);e.Menu.Items.Add(menuItem);e.Menu.Items.Add(new DevExpress.Utils.Menu.DXMenuItem("-"));menuItem = new DevExpress.Utils.Menu.DXMenuItem("重命名项目", 重命名ToolStripMenuItem_Click);e.Menu.Items.Add(menuItem);}}//根据选择,导出配置文件xmlprivate void button_save_Click(object sender, EventArgs e){using (SaveFileDialog saveFileDialog = new SaveFileDialog()){saveFileDialog.Filter = "XML文件|*.xml";saveFileDialog.Title = "导出流程配置";if (saveFileDialog.ShowDialog() == DialogResult.OK){ExportToXml(saveFileDialog.FileName);this.Close();}}}private void ExportToXml(string filePath){try{XElement root = new XElement("root");// 按项目名称分组var projects = dataTable.AsEnumerable().GroupBy(row => new{ProjectName = row.Field<string>("项目名称"),});foreach (var projectGroup in projects){XElement projectElement = new XElement("Project",new XAttribute("name", projectGroup.Key.ProjectName));foreach (var row in projectGroup){string processName = row.Field<string>("项目流程");string displayText = GetDisplayTextByProcessName(processName);XElement processElement = new XElement("process",new XAttribute("name", processName));XElement paramElement = new XElement("param",new XAttribute("name", "text"),new XAttribute("value", displayText));processElement.Add(paramElement);projectElement.Add(processElement);}root.Add(projectElement);}XDocument doc = new XDocument(root);doc.Save(filePath);}catch (Exception ex){MessageBox.Show($"导出XML失败: {ex.Message}", "错误", MessageBoxButtons.OK, MessageBoxIcon.Error);}}// 根据流程名称获取显示文本private string GetDisplayTextByProcessName(string processName){switch (processName){case "市场调研": return "开始市场调研";case "产品设计": return "开始产品设计";case "营销推广": return "开始营销推广";case "主持会议": return "开始主持会议";case "产线升级": return "开始产线升级";default: return $"开始{processName}";}}//初始化表格private void Initialize_gridControl(object sender, EventArgs e){gridView1.Columns.Clear();dataTable = new DataTable();dataTable.Columns.Add("项目名称");dataTable.Columns.Add("项目流程");dataTable.Columns.Add("显示文本"); // 新增列用于存储显示文本// 添加示例数据dataTable.Rows.Add("项目1", "市场调研", "开始市场调研");dataTable.Rows.Add("项目1", "营销推广", "开始营销推广");gridControl1.DataSource = dataTable;// 设置合并单元格 - 只合并项目名称列gridView1.OptionsView.AllowCellMerge = true;gridView1.Columns["项目名称"].OptionsColumn.AllowMerge = DevExpress.Utils.DefaultBoolean.True;gridView1.Columns["项目流程"].OptionsColumn.AllowMerge = DevExpress.Utils.DefaultBoolean.False;gridView1.Columns["显示文本"].OptionsColumn.AllowMerge = DevExpress.Utils.DefaultBoolean.False;// 隐藏显示文本列gridView1.Columns["显示文本"].Visible = false;gridView1.BestFitColumns();}#region 右键菜单事件处理// 删除流程功能private void 删除流程ToolStripMenuItem_Click(object sender, EventArgs e){if (_rightClickedRowHandle >= 0 && _rightClickedRowHandle < gridView1.RowCount){DataRow clickedRow = gridView1.GetDataRow(_rightClickedRowHandle);if (clickedRow != null){string projectName = clickedRow.Field<string>("项目名称");string processName = clickedRow.Field<string>("项目流程");// 确认删除DialogResult result = MessageBox.Show($"确定要删除项目 '{projectName}' 中的流程 '{processName}' 吗?","确认删除",MessageBoxButtons.YesNo,MessageBoxIcon.Question);if (result == DialogResult.Yes){// 获取当前项目的所有行var projectRows = dataTable.AsEnumerable().Where(row => row.Field<string>("项目名称") == projectName).ToList();// 如果要删除的行是当前项目的唯一流程,则提示不能删除if (projectRows.Count <= 1){MessageBox.Show("每个项目必须至少保留一个流程!", "提示",MessageBoxButtons.OK, MessageBoxIcon.Warning);return;}// 删除行dataTable.Rows.Remove(clickedRow);gridControl1.RefreshDataSource();MessageBox.Show("流程删除成功!", "成功",MessageBoxButtons.OK, MessageBoxIcon.Information);}}}}private void AddProcess(string processName, string displayText){if (_rightClickedRowHandle >= 0 && _rightClickedRowHandle < gridView1.RowCount){DataRow clickedRow = gridView1.GetDataRow(_rightClickedRowHandle);if (clickedRow != null){string projectName = clickedRow.Field<string>("项目名称");// 找到当前项目的最后一行var projectRows = dataTable.AsEnumerable().Where(row => row.Field<string>("项目名称") == projectName).ToList();int insertIndex;if (projectRows.Count > 0){// 在项目的最后一行之后插入DataRow lastRow = projectRows[projectRows.Count - 1];insertIndex = dataTable.Rows.IndexOf(lastRow) + 1;}else{// 如果项目没有行(理论上不会发生),在最后插入insertIndex = dataTable.Rows.Count;}// 创建新行DataRow newRow = dataTable.NewRow();newRow["项目名称"] = projectName;newRow["项目流程"] = processName;newRow["显示文本"] = displayText;// 在正确位置插入新行dataTable.Rows.InsertAt(newRow, insertIndex);gridControl1.RefreshDataSource();}}}private void 添加市场调研ToolStripMenuItem_Click(object sender, EventArgs e){AddProcess("市场调研", "开始市场调研");}private void 添加产品设计ToolStripMenuItem_Click(object sender, EventArgs e){AddProcess("产品设计", "开始产品设计");}private void 添加营销推广ToolStripMenuItem_Click(object sender, EventArgs e){AddProcess("营销推广", "开始营销推广");}private void 添加主持会议ToolStripMenuItem_Click(object sender, EventArgs e){AddProcess("主持会议", "开始主持会议");}private void 添加产线升级ToolStripMenuItem_Click(object sender, EventArgs e){AddProcess("产线升级", "开始产线升级");}private void 重命名ToolStripMenuItem_Click(object sender, EventArgs e){rename rename1 = new rename();rename1.ShowDialog();if (_rightClickedRowHandle >= 0){DataRow clickedRow = gridView1.GetDataRow(_rightClickedRowHandle);if (clickedRow != null){string currentName = clickedRow.Field<string>("项目名称");string newName = GlobalVariables.newname;if (!string.IsNullOrEmpty(newName) && newName != currentName){// 更新同一项目的所有行的项目名称foreach (DataRow row in dataTable.Rows){if (row.Field<string>("项目名称") == currentName){row["项目名称"] = newName;}}gridControl1.RefreshDataSource();}}}}#endregion}
}

运行后:

http://www.dtcms.com/a/539943.html

相关文章:

  • 【四川政务服务网-注册安全分析报告】
  • 基于海思AI ISP视频编解码IPC平台的算法承载方案
  • C语言入门(十二):函数的递归
  • 建设银行的网站模板下载免费网站
  • 小型企业网站设计教程app软件开发技术pdf百度云
  • uniapp安卓端+ fastapi(后端)获取到设备的ip
  • hardhat 搭建智能合约
  • 【开题答辩实录分享】以《智慧校园勤工俭学信息管理系统的设计与实现》为例进行答辩实录分享
  • Elasticsearch安装与配置全指南
  • BIM引擎中火焰模拟
  • SPI NOR Flash 家族的常见存储结构
  • billu_b0x 靶机渗透测试
  • RPA 如何成为 AI 智能体的落地引擎
  • 快递比价寄件系统技术解析:基于PHP+Vue+小程序的高效聚合配送解决方案
  • 巢湖市重点工程建设管理局网站易企秀网站怎么做轮播图
  • 免费画图网站微信公众官网登录入口
  • SAP SD借贷项凭证创建接口分享
  • uniapp(2)自定义tabbar
  • 技术实践:在基于 RISC-V 的 ESP32 上运行 MQTT over QUIC
  • 【Linux】编辑器vim的使用和理解gcc编译器
  • uniapp如何集成第三方库
  • 易灵思FPGA的RISC-V核操作函数
  • BOTA发布新一代力觉核心:Gen A六维力矩传感器,为下一代机器人研发,注入精准感知
  • 180课时吃透Go语言游戏后端开发14:map类型
  • AWS × Caddy:一键部署多站点反向代理 + 负载均衡网关(Terraform + ECS Fargate)
  • 外贸电子商务网站jcms内容管理系统
  • 做外贸哪些网站可以发免费信息线上课程怎么做
  • [无人机sdk] CameraModule | GimbalModule
  • 无人机桥梁巡检:以“空天地”智慧之力守护交通生命线
  • 【代码随想录算法训练营——Day51】图论——99.计数孤岛、100.最大岛屿的面积