2023.03.14(clsAPanelControlExt)

SaGo_MunGcci·2023년 3월 14일
0

업무 프로젝트

목록 보기
19/29

해당 화면에서 위와같이 선언해주자.

using AMIS3.HM.ZZ.ZZLIB003.Mvc;
using AMIS3.HM.ZZ.ZZLIB003.Mvc.Exceptions;
using AMIS3.HM.ZZ.ZZLIB003.Mvc.Utils;
using AMIS3.HM.ZZ.ZZLIB003.Mvc.Validation;
using AMIS3.UIFramework.DataModel;
using AMIS3.UIFramework.UI.Controls;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Reflection;
using System.Windows.Forms;
using AMIS3.UIFramework.FxExtension;
using static AMIS3.HM.ZZ.ZZLIB003.Controls.clsEnumExt;

namespace AMIS3.HM.ZZ.ZZLIB003.Controls
{

    public static class clsAPanelControlExt
    {
        /// <summary>
        /// 패널 초기화
        /// </summary>
        /// <param name="p"></param>
        /// <history>[2019.07.09 김민철]컨트롤 종류 추가 NumericUpDown</history>
        /// <history>[2019.09.19 김동훈]DtpDatePicker 초기화시 빈문자열로 초기화 되도록 변경, 
        /// 값을 준상태로 초기화할경우는 Dto 또는 Model의 생성자에서 기본값을 세팅하여 Initialize 대신 panel.setData(dto)를 사용하도록 한다.
        /// </history>
        public static void Initialize(this APanelControl panel)
        {
            if (panel.Tag is PanelOption)
            {
                (panel.Tag as PanelOption).Data = null;
            }

            List<Control> list = new List<Control>();
            FindControls(ref list, panel);

            foreach (Control control in list)
            {
                if (control is ATextEdit)
                {
                    (control as ATextEdit).Initialize();
                }else if(control is AMemoEdit)                 // 2022.11.04 오은진 추가 
                {
                    (control as AMemoEdit).Initialize();
                }else if(control is ADateEdit)                 // 2022.11.04 오은진추가
                {
                    (control as ADateEdit).Initialize();
                }
                else if (control is AComboBox)
                {
                    (control as AComboBox).Initialize();
                }
                else if (control is ACheckEdit)
                {
                    (control as ACheckEdit).Initialize();
                }
                else if (control is ARadioGroup)
                {
                    (control as ARadioGroup).Initialize();
                }
                else if (control is ARichTextBox)
                {
                    (control as ARichTextBox).Initialize();
                }
                else if (control is ALabelControl)
                {
                    if ((control as ALabelControl).AutoSize == false)
                    {
                        (control as ALabelControl).Appearance.TextOptions.HAlignment = DevExpress.Utils.HorzAlignment.Center;
                        (control as ALabelControl).Appearance.TextOptions.VAlignment = DevExpress.Utils.VertAlignment.Center;
                    }
                }
            }
        }

        /// <summary>
        /// 패널 안의 컨트롤 엔터키 바인딩
        /// </summary>
        /// <param name="panel"></param>
        public static void SetEnterKey(this Panel panel)
        {
            List<Control> list = new List<Control>();
            FindControls(ref list, panel);

            foreach (Control control in list)
            {
                if (control is AMemoEdit)
                {
                    (control as AMemoEdit).KeyDown -= PanelExt_KeyDown;
                    (control as AMemoEdit).KeyDown += PanelExt_KeyDown;
                }
                else if (control is AComboBox)
                {
                    (control as AComboBox).KeyDown -= PanelExt_KeyDown;
                    (control as AComboBox).KeyDown += PanelExt_KeyDown;
                }
            }
        }

        public static SearchParameter GetParameters(this APanelControl panel)
        {
            List<Control> list = new List<Control>();
            FindControls(ref list, panel);

            SearchParameter parameter = new SearchParameter();
            foreach (Control control in list)
            {
                if (control is AComboBox)
                {
                    parameter.Add((control.Tag as ComboBoxOption).DataField, GetControlValue(control));
                }
                else
                {
                    if (!control.Tag.IsNullOrEmpty())
                    {
                        parameter.Add(control.Tag.ToString(), GetControlValue(control));
                    }
                }
            }

            return parameter;
        }


