프로젝트

일반

사용자정보

통계
| 브랜치(Branch): | 개정판:

hytos / ID2.Manager / ID2.Manager.Compare / Main.cs @ 54be6611

이력 | 보기 | 이력해설 | 다운로드 (21.5 KB)

1
using System;
2
using System.Collections.Generic;
3
using System.ComponentModel;
4
using System.Data;
5
using System.Drawing;
6
using System.Linq;
7
using System.Text;
8
using System.Threading.Tasks;
9
using System.Windows.Forms;
10

    
11
using System.IO;
12
using System.Reflection;
13
using System.Diagnostics;
14

    
15
using ID2.Manager.Controls;
16
using ID2.Manager.Classes;
17

    
18
using Telerik.WinControls;
19
using Telerik.WinControls.UI;
20

    
21
namespace ID2.Manager
22
{
23
    public partial class Main : RadRibbonForm
24
    {
25
        protected override CreateParams CreateParams
26
        {
27
            get
28
            {
29
                CreateParams cp = base.CreateParams;
30
                cp.ExStyle |= 0x02000000;
31
                return cp;
32
            }
33
        }
34

    
35
//#if DEBUG
36
//        Telerik.WinControls.RadControlSpy.RadControlSpyForm radControlSpyForm = new Telerik.WinControls.RadControlSpy.RadControlSpyForm();
37
//#endif
38
        private readonly Color _SummaryColor = Color.FromArgb(255, 108, 55);
39

    
40
        public Main()
41
        {
42
            InitializeComponent();
43
            var verification = new Controls.Verification(this.radProgressBarElement) { Dock = DockStyle.Fill };
44
            this.LayoutValidation.Controls.Add(verification);
45
            this.DockMainTabStrip.Select();
46

    
47
            var appDataPath = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData), Application.ProductName);
48

    
49
            if (!Directory.Exists(appDataPath))
50
            {
51
                Directory.CreateDirectory(appDataPath);
52
            }
53

    
54
            #region 테마 설정
55
            this.radMenuItemControlDefault.Click += RadMenuItemTheme_Click;
56
            this.radMenuItemOffice2013Dark.Click += RadMenuItemTheme_Click;
57
            this.radMenuItemTelerikMetro.Click += RadMenuItemTheme_Click;
58
            this.radMenuItemVisualStudio2012Dark.Click += RadMenuItemTheme_Click;
59
            this.radMenuItemVisualStudio2012Light.Click += RadMenuItemTheme_Click;
60
            this.radMenuItemWindows8.Click += RadMenuItemTheme_Click;
61
            #endregion
62

    
63
            this.Initialize();
64
        }
65

    
66
        /// <summary>
67
        /// 사용자가 선택한 테마를 적용한다.
68
        /// </summary>
69
        /// <param name="sender"></param>
70
        /// <param name="e"></param>
71
        private void RadMenuItemTheme_Click(object sender, EventArgs e)
72
        {
73
            string theme = (sender as RadMenuItem).Text;
74
            if(theme != this.radDropDownButtonElementTheme.Text)
75
            {
76
                this.radDropDownButtonElementTheme.Text = theme;
77
                Classes.ID2Helper.IniWriteValue(Program.IniFilePath, "App", "Theme", theme);
78
                if (!string.IsNullOrEmpty(theme))
79
                {
80
                    Telerik.WinControls.ThemeResolutionService.ApplicationThemeName = theme;
81
                    Program.ThemeName = theme;
82
                }
83
            }
84
        }
85

    
86
        #region Init, Load
87
        private void Initialize()
88
        {
89
            this.ID2ManagerRadRibbonBar.Expanded = false;
90
        }
91

    
92
        protected override void OnLoad(EventArgs e)
