• 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());

  • 相关阅读:
    Caused by: java.lang.IllegalArgumentException: Not an managed type: class XXX
    SpringBoot配置文件详细解析
    解决eclipse环境下maven项目tomcat启动,未加载到项目的问题
    CSS+元素,鼠标事件触发鼠标模形变成手状的形状
    LeetCode-Wildcard Matching
    LeetCode-NQueensII
    LeetCode-Climbing Stairs
    LeetCode-Word Search
    LeetCode-Minimum Window Substring
    LeetCode-Largest Rectangle in Histogram
  • 原文地址:https://www.cnblogs.com/LuoEast/p/8214109.html
Copyright © 2020-2023  润新知