        /// <summary>
        /// 컨트롤 찾기
        /// </summary>
        /// <param name="list"></param>
        /// <param name="control"></param>
        private static void FindControls(ref List<Control> list, Control control)
        {
            foreach (Control item in control.Controls)
            {
                if (item.HasChildren)
                {
                    if (item is ATextEdit || item is AMemoEdit || item is AComboBox || item is ADateEdit)
                    {
                        //ATextEdit는 컨테이너로 인식하지만 그대로 쓴다.
                        list.Add(item);
                    }
                    else
                    {
                        FindControls(ref list, item);
                    }
                }
                else
                {
                    list.Add(item);
                }
            }
        }

        private static void PanelExt_KeyDown(object sender, KeyEventArgs e)
        {
            if (e.KeyCode == Keys.Enter)
            {
                SendKeys.Send("{TAB}");
            }
        }

        public static void SetControl(this APanelControl pnl)
        {
            List<Control> list = new List<Control>();

            FindControlsEx(ref list, pnl);
            SetControlEvent(list);

        }

        private static void SetControlEvent(List<Control> list)
        {
            foreach (Control item in list)
            {
                if (item is ACheckEdit)
                {
                    (item as ACheckEdit).CheckedChanged -= CheckEdit_CheckChanged;
                    (item as ACheckEdit).CheckedChanged += CheckEdit_CheckChanged;
                }
            }
        }

        private static void CheckEdit_CheckChanged(object sender, EventArgs e)
        {
            if (((ACheckEdit)sender).Checked)
            {
                ((ACheckEdit)sender).ForeColor = Color.Blue;
            }
            else
            {
                ((ACheckEdit)sender).ForeColor = Color.Black;
            }
        }

        private static void FindControlsEx(ref List<Control> list, APanelControl pnl)
        {
            foreach (Control item in pnl.Controls)
            {
                if (item.HasChildren)
                {
                    if (item is ATextEdit || item is AMemoEdit || item is AComboBox || item is ADateEdit)
                    {
                        //ATextEdit는 컨테이너로 인식하지만 그대로 쓴다.
                        list.Add(item);
                    }
                    else
                    {
                        FindControls(ref list, item);
                    }
                }
                else
                {
                    list.Add(item);
                }
            }
        }

        /// <summary>
        /// 데이터 바인딩
        /// </summary>
        /// <param name="panel"></param>
        /// <param name="data"></param>
        /// <returns></returns>
        public static void SetData(this APanelControl panel, object data)
        {
            if (panel.Tag is PanelOption)
            {
                (panel.Tag as PanelOption).Data = data;
            }
            else
            {
                panel.Tag = new PanelOption { Data = data };
            }

            List<Control> list = new List<Control>();
            FindControls(ref list, panel);
            SetControlDataBind(list, data);
        }

        /// <summary>
        /// 데이터 바인딩 RowBase
        /// </summary>
        /// <param name="panel">최상위 대상 panel</param>
        /// <param name="argDT">서비스단에서 불러온 DataTable</param>
        /// <param name="strTagKey">불러온 DataTable에서 컨트롤에 달려있는 Tag값들이 속하는 Column명</param>
        /// <param name="strValKey">불러온 DataTable에서 컨트롤에 세팅할 Value값들이 속하는 Column명</param>
        public static void SetData(this APanelControl panel, DataTable argDT, string strTagKey, string strValKey)
        {
            List<Control> list = new List<Control>();
            FindControls(ref list, panel);
            SetControlDataBind(list, argDT, strTagKey, strValKey);
        }

        public static void SetDataBinding(this APanelControl panel, object data)
        {
            if (panel.Tag is PanelOption)
            {
                (panel.Tag as PanelOption).Data = data;
            }
            else
            {
                panel.Tag = new PanelOption { Data = data };
            }

            List<Control> list = new List<Control>();
            FindControls(ref list, panel);
            SetControlDataBinding(list, data);
        }