93
        {
94
            try
95
            {
96
                this.Text = $"ID2.Manager.Compare - V {Application.ProductVersion}";
97

    
98
                #region 테마를 읽어 적용
99
                string theme = Classes.ID2Helper.IniReadValue(Program.IniFilePath, "App", "Theme");
100
                if (!string.IsNullOrEmpty(theme))
101
                {
102
                    Telerik.WinControls.ThemeResolutionService.ApplicationThemeName = theme;
103
                    Program.ThemeName = theme;
104
                }
105
                #endregion
106

    
107
                this.radDropDownButtonElementTheme.Text = Program.ThemeName;
108
                this.radBrowseEditorAutoCADFolder.ValueChanged += RadBrowseEditorAutoCADFolder_ValueChanged;
109
                this.radBrowseEditorAVEVAFolder.ValueChanged += RadBrowseEditorAVEVAFolder_ValueChanged;
110
                this.radGridViewDocument.DataBindingComplete += RadGridViewDocument_DataBindingComplete;
111
                this.radGridViewDocument.ViewRowFormatting += RadGridViewDocument_ViewRowFormatting;
112
                this.radButtonElementCompare.Click += RadButtonElementCompare_Click;
113
                this.radButtonElementConfiguration.Click += RadButtonElementConfiguration_Click;
114

    
115
                this.radButtonElementRefreshCommand.Click += RadButtonElementRefreshCommand_Click;
116

    
117
                Program.AutoCADFolder = Classes.ID2Helper.IniReadValue(Program.IniFilePath, "Path", "AutoCAD Folder");
118
                if (!string.IsNullOrEmpty(Program.AutoCADFolder)) this.radBrowseEditorAutoCADFolder.Value = Program.AutoCADFolder;
119

    
120
                Program.AVEVAPIDFolder = Classes.ID2Helper.IniReadValue(Program.IniFilePath, "Path", "AVEVA P&ID Folder");
121
                if (!string.IsNullOrEmpty(Program.AVEVAPIDFolder)) this.radBrowseEditorAVEVAFolder.Value = Program.AVEVAPIDFolder;
122

    
123
                this.radGridViewDocument.SelectionChanged += RadGridViewDocument_SelectionChanged;
124
            }
125
            catch (Exception ex)
126
            {
127
                Program.logger.Error($"An exception occurred from {MethodBase.GetCurrentMethod().Name}", ex);
128
                RadMessageBox.Show("Failed to load project.", Application.ProductName, MessageBoxButtons.OK, RadMessageIcon.Error);
129
            }
130

    
131
            base.OnLoad(e);
132
        }
133

    
134
        private void RadGridViewDocument_SelectionChanged(object sender, EventArgs e)
135
        {
136
            if (this.radGridViewDocument.SelectedRows.Any() && this.radGridViewDocument.SelectedRows[0].DataBoundItem is Document doc)
137
            {
138
                this.Cursor = Cursors.WaitCursor;
139
                try
140
                {
141
                    var verification = this.LayoutValidation.Controls[0] as Controls.Verification;
142
                    verification.CompareDrawings(new List<Document>() { doc });
143
                }
144
                finally
145
                {
146
                    this.Cursor = Cursors.Default;
147
                }
148
            }
149
        }
150

    
151
        /// <summary>
152
        /// 도면 리스트를 갱신한다.
153
        /// </summary>
154
        /// <param name="sender"></param>
155
        /// <param name="e"></param>
156
        private void RadButtonElementRefreshCommand_Click(object sender, EventArgs e)
157
        {
158
            try
159
            {
160
                this.Cursor = Cursors.WaitCursor;
161

    
162
                var AutoCADFiles = Directory.GetFiles(Program.AutoCADFolder, "*.dwg");
163
                var AVEVAFiles = Directory.GetFiles(Program.AVEVAPIDFolder, "*.dwg");
164

    
165
                MakeDocumentList(AutoCADFiles, AVEVAFiles);
166
            }
167
            finally
168
            {
169
                this.Cursor = Cursors.Default;
170
            }
171
        }
172

    
173
        /// <summary>
174
        /// 환경 설정 창을 띄운다.
175
        /// </summary>
176
        /// <param name="sender"></param>
177
        /// <param name="e"></param>
178
        private void RadButtonElementConfiguration_Click(object sender, EventArgs e)
