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

  • 相关阅读:
    PHP的文件下载
    ajax异步请求分页显示
    Linux的启动过程
    搭建nginx反向代理用做内网域名转发
    intellij idea 修改背景保护色&&修改字体&&快捷键大全
    IDEA入门级使用教程-
    http://blog.csdn.net/baidu_31657889/article/details/52315902
    JVM——Java虚拟机架构
    MySQL远程连接ERROR 2003 (HY000):Can't connect to MySQL server on'XXXXX'(111) 的问题
    windows上 nginx 配置代理服务,配置多域名,以及最简单实现跨域配置
  • 原文地址:https://www.cnblogs.com/LuoEast/p/8214109.html
Copyright © 2011-2022 走看看