        /// <summary>
        /// 
        /// </summary>
        /// <typeparam name="T"></typeparam>
        /// <param name="panel"></param>
        /// <returns></returns>
        public static T GetData<T>(this APanelControl panel) where T : new()
        {
            T t = new T();

            if (panel.Tag is PanelOption)
            {
                if ((panel.Tag as PanelOption).Data != null)
                {
                    t = (T)(panel.Tag as PanelOption).Data;
                }
            }

            List<Control> list = new List<Control>();
            FindControls(ref list, panel);

            return GetData<T>(list, t);
        }

        public static void GetData(this APanelControl panel, ref DataTable svDt, string argTagNm, string argValNm)
        {
            FindTagValInControls(ref svDt, panel, argTagNm, argValNm);
        }

        private static void FindTagValInControls(ref DataTable svDt, Control panel, string argTagNm, string argValNm)
        {
            DataRow newRow = null;

            foreach (Control item in panel.Controls)
            {
                if (item.HasChildren)
                {
                    if (item is ATextEdit)
                    {
                        //ATextEdit는 컨테이너로 인식하지만 그대로 쓴다.
                        if (!item.Tag.IsNullOrEmpty())
                        {
                            newRow = svDt.NewRow();
                            newRow[argTagNm] = item.Tag.ToString();
                            newRow[argValNm] = (item as ATextEdit).GetValue();

                            svDt.Rows.Add(newRow);
                        }
                    }
                    else if (item is AMemoEdit)
                    {
                        if (!item.Tag.IsNullOrEmpty())
                        {
                            newRow = svDt.NewRow();
                            newRow[argTagNm] = item.Tag.ToString();
                            newRow[argValNm] = (item as AMemoEdit).GetValue();

                            svDt.Rows.Add(newRow);
                        }
                    }
                    else if (item is AComboBox)
                    {
                        if (!item.Tag.IsNullOrEmpty())
                        {
                            newRow = svDt.NewRow();
                            newRow[argTagNm] = item.Tag.ToString();
                            newRow[argValNm] = (item as AComboBox).GetValue();

                            svDt.Rows.Add(newRow);
                        }
                    }
                    else if (item is ADateEdit)
                    {
                        if (!item.Tag.IsNullOrEmpty())
                        {
                            newRow = svDt.NewRow();
                            newRow[argTagNm] = item.Tag.ToString();
                            newRow[argValNm] = (item as ADateEdit).GetValue();

                            svDt.Rows.Add(newRow);
                        }
                    }
                    else
                    {
                        FindTagValInControls(ref svDt, item, argTagNm, argValNm);
                    }
                }
                else
                {
                    if (!item.Tag.IsNullOrEmpty())
                    {
                        newRow = svDt.NewRow();
                        newRow[argTagNm] = item.Tag.To<string>();

                        if (item is ACheckEdit)
                        {
                            newRow[argValNm] = (item as ACheckEdit).GetValue();
                        }
                        
                        else if (item is ARadioGroup)
                        {
                            newRow[argValNm] = (item as ARadioGroup).GetValue();
                        }
                        else if (item is ARichTextBox)
                        {
                            newRow[argValNm] = (item as ARichTextBox).GetValue();
                        }

                        svDt.Rows.Add(newRow);
                    }
                }
            }
        }