179
        {
180
            using (var frm = new Forms.ExceptLayer())
181
            {
182
                if (DialogResult.OK == frm.ShowDialog(this))
183
                {
184
                    string ExceptLayers = string.Join(",", Forms.ExceptLayer.ExceptLayers.Select(x => x.Name));
185
                    Classes.ID2Helper.IniWriteValue(Program.IniFilePath, "Verification", "Except Layers", ExceptLayers);
186

    
187
                    string ExceptLayersVisible = string.Join(",", Forms.ExceptLayer.ExceptLayers.Select(x => x.Visible));
188
                    Classes.ID2Helper.IniWriteValue(Program.IniFilePath, "Verification", "Except Layers Visible", ExceptLayersVisible);
189

    
190
                    string LineLayers = string.Join(",", Forms.ExceptLayer.LineLayers.Select(x => x.Name));
191
                    Classes.ID2Helper.IniWriteValue(Program.IniFilePath, "Verification", "Line Layers", LineLayers);
192

    
193
                    Classes.ID2Helper.IniWriteValue(Program.IniFilePath, "Verification", "Length Tolerance Ratio", 
194
                        Forms.ExceptLayer.LengthToleranceRatio.ToString());
195

    
196
                    Classes.ID2Helper.IniWriteValue(Program.IniFilePath, "Verification", "Arrow Max Length",
197
                        Forms.ExceptLayer.ArrowMaxLength.ToString());
198
                }
199
            }
200
        }
201

    
202
        private void RadButtonElementCompare_Click(object sender, EventArgs e)
203
        {
204
            try
205
            {
206
                this.Cursor = Cursors.WaitCursor;
207

    
208
                var docs = this.radGridViewDocument.Rows.Where(x => (x.DataBoundItem is Document doc) && doc.Checked).
209
                    Select(x => (x.DataBoundItem as Document)).ToList();
210
                var verification = this.LayoutValidation.Controls[0] as Controls.Verification;
211
                verification.CompareDrawings(docs, true);
212
            }
213
            finally
214
            {
215
                this.Cursor = Cursors.Default;
216
            }
217
        }
218

    
219
        private void RadGridViewDocument_ViewRowFormatting(object sender, RowFormattingEventArgs e)
220
        {
221
            if(e.RowElement is GridRowElement)
222
            {
223
                if (e.RowElement.RowInfo.DataBoundItem is Document doc)
224
                {
225
                    if (!doc.IsValid)
226
                    {
227
                        e.RowElement.ForeColor = Color.Gray;
228
                        e.RowElement.Font = Program.UnmatchedFont;
229
                    }
230
                    else
231
                    {
232
                        e.RowElement.ResetValue(LightVisualElement.ForeColorProperty, ValueResetFlags.Local);
233
                        e.RowElement.Font = Program.MatchedFont;
234
                    }
235
                }
236
            }
237
            else
238
            {
239
                e.RowElement.ResetValue(LightVisualElement.ForeColorProperty, ValueResetFlags.Local);
240
                e.RowElement.ResetValue(LightVisualElement.FontProperty, ValueResetFlags.Local);
241
            }
242
        }
243

    
244
        private void RadGridViewDocument_DataBindingComplete(object sender, GridViewBindingCompleteEventArgs e)
245
        {
246
            radGridViewDocument.BestFitColumns();
247
        }
248

    
249
        private void RadBrowseEditorAVEVAFolder_ValueChanged(object sender, EventArgs e)
250
        {
251
            if(Directory.Exists(this.radBrowseEditorAVEVAFolder.Value))
252
            {
253
                Program.AVEVAPIDFolder = this.radBrowseEditorAVEVAFolder.Value;
254
                Classes.ID2Helper.IniWriteValue(Program.IniFilePath, "Path", "AVEVA P&ID Folder", Program.AVEVAPIDFolder);
255

    
256
                var AVEVAFiles = Directory.GetFiles(Program.AVEVAPIDFolder, "*.dwg");
257

    
258
                var AutoCADFiles = new List<string>();
259
                if (Directory.Exists(this.radBrowseEditorAutoCADFolder.Value))
260
                {
261
                    AutoCADFiles.AddRange(Directory.GetFiles(this.radBrowseEditorAutoCADFolder.Value, "*.dwg"));
262
                }
263

    
264
                MakeDocumentList(AutoCADFiles, AVEVAFiles);
265
            }
266
        }
267

    
268
        private void RadBrowseEditorAutoCADFolder_ValueChanged(object sender, EventArgs e)
269
        {
270
            if (Directory.Exists(this.radBrowseEditorAutoCADFolder.Value))
271
            {
272
                Program.AutoCADFolder = this.radBrowseEditorAutoCADFolder.Value;
273
                Classes.ID2Helper.IniWriteValue(Program.IniFilePath, "Path", "AutoCAD Folder", Program.AutoCADFolder);
274

    
275
                var AutoCADFiles = Directory.GetFiles(Program.AutoCADFolder, "*.dwg");
276

    
277
                var AVEVAFiles = new List<string>();
278
                if (Directory.Exists(this.radBrowseEditorAVEVAFolder.Value))
279
                {
280
                    AVEVAFiles.AddRange(Directory.GetFiles(this.radBrowseEditorAVEVAFolder.Value, "*.dwg"));
281
                }
282

    
283
                MakeDocumentList(AutoCADFiles, AVEVAFiles);
284
            }
285
        }
