Example #1
0
        /// <summary>
        /// Создать шаблон таблицы на основе типа
        /// </summary>
        /// <param name="TableName">Имя таблицы</param>
        /// <param name="WrappedType">Тип, размеченный аттрибутами ColumnName (и ему подобными)</param>
        /// <returns>Таблица</returns>
        public static DataTable GenTable(string TableName, Type WrappedType)
        {
            DataTable result = new DataTable(TableName);

            foreach (PropertyInfo var in WrappedType.GetProperties())
            {
                ColumnNameAttribute name = (ColumnNameAttribute)Attribute.GetCustomAttribute(var, typeof(ColumnNameAttribute));
                if (name != null)
                {
                    DataColumn          column = new DataColumn(name.ColumnName, var.PropertyType);
                    ColumnTextAttribute text   = (ColumnTextAttribute)Attribute.GetCustomAttribute(var, typeof(ColumnTextAttribute));
                    if (text != null)
                    {
                        column.Caption = text.ColumnText;
                    }
                    result.Columns.Add(column);
                }
            }
            return(result);
        }
Example #2
0
        /// <summary>
        /// Наполнить колонки на основе типа.
        /// </summary>
        /// <param name="columns">Коллекция колонок</param>
        /// <param name="type">Тип, размеченный аттрибутами</param>
        public static void ParseAllPropsIntoColumns(DataGridViewColumnCollection columns, Type type)
        {
            PropertyInfo[] props      = type.GetProperties();
            ArrayList      propsNames = new ArrayList(props.Length);

            foreach (PropertyInfo prop in props)
            {
                PropertyOrderAttribute att = (PropertyOrderAttribute)Attribute.GetCustomAttribute(prop, typeof(PropertyOrderAttribute));
                if (att != null)
                {
                    propsNames.Add(new PropertyOrderPair(prop.Name, att.Order));
                }
                else
                {
                    propsNames.Add(new PropertyOrderPair(prop.Name, 0));
                }
            }

            propsNames.Sort();

            DataGridViewCell cell = new DataGridViewTextBoxCell();

            for (int i = 0; i < propsNames.Count; ++i)
            {
                PropertyInfo prop = type.GetProperty((propsNames[i] as PropertyOrderPair).Name);

                ColumnNameAttribute attName = (ColumnNameAttribute)Attribute.GetCustomAttribute(prop, typeof(ColumnNameAttribute));
                if (attName != null)
                {
                    DataGridViewColumn column = new DataGridViewColumn();
                    column.Name         = attName.ColumnName;
                    column.CellTemplate = cell;

                    ColumnWidthAttribute attWidth = (ColumnWidthAttribute)Attribute.GetCustomAttribute(prop, typeof(ColumnWidthAttribute));
                    if (attWidth != null)
                    {
                        column.Width = attWidth.ColumnWidth;
                    }
                    else
                    {
                        column.Width = 100;
                    }

                    ColumnTextAttribute attText = (ColumnTextAttribute)Attribute.GetCustomAttribute(prop, typeof(ColumnTextAttribute));
                    if (attText != null)
                    {
                        column.HeaderText = attText.ColumnText;
                    }
                    else
                    {
                        column.HeaderText = attName.ColumnName;
                    }

                    if (prop.GetSetMethod() != null)
                    {
                        ReadOnlyAttribute attRO = (ReadOnlyAttribute)Attribute.GetCustomAttribute(prop, typeof(ReadOnlyAttribute));
                        if (attRO != null)
                        {
                            column.ReadOnly = attRO.IsReadOnly;
                        }
                    }

                    ContentAlignmentAttribute attAl = (ContentAlignmentAttribute)Attribute.GetCustomAttribute(prop, typeof(ContentAlignmentAttribute));
                    if (attAl != null)
                    {
                        column.HeaderCell.Style.Alignment = (DataGridViewContentAlignment)(attAl.Alignment);
                    }

                    columns.Add(column);
                }
            }
        }