        /// <summary>
        /// 컨트롤 테이터 class 반환
        /// </summary>
        /// <typeparam name="T"></typeparam>
        /// <param name="list"></param>
        /// <param name="t"></param>
        /// <returns></returns>
        private static T GetData<T>(List<Control> list, T t)
        {
            PropertyInfo[] properties = t.GetType().GetProperties();
            foreach (var item in list)
            {
                string dataField = string.Empty;

                if (item.Tag == null || string.IsNullOrWhiteSpace(item.Tag.ToString()) || !item.Enabled)
                {
                    continue;
                }

                if (item.Tag is IControlOption)
                {
                    dataField = (item.Tag as IControlOption).DataField;
                }
                else
                {
                    dataField = item.Tag.ToString();
                }
               
                if (dataField.Contains("."))
                {
                    string[] temp = dataField.Split(new string[] { "." }, StringSplitOptions.RemoveEmptyEntries);
                    string fieldName = temp[1];

                    object obj = t;
                    PropertyInfo pInfo = null;

                    for (int i = 0; i < temp.Length; i++)
                    {
                        string part = temp[i];

                        Type type = obj.GetType();
                        pInfo = type.GetProperty(part);

                        if (i == 0)
                        {
                            obj = pInfo.GetValue(obj, null);
                        }
                        else
                        {
                            pInfo.SetValue(obj, GetControlValue(item));
                        }
                    }

                    foreach (PropertyInfo info in obj.GetType().GetProperties())
                    {
                        if (pInfo.GetValue(obj) != null)
                        {
                            continue;
                        }
                        if (fieldName.Equals(info.Name))
                        {
                            pInfo.SetValue(obj, GetControlValue(item));
                        }
                    }
                }
                else
                {
                    PropertyInfo pi = t.GetType().GetProperty(dataField);
                    if (pi == null)
                    {
                        continue;
                    }

                    //  값
                    object value = GetControlValue(item);
                    Type type = pi.PropertyType;


                    //  NumericUpDown 오류인한 추가
                    if (pi.PropertyType == typeof(Int16) ||
                        pi.PropertyType == typeof(Int32) ||
                        pi.PropertyType == typeof(Int64) ||
                        pi.PropertyType == typeof(decimal) ||
                        pi.PropertyType == typeof(double) ||
                        pi.PropertyType == typeof(long)
                       )
                    {
                        if (value == null || value.IsNullOrEmpty())
                        {
                            value = 0;
                        }
                        value = Convert.ChangeType(value.ToString().Replace(",", ""), type);
                    }
                    else if (pi.PropertyType == typeof(DateTime?) && value.IsNullOrEmpty())
                    {
                        value = null;
                    }
                    else if (pi.PropertyType == typeof(DateTime?) && value is string)
                    {
                        value = DateTime.Parse(value.ToString());
                    }
                    else if (pi.PropertyType == typeof(string) && value is DateTime)
                    {
                        throw new AMISException(pi.Name + " DateTimePickerOption의 Databaseformat이 설정 되지 않았습니다");
                    }
                    else if (pi.PropertyType.IsEnum && value is string)
                    {
                        value = Enum.Parse(pi.PropertyType, value.ToString());
                    }
                    else if (pi.PropertyType == typeof(string) && value is decimal)
                    {
                        value = value.ToString();
                    }
                    else if (pi.PropertyType == typeof(bool))
                    {
                        bool isCheck = false;
                        if (!bool.TryParse(value.ToString(), out isCheck))
                        {
                            continue;
                        }
                    }
                    try
                    {
                        pi.SetValue(t, value);
                    }
                    catch (Exception ex)
                    {
                        MessageBox.Show(ex.Message);
                    }
                }
            }
            return t;
        }

        /// <summary>
        /// 컨트롤 값가져오기
        /// </summary>
        /// <param name="item"></param>
        /// <returns></returns>
        private static object GetControlValue(Control item)
        {
            if (item is ATextEdit)
            {
                string value = (item as ATextEdit).GetValue();
                if (value.IsNullOrEmpty())
                {
                    return null;
                }
                else
                {
                    ATextEdit textBox = item as ATextEdit;
                    if (textBox.Tag is TextBoxOption)
                    {
                        TextBoxOption option = textBox.Tag as TextBoxOption;
                        if (option.DisplayFormat != DateTimeType.None)
                        {
                            return DateUtil.stringToDateTime(value, option.DisplayFormat);
                        }
                        else
                        {
                            return value;
                        }
                    }
                    else
                    {
                        return value;
                    }
                }
            }
            else if (item is ACheckEdit)
            {
                return (item as ACheckEdit).GetValue();
            }
            else if (item is AComboBox)
            {
                return (item as AComboBox).GetValue();
            }
            else if (item is APictureBox)
            {
                return (item as APictureBox).GetValue();
            }
            else if (item is ARadioGroup)
            {
                return (item as ARadioGroup).GetValue();
            }
            else if (item is ARichTextBox)
            {
                return (item as ARichTextBox).GetValue();
            }
            else if (item is ADateEdit)
            {
                return (item as ADateEdit).GetValue();
            }

