今天闲来无事看到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());

C# DataGridVie利用model特性动态加载列的更多相关文章

  1. jquery easyui datagrid 动态 加载列

    实现方式: 首先根据输入的sql语句获得相关的列名称返回给前台,然后在datagrid中动态加载列,接着根据查询条件(包括sql语句)获取相关的记录返回给前台用于填充datagrid.从而实现类似or ...

  2. 【datagrid】动态加载列 2016-01-03 16:32 2013人阅读 评论(19) 收藏

    之前我们的项目在前台显示只需要把数据从数据库读出来进行显示就可以,datagrid的表头字段都是写死的,把数据往表里一扔,就基本没什么事儿了,结果客户前几天要求,其中一个字段不能是死的,应该是有多少项 ...

  3. js动态加载以及确定加载完成的代码

    利用原生js动态加载js文件到页面,并在确定加载完成后调用相关function var otherJScipt = document.createElement("script") ...

  4. c#实现动态加载Dll(转)

    c#实现动态加载Dll 分类: .net2009-12-28 13:54 3652人阅读 评论(1) 收藏 举报 dllc#assemblynullexceptionclass 原理如下: 1.利用反 ...

  5. c#实现动态加载Dll

    原文:c#实现动态加载Dll 原理如下: 1.利用反射进行动态加载和调用. Assembly assembly=Assembly.LoadFrom(DllPath); //利用dll的路径加载,同时将 ...

  6. C# 动态加载(转)

    原文链接地址:http://blog.csdn.net/lanruoshui/article/details/5090710 原理如下: 1.利用反射进行动态加载和调用. Assembly assem ...

  7. 利用Jquery的load函数实现页面的动态加载

    利用Jquery的load函数实现页面的动态加载  js的强大功能相信大家都知晓,今天通过jquery的库函数load可以更加方便的实现页面的动态刷新,经过几天的研究与探索,终于有所成效!吾心甚蔚! ...

  8. C# 利用反射动态加载dll

    笔者遇到的一个问题,dll文件在客户端可以加载成功,在web端引用程序报错.解决方法:利用反射动态加载dll 头部引用加: using System.Reflection; 主要代码: Assembl ...

  9. 微信小程序(五) 利用模板动态加载数据

    利用模板动态加载数据,其实是对上一节静态数据替换成动态数据:

随机推荐

  1. tomcat警告setting property 'debug' to '0' did not find a matching property

    在使用tomcat6.0版本结合myeclipse进行java web项目,运行程序显示setting property 'debug' to '0' did not find a matching ...

  2. PHP设置环境变量

    如果提示php命令不存在.说明未设置.设置方法如下 方法一:直接运行命令 [PHP] 纯文本查看 复制代码 ? 1 export PATH=$PATH:/usr/local/xxxx/php/bin ...

  3. 一些内存模型、并发、netty知识点的记录

    happens-before:描述内存可见性as-if-serial:无论怎么重排序,程序的运行结果不会改变 ReentrantLock依赖了队列同步器AQS,其实现方式是volatile变量的读写操 ...

  4. Exif Info 隐私政策

    隐私政策 本应用尊重并保护所有使用服务用户的个人隐私权.为了给您提供更准确.更有个性化的服务,本应用会按照本隐私权政策的规定使用和披露您的个人信息.但本应用将以高度的勤勉.审慎义务对待这些信息.除本隐 ...

  5. Redis的简单使用和介绍

    1.什么是NoSQL     NoSQL   =   Not Only  SQL     非关系型的数据库      2. 为什么需要NoSQL     High performance  高并发读写 ...

  6. 班级博客客户端Beta阶段发布说明

    班级博客客户端Beta阶段发布说明 NewTeam 2017/12/18 项目 博客园班级博客Android客户端 目录 发布方式和发布地址 新功能 修复的缺陷 对运行环境的要求 安装方法 已知的问题 ...

  7. mac mono Fiddler.exe启动失败

    mono version 5.4 fiddler version 4.6 启动fiddler:mono Fiddler.exe 启动报错 WARNING: The Carbon driver has ...

  8. WebSocket解析

    WebSocket解析 转载请注明出处:WebSocket解析 现在,很多网站为了实现推送技术,所用的技术都是轮询.轮询是指在特定的时间间隔(如每一秒),由浏览器对服务器发起HTTP请求,然后由服务器 ...

  9. 模拟教室网络(跨VLAN,跨网段通讯)

    要求: 1,跨VLAN,三个教室在不同的VLAN中,翻番至网络风暴 2,三个VLAN在三个不同的网段 3,设置访问控制列表,组织每个网段的前八个IP不可访问服务器 4,其他IP均可访问外网的服务器 操 ...

  10. Java基础(四)-异常处理机制及其设计

    本篇主要是记录自己所理解的Java异常处理机制(基于jdk1.7)以及怎么去处理和设计异常.还记得当初学习Java异常这块的时候都没怎么注意它的用途,以为就是简单的处理下异常,我避免程序出现这样错误就 ...