今天闲来无事看到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. oracle和mysql几点差异对比

    Oracle与mysql差异性总结 之前有个项目是用oracle数据库进行开发,需要把数据库改成mysql,遇到了一些地方需要注意的,就简单记了下来. 备注: 再把oracle转成mysql的时候,表 ...

  2. calc() ---一个会计算的css属性

    最近这个月一直在赶项目开发,遇到的问题和学到的前端知识没有更新到博客园,现在闲了下来,就整理一下前端知识. 在项目开发中,在样式这方面花费的时间较多,因为针对于数字的变化特别多,本人不爱记数字,在看设 ...

  3. MySQL系列:基于binlog的增量订阅与消费(一)

    在一些业务场景中,像在数据分析中我们有时候需要捕获数据变化(CDC):在数据审计中,我们也往往需要知道数据从这个点到另一个点的变化:同样在实时分析中,我们有时候需要看到某个值得实时变化等. 要解决以上 ...

  4. Python_02笔记

    数据类型 引子 什么是数据?x=10, 10 是我们要存储的数据 为啥数据要分不同的类型数据是用来表示状态的,不同的状态就应该用不同的类型的数据去表示 数据类型数字(整形,长整型,浮点型,复数)字符串 ...

  5. JavaWeb学习总结(一)——JavaWeb开发入门(转)

    转载自 http://www.cnblogs.com/xdp-gacl/p/3729033.html 一.基本概念 1.1.WEB开发的相关知识 WEB,在英语中web即表示网页的意思,它用于表示In ...

  6. 修改Mac系统的文件权限

    修改Mac系统的文件权限 有时候,因为各种各样的需求Mac OS系统使用者需要修改某个系统文件,但是很多时候Mac OS系统会提示你"没有足够的权限".所以往往会无法保侟.编辑甚至 ...

  7. Java泛型深入理解

    泛型的优点: 泛型的主要优点就是让编译器保留參数的类型信息,执行类型检查,执行类型转换(casting)操作,编译器保证了这些类型转换(casting)的绝对无误. /******* 不使用泛型类型 ...

  8. java文本编辑器v2.0 图形用户界面

    package 文本编辑器; import java.awt.BorderLayout; import java.awt.Color; import java.awt.Dimension; impor ...

  9. 最重要的 Java EE 最佳实践

    參考:IBM WebSphere 开发人员技术期刊: 最重要的 Java EE 最佳实践 IBM WebSphere 开发人员技术期刊: 最重要的 Java EE 最佳实践 2004 年 IBM® W ...

  10. telematics product and company in China

    持续更新中. 总的来看后装OBD市场日渐繁荣,可是应用深度不够:前装infotainment受限于产量和商业模式,举步维艰. 车联网作为汽车信息化的起点,会有泡沫,也会在大数据和物联网的浪潮中逐步积淀 ...