            return null;
        }

        /// <summary>
        /// 데이터 바인딩
        /// </summary>
        /// <param name="list"></param>
        /// <param name="dto"></param>
        /// <returns></returns>
        private static void SetControlDataBind(List<Control> list, object dto)
        {
            PropertyInfo[] properties = dto.GetType().GetProperties();

            Dictionary<string, PropertyInfo> dictionary = new Dictionary<string, PropertyInfo>();
            foreach (PropertyInfo propertyInfo in properties)
            {
                dictionary.Add(propertyInfo.Name, propertyInfo);
            }

            foreach (Control item in list)
            {
                if (item.Tag == null || string.IsNullOrWhiteSpace(item.Tag.ToString()))
                {
                    continue;
                }

                string dataField = string.Empty;
                if (item.Tag is IControlOption)
                {
                    dataField = (item.Tag as IControlOption).DataField;
                }
                else
                {
                    dataField = item.Tag.ToString();
                }

                foreach (PropertyInfo info in properties)
                {
                    if (dataField.Contains("."))
                    {
                        string[] temp = dataField.Split(new string[] { "." }, StringSplitOptions.RemoveEmptyEntries);
                        string field = temp[1];

                        foreach (PropertyInfo pInfo in info.PropertyType.GetRuntimeProperties())
                        {
                            if (pInfo.Name.Equals(field))
                            {
                                object obj = dto;
                                PropertyInfo pinfo = null;

                                for (int i = 0; i < temp.Length; i++)
                                {
                                    string part = temp[i];

                                    Type type = obj.GetType();
                                    pinfo = type.GetProperty(part);

                                    if (i == 0)
                                    {
                                        obj = pinfo.GetValue(obj, null);
                                    }
                                    else
                                    {
                                        SetControlValue(item, info.GetValue(dto));
                                    }
                                }
                            }
                        }
                        continue;
                    }

                    if (info.Name.Equals(dataField))
                    {
                        object obj = dto.GetPropertieValue(dataField);
                        SetControlValue(item, obj);
                        break;
                    }
                }
            }
        }

        private static void SetControlDataBind(List<Control> list, DataTable argDT, string argTagKey, string argValKey)
        {
            DataColumn[] keyColumn = new DataColumn[2];

            keyColumn[0] = argDT.Columns[argTagKey];

            argDT.PrimaryKey = keyColumn;

            foreach (Control item in list)
            {
                if (item.Tag == null || string.IsNullOrWhiteSpace(item.Tag.ToString()))
                {
                    continue;
                }

                string dataField = string.Empty;

                if (item.Tag is IControlOption)
                {
                    dataField = (item.Tag as IControlOption).DataField;
                }
                else
                {
                    dataField = item.Tag.ToString();
                }

                if (dataField == "PG01100001")
                {
                    dataField = "PG01100001";
                }

                DataRow rs = argDT.Rows.Find(dataField);

                if (!rs.IsNullOrEmpty())
                {
                    if (dataField.Equals(rs[argTagKey].ToString()))
                    {
                        SetControlValue(item, rs[argValKey].ToString());
                    }
                }
                

            }

        }

