using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms; using DevExpress.XtraTreeList; using DevExpress.XtraTreeList.Columns; using DevExpress.XtraTreeList.ViewInfo; using Lskj.Control.Model; using Lskj.Core; using Lskj.Model; using Lskj.PubModuleDetail; namespace cs2 { public partial class Form1 : Form { public Form1() { InitializeComponent(); //DBConfig.Instance.ServerName = "221.10.118.38,9993"; //DBConfig.Instance.DataBase = "lserp_cy"; ERPInfo.Instance.UserId ="1"; DBConfig.Instance.CreateConnection(); } private void Form1_Load(object sender, EventArgs e) { try { richTextBox.ReadOnly = true; // 设置为只读模式 // 设置文本内容和超链接部分 string text = "点击https://b.vip166.com/打开示例网站,并查看更多信息。"; string url = "https://b.vip166.com/"; richTextBox.Text = text; // 在文本中插入超链接部分 int linkStart = text.IndexOf("https://b.vip166.com/"); // 查找超链接文本的位置 int linkLength = "https://b.vip166.com/".Length; // 选择文本并将其设置为超链接 richTextBox.Select(linkStart, linkLength); richTextBox.SelectionColor = System.Drawing.Color.Blue; richTextBox.SelectionFont = new System.Drawing.Font(richTextBox.Font, System.Drawing.FontStyle.Underline); // 捕获点击事件,打开网页 richTextBox.LinkClicked += RichTextBox_LinkClicked; treeList1.ColumnPanelRowHeight = 50; treeList1.Bands.AddBand("测试"); //TreeListBand treeListBand = new TreeListBand(); //treeListBand.Caption = "测试2"; // 添加列 for (int i = 1; i < 4; i++) { TreeListColumn gridColumn = new TreeListColumn(); gridColumn.FieldName = "" + i; gridColumn.Name = "" + i; gridColumn.Caption = "" + i; gridColumn.Width = 50; gridColumn.VisibleIndex = i; gridColumn.Visible = true; gridColumn.OptionsFilter.FilterPopupMode = FilterPopupMode.CheckedList; gridColumn.AppearanceHeader.TextOptions.HAlignment = DevExpress.Utils.HorzAlignment.Center; // treeListBand.Columns.Add(gridColumn); treeList1.Bands[0].Columns.Add(gridColumn); //this.treeList1.Columns.AddRange(new TreeListColumn[] { gridColumn }); } //this.treeList1.Bands.Add(treeListBand); //treeList1.Columns.AddField("Column1").Caption = "Column 1"; //treeList1.Columns.AddField("Column2").Caption = "Column 2"; //treeList1.Columns.AddField("Column3").Caption = "Column 3"; // 绑定数据 treeList1.AppendNode(new object[] { "Data1", "Data2", "Data3" }, null); treeList1.AppendNode(new object[] { "Data4", "Data5", "Data6" }, null); // 订阅 CustomDrawColumnHeader 事件 //treeList1.CustomDrawColumnHeader += TreeList1_CustomDrawColumnHeader; } catch (Exception ex) { } } private void RichTextBox_LinkClicked(object sender, LinkClickedEventArgs e) { if (e.LinkText == "https://b.vip166.com/") { System.Diagnostics.Process.Start("https://b.vip166.com/"); } } private void TreeList1_CustomDrawColumnHeader(object sender, CustomDrawColumnHeaderEventArgs e) { // 获取所有列 TreeListColumn[] columns = treeList1.Columns.ToArray(); // 遍历列,检查是否需要合并 for (int i = 0; i < columns.Length; i++) { // 获取当前列的表头名称 string currentCaption = columns[i].Caption; // 查找相邻列是否有相同名称 int mergeCount = 1; for (int j = i + 1; j < columns.Length; j++) { if (columns[j].Caption == currentCaption) mergeCount++; else break; } // 如果需要合并 if (mergeCount > 1) { // 计算合并区域的宽度 int mergedWidth = 0; for (int k = i; k < i + mergeCount; k++) { mergedWidth += columns[k].Width; } // 获取当前列的绘制区域 Rectangle mergedBounds = new Rectangle( GetColumnXPosition(columns[i]), e.Bounds.Y, mergedWidth, e.Bounds.Height ); // 绘制合并后的表头 e.Graphics.FillRectangle(Brushes.LightGray, mergedBounds); e.Graphics.DrawString(currentCaption, e.Appearance.Font, Brushes.Black, mergedBounds.X + 5, mergedBounds.Y + 5); // 跳过已合并的列 i += mergeCount - 1; } else { // 不需要合并,正常绘制 e.Graphics.FillRectangle(Brushes.LightGray, e.Bounds); e.Graphics.DrawString(currentCaption, e.Appearance.Font, Brushes.Black, e.Bounds.X + 5, e.Bounds.Y + 5); } // 阻止默认绘制 e.Handled = true; } //// 设置多表头 //if (e.Column != null) //{ // // 绘制主表头 // e.Graphics.FillRectangle(Brushes.LightGray, e.Bounds); // e.Graphics.DrawString("Main Header", e.Appearance.Font, Brushes.Black, e.Bounds.X + 5, e.Bounds.Y + 5); // // 绘制子表头 // Rectangle subHeaderBounds = new Rectangle(e.Bounds.X, e.Bounds.Y + e.Bounds.Height / 2, e.Bounds.Width, e.Bounds.Height / 2); // e.Graphics.FillRectangle(Brushes.LightBlue, subHeaderBounds); // e.Graphics.DrawString(e.Column.Caption, e.Appearance.Font, Brushes.Black, subHeaderBounds.X + 5, subHeaderBounds.Y + 5); // // 阻止默认绘制 // e.Handled = true; //} } private int GetColumnXPosition(TreeListColumn column) { //// 获取 TreeList 的视图信息 //TreeListViewInfo viewInfo = treeList1.ViewInfo; //// 遍历列的可视信息 //foreach (ColumnInfo columnInfo in viewInfo.ColumnsInfo) //{ // if (columnInfo.Column == column) // { // // 返回列的 X 轴位置 // return columnInfo.Bounds.X; // } //} // 如果未找到列,返回 -1 return -1; } private void button1_Click(object sender, EventArgs e) { //treeList1.ToExcelTreeList("单表"); treeList1.ToTreeExcel("单据"); } } }