tangxu
2024-10-22 4d9fe5ed98ceb6b8fe9dc52ebfb80860ad1aee99
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using static DPumpHydr.WinFrmUI.WenSkin.Controls.WenDataTextBox;
 
namespace DPumpHydr.WinFrmUI.WenSkin.Controls
{
    public class WenDataGridViewEdit : WenControl
    {
        public WenDataGridViewEdit() : base()
        {
            Size = new System.Drawing.Size(400, 300);
            wenDataGridView = new WenDataGridView()
            {
                Dock = DockStyle.Fill,
                AllowUserToAddRows = false,
                AllowUserToDeleteRows = false,
                ReadOnly = true
            };
            wenDataTextBox = new WenDataTextBox()
            {
                Dock = DockStyle.Top,
                Height = 80,
            };
            this.Controls.Add(WenDataGridView);
            this.Controls.Add(WenDataTextBox);
        }
 
        #region 私有属性
        private readonly WenDataGridView wenDataGridView;
        private readonly WenDataTextBox wenDataTextBox;
        private WenDataGridViewColumnCollection columns;
        #endregion
 
        #region 公有属性
 
        public WenDataGridView WenDataGridView => wenDataGridView;
        public WenDataTextBox WenDataTextBox=>wenDataTextBox;
 
        [Category("Wen"), Description("增加列"), DefaultValue(false)]
        [DesignerSerializationVisibility(DesignerSerializationVisibility.Content)]
        public WenDataGridViewColumnCollection Columns => columns ??= new WenDataGridViewColumnCollection(this, this.WenDataGridView);
 
        [Category("Wen"), Description("列头高度"), DefaultValue(false)]
        public int TopHeight { get => WenDataTextBox.Height; set => WenDataTextBox.Height = value; }
 
        #endregion
 
        #region 类
 
        public class WenDataGridViewColumn : DataGridViewColumn  
        {
            public WenDataGridViewColumn():base()
            {
            }
 
            public WenDataGridViewColumn(DataGridViewCell cellTemplate) : base(cellTemplate)
            {
            }
 
            [Category("Wen"), Description("是否增加编辑项"), DefaultValue(false)]
            public bool Edit { get; set; } = false;
 
            [Category("Wen"), Description("是否主键"), DefaultValue(false)]
            public bool Identity { get; set; } = false;
        }
 
        public class WenDataGridViewColumnCollection : DataGridViewColumnCollection
        {
            private WenDataGridViewEdit owner;
            public WenDataGridViewColumnCollection(WenDataGridViewEdit owner,WenDataGridView wenDataGridView) : base(wenDataGridView)
            {
                this.owner = owner;
            }
 
            public new WenDataGridViewColumn this[int index] => base[index] as WenDataGridViewColumn;
            public new WenDataGridViewColumn this[string str] => base[str] as WenDataGridViewColumn;
            public override int Add(DataGridViewColumn column)
            {
                AddTextBox(column);
                return base.Add(column);
            }
            public override int Add(string columnName, string headerText)
            {
                return base.Add(columnName, headerText);
            }
            public override void AddRange(params DataGridViewColumn[] dataGridViewColumns)
            {
                foreach (var item in dataGridViewColumns)
                {
                    AddTextBox(item);
                }
                base.AddRange(dataGridViewColumns);
            }
            public override void Clear()
            {
                owner.WenDataTextBox.Items.Clear();
                base.Clear();
            }
 
            private void AddTextBox(DataGridViewColumn column)
            {
                if (column is WenDataGridViewColumn wen && wen.Edit)
                {
                    owner.WenDataTextBox.Items.Add(new WenDataTextBoxColumnText()
                    {
                        TextLable = wen.HeaderText,
                        ColumnName = wen.DataPropertyName,
                        Identity = wen.Identity
                    });
                }
            }
        }
        #endregion
    }
}