        /// <summary>
        /// 데이터 바인딩
        /// </summary>
        /// <param name="list"></param>
        /// <param name="dto"></param>
        /// <returns></returns>
        private static void SetControlDataBinding(List<Control> list, object dto)
        {
            PropertyInfo[] properties = dto.GetType().GetProperties();
            foreach (Control item in list)
            {
                string dataField = string.Empty;

                if (item.Tag is IControlOption)
                {
                    dataField = (item.Tag as IControlOption).DataField;
                }
                else
                {
                    dataField = item.Tag.ToString();
                }

                foreach (PropertyInfo info in properties)
                {
                    if (dataField.Contains("."))
                    {
                        string[] temp = dataField.Split(new string[] { "." }, StringSplitOptions.RemoveEmptyEntries);
                        string field = temp[1];

                        foreach (PropertyInfo pInfo in info.PropertyType.GetRuntimeProperties())
                        {
                            if (pInfo.Name.Equals(field))
                            {
                                object obj = dto;
                                PropertyInfo pinfo = null;

                                for (int i = 0; i < temp.Length; i++)
                                {
                                    string part = temp[i];

                                    Type type = obj.GetType();
                                    pinfo = type.GetProperty(part);

                                    if (i == 0)
                                    {
                                        obj = pinfo.GetValue(obj, null);
                                    }
                                    else
                                    {
                                        item.DataBindings.Add("Text", obj, dataField, true, DataSourceUpdateMode.OnPropertyChanged);
                                    }
                                }
                            }
                        }
                        continue;
                    }

                    if (info.Name.Equals(dataField))
                    {
                        object obj = dto.GetPropertieValue(dataField);
                        item.DataBindings.Clear();

                        item.DataBindings.CollectionChanged += (s, e) =>
                        {
                            (s as ControlBindingsCollection).Control.Refresh();
                        };

                        if (item is AComboBox)
                        {
                            Binding ComboBoxBinding = new Binding("SelectedValue", dto, dataField, true, DataSourceUpdateMode.OnPropertyChanged);
                            //ComboBoxBinding.Format += (s, e) =>
                            //{

                            //};
                            //ComboBoxBinding.Parse += (s, e) =>
                            //{

                            //};
                            item.DataBindings.Add(ComboBoxBinding);
                        }
                        else if (item is ACheckEdit)
                        {
                            Binding CheckBoxBinding = new Binding("Checked", dto, dataField, true, DataSourceUpdateMode.OnPropertyChanged);

                            CheckBoxBinding.Format += CheckBoxBinding_Format;
                            CheckBoxBinding.Parse += CheckBoxBinding_Parse;
                            item.DataBindings.Add(CheckBoxBinding);
                        }
                        else if (item is ARadioGroup)
                        {
                            //if (RadioBinding.Control != null)
                            {
                                ARadioGroup rdo = (item as ARadioGroup);
                                if (rdo.GetOption() != null)
                                {
                                    rdo.EditValue = dto.GetPropertieValue(dataField);
                                }
                            }

                            Binding RadioBinding = new Binding("Checked", dto, dataField, true, DataSourceUpdateMode.OnPropertyChanged);
                            item.DataBindings.Add(RadioBinding);
                            RadioBinding.Format += (s, e) =>
                            {
                                Binding bind = s as Binding;
                                if (bind.Control != null)
                                {
                                    string controlValue = (bind.Control as ARadioGroup).GetOption().EditValue;
                                    //Console.WriteLine($"ForMat : { controlValue } == {e.Value}");
                                    e.Value = controlValue.Equals(e.Value);
                                }
                            };

                            RadioBinding.Parse += (s, e) =>
                            {
                                Binding bind = s as Binding;

                                if (bind.Control != null)
                                {
                                    //if ((bind.Control as ARadioGroup).Checked)
                                    //{
                                    //    e.Value = (bind.Control as ARadioGroup).GetOption().EditValue;
                                    //}
                                    //else
                                    //{
                                    //    e.Value = string.Empty;
                                    //}

                                    e.Value = (bind.Control as ARadioGroup).GetOption().EditValue;
                                    //Console.WriteLine($"Parse : {e.Value}       {(bind.Control as RadioButton).Name}");
                                }
                            };

                            //(RadioBinding.Control as ARadioGroup).Click += (s, e) =>
                            //{
                            //    (s as ARadioGroup).Checked = true;
                            //};
                        }
                        else if (item is NumericUpDown)
                        {
                            item.DataBindings.Add("Value", dto, dataField, true, DataSourceUpdateMode.OnPropertyChanged);
                        }
                        else
                        {
                            if (dto.GetPropertieValue(dataField) != null)
                            {
                                //string value = dto.GetPropertieValue(dataField).ToString();
                                dto.SetPropertieValue(dataField, dto.GetPropertieValue(dataField));
                            }
                            item.DataBindings.Add("Text", dto, dataField, true, DataSourceUpdateMode.OnPropertyChanged);
                        }

                        break;
                    }
                }
            }
        }