286

    
287
        private void MakeDocumentList(IList<string> AutoCADFiles, IList<string> AVEVAFiles)
288
        {
289
            radGridViewDocument.DataSource = null;
290

    
291
            Program.Documents.Clear();
292
            AutoCADFiles.ForAll(x => Program.Documents.Add(new Document(Path.GetFileNameWithoutExtension(x).ToUpper()) { AutoCADFileName = Path.GetFileNameWithoutExtension(x).ToUpper()}));
293

    
294
            var addings = new List<Document>();
295
            foreach(var file in AVEVAFiles)
296
            {
297
                string FileName = Path.GetFileNameWithoutExtension(file).ToUpper();
298
                var doc = Program.Documents.Find(x => x.AutoCADFileName == FileName);
299
                if(doc != null)
300
                {
301
                    doc.AVEVAFileName = FileName;
302
                }
303
                else
304
                {
305
                    addings.Add(new Document(FileName) { AVEVAFileName = FileName });
306
                }
307
            }
308

    
309
            addings.ForAll(x => Program.Documents.Add(x));
310

    
311
            radGridViewDocument.DataSource = Program.Documents;
312
        }
313
        #endregion
314

    
315
        private void RadDropDownList_SelectedIndexChanged(object sender, Telerik.WinControls.UI.Data.PositionChangedEventArgs e)
316
        {
317
            if (sender is RadDropDownList ddl)
318
            {
319
                if (ddl.SelectedValue != null)
320
                {
321
                    if (string.IsNullOrEmpty(ddl.SelectedValue.ToString()))
322
                    {
323
                        ddl.BackColor = Color.White;
324
                        ddl.ForeColor = Color.Black;
325
                        ddl.Font = new Font("Segoe UI", 8.25F, FontStyle.Regular);
326
                    }
327
                    else
328
                    {
329
                        ddl.BackColor = Color.DarkSlateBlue;
330
                        ddl.ForeColor = Color.Yellow;
331
                        ddl.Font = new Font("Segoe UI", 8.25F, FontStyle.Bold);
332
                    }
333
                }
334
            }
335
        }
336

    
337
        private void RadTextBoxDocumentNo_KeyUp(object sender, KeyEventArgs e)
338
        {
339
            if (sender is RadTextBox txtBox)
340
            {
341
                if (txtBox.Text.Length > 0)
342
                {
343
                    txtBox.BackColor = Color.DarkSlateBlue;
344
                    txtBox.ForeColor = Color.Yellow;
345
                    txtBox.Font = new Font("Segoe UI", 8.25F, FontStyle.Bold);
346
                }
347
                else
348
                {
349
                    txtBox.BackColor = Color.White;
350
                    txtBox.ForeColor = Color.Black;
351
                    txtBox.Font = new Font("Segoe UI", 8.25F, FontStyle.Regular);
352
                }
353
            }
354
        }
355

    
356
        /*
357
        private void GetCheckedList()
358
        {
359
            RadGridView grid = this.radGridViewDocuments;
360

    
361
            //var checkers = grid.Rows.Where(x =>
362
            //{
363
            //    return x.Cells["Checked"].Value != null && Convert.ToBoolean(x.Cells["Checked"].Value);
364
            //}).Select(x => x.DataBoundItem as Documents).ToList();
365

    
366
            //var viewRows = new Queue<GridViewRowInfo>(this.radGridViewDocuments.MasterTemplate.DataView.Where(x => x.Cells["spq");
367
            var viewRows = grid.MasterTemplate.DataView;
368

    
369
            var checkers = viewRows.Where(x =>
370
            {
371
                return x.Cells["Checked"].Value != null && Convert.ToBoolean(x.Cells["Checked"].Value);
372
            }).ToList();
373

    
374
            var rows = new GridViewDataRowInfo[checkers.Count];
375
            checkers.CopyTo(rows, 0);
376

    
377
            if (rows.Length > 0)
378
            {
379
                grid.BeginUpdate();
380

    
381
                int nLoop = 0;
382
                rows.ForAll(x =>
383
                {
384
                    grid.Rows.Remove(rows[nLoop]);
385
                    nLoop++;
386
                });
387

    
388
                grid.EndUpdate();
389
            }
390

    
391

    
392
            //grid.Rows.re grid.Rows.ToList().Intersect(checkers)
393

    
394

    
395
            //RadMessageBox.Show($"{checkers.Count()}", Globals.Name, MessageBoxButtons.OK, RadMessageIcon.Info);
396
            //RadMessageBox.Show($"{this.documents.Count}", Globals.Name, MessageBoxButtons.OK, RadMessageIcon.Info);
397
            this.lbSelectAndTotal.Text = $"{grid.MasterTemplate.DataView.Count} / {this.TotalCount} (Selected / Total)";
398
        }
399
        */
