zoukankan      html  css  js  c++  java
  • C# DataGridVie利用model特性动态加载列

    今天闲来无事看到ORm的特性映射sql语句。我就想到datagridview也可以用这个来动态添加列。这样就不用每次都去界面上点开界面填列了。

    代码简漏希望有人看到了能指点一二。

    先定义好Datagridview要加载的列。

    public class Model
        {
            [ColumnAttribute(type = typeof(DataGridViewTextBoxColumn), DataPName = "d", HText = "sd")]
            public int Id { get; set; }
            public string Name { get; set; }

        }

    自定义特性

    public class ColumnAttribute : Attribute
        {
            public Type type { get; set; }
            public string DataPName { get; set; }
            public string HText { get; set; }

        }

    定义填加列方法

     public DataGridViewColumn[] DgvCArry()
            {
                Model model = new Model();
               
                PropertyInfo[] property = model.GetType().GetProperties();
                DataGridViewColumn[] dgvcArr = new DataGridViewColumn[property.Count() - 1];
                for (int i = 0; i < property.Count()-1; i++)
                {
                    object[] pInfo = property[i].GetCustomAttributes(false);
                    foreach (object objAtt in pInfo)
                    {
                        if (objAtt.GetType() != typeof(ColumnAttribute))
                        {
                            continue;
                        }
                        ColumnAttribute columnAtt = objAtt as ColumnAttribute;
                        var DgvColumnType = columnAtt.type;
                        object obj = DgvColumnType.Assembly.CreateInstance(DgvColumnType.FullName);
                     
                        if (columnAtt.type == typeof(DataGridViewTextBoxColumn))
                        {
                            DataGridViewTextBoxColumn dgvtc = obj as DataGridViewTextBoxColumn;
                            dgvtc = new DataGridViewTextBoxColumn()
                            {
                                HeaderText = columnAtt.HText,
                                DataPropertyName = columnAtt.DataPName,
                                Name = columnAtt.DataPName
                            };
                            dgvcArr[i] = dgvtc;
                        }
                        else if (columnAtt.type == typeof(DataGridViewComboBoxColumn))
                        {
                            DataGridViewComboBoxColumn dgvcbc = obj as DataGridViewComboBoxColumn;
                            dgvcbc = new DataGridViewComboBoxColumn()
                            {
                                HeaderText = columnAtt.HText,
                                DataPropertyName = columnAtt.DataPName,
                                Name = columnAtt.DataPName
                            };
                            dgvcArr[i] = dgvcbc;
                        }
                        else if (columnAtt.type == typeof(DataGridViewCheckBoxColumn))
                        {
                            DataGridViewCheckBoxColumn dgvcbc = obj as DataGridViewCheckBoxColumn;
                            dgvcbc = new DataGridViewCheckBoxColumn()
                            {
                                HeaderText = columnAtt.HText,
                                DataPropertyName = columnAtt.DataPName,
                                Name = columnAtt.DataPName
                            };
                            dgvcArr[i] = dgvcbc;
                        }
                        else if (columnAtt.type == typeof(DataGridViewImageColumn))
                        {
                            DataGridViewImageColumn dgvcbc = obj as DataGridViewImageColumn;
                            dgvcbc = new DataGridViewImageColumn()
                            {
                                HeaderText = columnAtt.HText,
                                DataPropertyName = columnAtt.DataPName,
                                Name = columnAtt.DataPName
                            };
                            dgvcArr[i] = dgvcbc;
                        }
                        else if (columnAtt.type == typeof(DataGridViewLinkColumn))
                        {
                            DataGridViewLinkColumn dgvcbc = obj as DataGridViewLinkColumn;
                            dgvcbc = new DataGridViewLinkColumn()
                            {
                                HeaderText = columnAtt.HText,
                                DataPropertyName = columnAtt.DataPName,
                                Name = columnAtt.DataPName
                            };
                            dgvcArr[i] = dgvcbc;
                        }
                        else if (columnAtt.type == typeof(DataGridViewButtonColumn))
                        {
                            DataGridViewButtonColumn dgvcbc = obj as DataGridViewButtonColumn;
                            dgvcbc = new DataGridViewButtonColumn()
                            {
                                HeaderText = columnAtt.HText,
                                DataPropertyName = columnAtt.DataPName,
                                Name = columnAtt.DataPName
                            };
                            dgvcArr[i] = dgvcbc;
                        }

                    }
                }
                return dgvcArr;
            }

    //界面初始化时调用

    dataGridView1.Columns.AddRange(DgvCArry());

  • 相关阅读:
    【DFS】XIII Open Championship of Y.Kupala Grodno SU Grodno, Saturday, April 29, 2017 Problem D. Divisibility Game
    【二分】【三分】【计算几何】XIII Open Championship of Y.Kupala Grodno SU Grodno, Saturday, April 29, 2017 Problem L. Lines and Polygon
    【线段树】XIII Open Championship of Y.Kupala Grodno SU Grodno, Saturday, April 29, 2017 Problem J. Jedi Training
    【贪心】【后缀自动机】XIII Open Championship of Y.Kupala Grodno SU Grodno, Saturday, April 29, 2017 Problem E. Enter the Word
    【转载】随机生成k个范围为1-n的随机数,其中有多少个不同的随机数?
    【推导】【贪心】XVII Open Cup named after E.V. Pankratiev Stage 4: Grand Prix of SPb, Sunday, Octorber 9, 2016 Problem H. Path or Coloring
    【枚举】XVII Open Cup named after E.V. Pankratiev Stage 4: Grand Prix of SPb, Sunday, Octorber 9, 2016 Problem D. Cutting Potatoes
    【找规律】【递归】XVII Open Cup named after E.V. Pankratiev Stage 4: Grand Prix of SPb, Sunday, Octorber 9, 2016 Problem F. Doubling
    【贪心】Codeforces Round #436 (Div. 2) D. Make a Permutation!
    【计算几何】【圆反演】计蒜客17314 2017 ACM-ICPC 亚洲区(南宁赛区)网络赛 G. Finding the Radius for an Inserted Circle
  • 原文地址:https://www.cnblogs.com/LuoEast/p/8214109.html
Copyright © 2011-2022 走看看