        private static void CheckBoxBinding_Parse(object sender, ConvertEventArgs e)
        {
            Binding binding = sender as Binding;
            if (binding != null)
            {
                ACheckEdit checkBox = (binding.Control as ACheckEdit);
                e.Value = checkBox.Checked ? checkBox.GetOption().ValueChecked : checkBox.GetOption().ValueUncheck;
            }
        }

        private static void CheckBoxBinding_Format(object sender, ConvertEventArgs e)
        {
            Binding binding = sender as Binding;
            if (binding != null)
            {
                ACheckEdit checkBox = (binding.Control as ACheckEdit);
                e.Value = checkBox.GetOption().ValueChecked.Equals(e.Value);
            }
        }


        /// <summary>
        /// 컨트롤 값넣기
        /// </summary>
        /// <param name="item"></param>
        /// <param name="data"></param>
        private static void SetControlValue(Control item, object data)
        {

            if (item is ATextEdit)
            {
                string value = string.Empty;
                if (data != null)
                {
                    value = data.ToString().Trim();
                }

                (item as ATextEdit).SetValue(value);
            }
            else if (item is AMemoEdit)
            {
                string value = string.Empty;
                if (data != null)
                {
                    value = data.ToString().Trim();
                }

                (item as AMemoEdit).SetValue(value);
            }
            else if (item is ACheckEdit)
            {
                (item as ACheckEdit).SetValue(data);
            }
            else if (item is AComboBox)
            {
                (item as AComboBox).SetValue(data);
            }
            else if (item is APictureBox)
            {
                (item as APictureBox).SetValue(data);
            }
            else if (item is ARadioGroup)
            {
                (item as ARadioGroup).SetValue(data);
            }
            else if (item is ARichTextBox)
            {
                (item as ARichTextBox).SetValue(data);
            }
            else if (item is ADateEdit)
            {
                (item as ADateEdit).SetValue(data);
            }
        }


        public static PanelOption GetOption(this APanelControl panel)
        {
            if (panel.Tag is PanelOption)
            {
                return panel.Tag as PanelOption;
            }

            return null;
        }
        /// <summary>
        /// dto 유효성 검사하여 panel의 컨트롤에 에러롤 표시합니다(반드시 BaseForm을 상속받아야 합니다)
        /// 
        /// </summary>
        /// <param name="panel"></param>
        /// <param name="dto"></param>
        public static bool Validate<T>(this APanelControl panel) where T : new()
        {
            bool isValid = true;
            try
            {
                T t = new T();

                //BaseDto dto = (panel.Tag as PanelOption).Data as BaseDto;
                if (t.GetType().BaseType.Name == "BaseDto")
                {
                    BaseDto dto = GetData<T>(panel) as BaseDto;
                    dto.Validate();
                }
                else
                {
                    throw new Exception("BaseDto를 상속해야 합니다");
                }
            }
            catch (AMISValidationException)
            {
                isValid = false;
            }

            return isValid;

        }
        
    }

    public class PanelOption
    {
        public List<Control> RequiredControls;
        public object Data;

        public PanelOption()
        {
            RequiredControls = new List<Control>();
        }

        public void AddRequiredControl(Control control)
        {
            if (!RequiredControls.Contains(control))
            {
                RequiredControls.Add(control);
            }
        }
    }
}

profile
이리저리 생각만 많은 사고뭉치입니다.

0개의 댓글