400

    
401
        #region ColumnGroup
402
        private void InitColumnGroupsViewDefinition(RadGridView gridView)
403
        {
404
            ColumnGroupsViewDefinition columnGroupsView = new ColumnGroupsViewDefinition();
405

    
406
            List<string> chkColNames = new List<string>() { "Checked" };
407

    
408
            List<string> docLinkColNames = new List<string>() { "AutoCADLink", "ID2Connection", "PDFLink", "MarkupLink", "AVEVALink", "Compare" };
409
            List<string> docInfoColNames = new List<string>() { "RefProjectCode", "System", "SubSystemCode", "DocumentNo", "PersonInCharge", "Worker", "AVEVAPersonInCharge", "AVEVAWorker", "JobLevel", "RevisonNo" };
410
            List<string> rvToColNames = new List<string>() { "ToIsDiscussion", "ToRemarks", "ToCreator", "ToCapture" };
411
            List<string> rvFrColNames = new List<string>() { "FrReviewStatus", "FrRemarks", "FrCreator", "FrCapture" };
412
            List<string> wkID2ColNames = new List<string>() { "ID2StartDate", "ID2EndDate", "ID2Status", "ID2Issues", "ID2Capture", "ReplyModifications", "ReplyRequester" };
413
            List<string> wkAVEVAColNames = new List<string>() { "IsConvert", "AVEVAConvertDate", "AVEVAWorkDate", "AVEVAStatus", "AVEVAIssues" };
414
            List<string> valProdColNames = new List<string>() { "AVEVAReviewDate", "ProdReviewer", "ProdIsResult", "ProdRemarks" };
415
            List<string> valCntColNames = new List<string>() { "ClientReviewer", "ClientIsResult", "ClientRemarks" };
416
            List<string> dtColNames = new List<string>() { "DTIsGateWay", "DTIsImport", "DTIsRegSystem", "DTRemarks" };
417

    
418
            //체크
419
            GridViewColumnGroup chkColGrp = new GridViewColumnGroup("√") { IsPinned = true };
420
            GridViewColumnGroupRow chkColGrpRow = new GridViewColumnGroupRow();
421
            chkColGrpRow.ColumnNames.AddRange(chkColNames);
422
            chkColGrp.Rows.Add(chkColGrpRow);
423

    
424
            //도면
425
            GridViewColumnGroup docColGrp = new GridViewColumnGroup("도면 ");
426
            GridViewColumnGroup docLinkColGrp = new GridViewColumnGroup("프로그램 연동");
427
            GridViewColumnGroup docInfoColGrp = new GridViewColumnGroup("도면정보");
428

    
429
            GridViewColumnGroupRow docLinkColGrpRow = new GridViewColumnGroupRow();
430
            docLinkColGrpRow.ColumnNames.AddRange(docLinkColNames);
431

    
432
            GridViewColumnGroupRow docInfoColGrpRow = new GridViewColumnGroupRow();
433
            docInfoColGrpRow.ColumnNames.AddRange(docInfoColNames);
434

    
435
            docLinkColGrp.Rows.Add(docLinkColGrpRow);
436
            docColGrp.Groups.Add(docLinkColGrp);
437
            docInfoColGrp.Rows.Add(docInfoColGrpRow);
438
            docColGrp.Groups.Add(docInfoColGrp);
439

    
440
            //검토
441
            GridViewColumnGroup rvColGrp = new GridViewColumnGroup("검토", "review");
442
            GridViewColumnGroup rvToColGrp = new GridViewColumnGroup("도프텍");
443
            GridViewColumnGroup rvFrColGrp = new GridViewColumnGroup("삼성");
444

    
445
            GridViewColumnGroupRow rvToColGrpRow = new GridViewColumnGroupRow();
446
            rvToColGrpRow.ColumnNames.AddRange(rvToColNames);
447

    
448
            GridViewColumnGroupRow rvFrColGrpRow = new GridViewColumnGroupRow();
449
            rvFrColGrpRow.ColumnNames.AddRange(rvFrColNames);
450

    
451
            rvToColGrp.Rows.Add(rvToColGrpRow);
452
            rvFrColGrp.Rows.Add(rvFrColGrpRow);
453

    
454
            rvColGrp.Groups.Add(rvToColGrp);
455
            rvColGrp.Groups.Add(rvFrColGrp);
456

    
457
            //작업
458
            GridViewColumnGroup wkColGrp = new GridViewColumnGroup("작업", "work");
459
            GridViewColumnGroup wkID2ColGrp = new GridViewColumnGroup("ID2");
460
            GridViewColumnGroup wkAVEVAColGrp = new GridViewColumnGroup("AVEVA");
461

    
462
            GridViewColumnGroupRow wkID2ColGrpRow = new GridViewColumnGroupRow();
463
            wkID2ColGrpRow.ColumnNames.AddRange(wkID2ColNames);
464

    
465
            GridViewColumnGroupRow wkAVEVAColGrpRow = new GridViewColumnGroupRow();
466
            wkAVEVAColGrpRow.ColumnNames.AddRange(wkAVEVAColNames);
467

    
468
            wkID2ColGrp.Rows.Add(wkID2ColGrpRow);
469
            wkAVEVAColGrp.Rows.Add(wkAVEVAColGrpRow);
470

    
471
            wkColGrp.Groups.Add(wkID2ColGrp);
472
            wkColGrp.Groups.Add(wkAVEVAColGrp);
473

    
474
            //Validation
475
            GridViewColumnGroup valColGrp = new GridViewColumnGroup("Validation", "validation");
476
            GridViewColumnGroup valProdColGrp = new GridViewColumnGroup("도프텍");
477
            GridViewColumnGroup valCntColGrp = new GridViewColumnGroup("삼성전자");
478

    
479
            GridViewColumnGroupRow valProdColGrpRow = new GridViewColumnGroupRow();
480
            valProdColGrpRow.ColumnNames.AddRange(valProdColNames);
481

    
482
            GridViewColumnGroupRow valCntColGrpRow = new GridViewColumnGroupRow();
483
            valCntColGrpRow.ColumnNames.AddRange(valCntColNames);
484

    
485
            valProdColGrp.Rows.Add(valProdColGrpRow);
486
            valCntColGrp.Rows.Add(valCntColGrpRow);
487

    
488
            valColGrp.Groups.Add(valProdColGrp);
489
            valColGrp.Groups.Add(valCntColGrp);
490

    
491
            //AVEVA Net
492
            GridViewColumnGroup dtColGrp = new GridViewColumnGroup("AVEVA Net\n(Digital Twin)", "avevanet");
493

    
494
            GridViewColumnGroupRow dtColGrpRow = new GridViewColumnGroupRow();
495
            dtColGrpRow.ColumnNames.AddRange(dtColNames);
496

    
497
            dtColGrp.Rows.Add(dtColGrpRow);
498

    
499
            //Group 추가
500
            columnGroupsView.ColumnGroups.Add(chkColGrp);
501
            columnGroupsView.ColumnGroups.Add(docColGrp);
502
            columnGroupsView.ColumnGroups.Add(wkColGrp);
503
            columnGroupsView.ColumnGroups.Add(rvColGrp);
504
            columnGroupsView.ColumnGroups.Add(valColGrp);
505
            columnGroupsView.ColumnGroups.Add(dtColGrp);
506

    
507
            gridView.MasterTemplate.ViewDefinition = columnGroupsView;
508
        }
509
        #endregion
510
    }
511
}
512

    
513
public class FilterColumn
514
{
515
    public string Name { get; set; }
516
    public string FieldName { get; set; }
517
    public bool IsSelect { get; set; }
518
}
클립보드 이미지 추가 (최대 크기: 500 MB)