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());
C# DataGridVie利用model特性动态加载列的更多相关文章
- jquery easyui datagrid 动态 加载列
实现方式: 首先根据输入的sql语句获得相关的列名称返回给前台,然后在datagrid中动态加载列,接着根据查询条件(包括sql语句)获取相关的记录返回给前台用于填充datagrid.从而实现类似or ...
- 【datagrid】动态加载列 2016-01-03 16:32 2013人阅读 评论(19) 收藏
之前我们的项目在前台显示只需要把数据从数据库读出来进行显示就可以,datagrid的表头字段都是写死的,把数据往表里一扔,就基本没什么事儿了,结果客户前几天要求,其中一个字段不能是死的,应该是有多少项 ...
- js动态加载以及确定加载完成的代码
利用原生js动态加载js文件到页面,并在确定加载完成后调用相关function var otherJScipt = document.createElement("script") ...
- c#实现动态加载Dll(转)
c#实现动态加载Dll 分类: .net2009-12-28 13:54 3652人阅读 评论(1) 收藏 举报 dllc#assemblynullexceptionclass 原理如下: 1.利用反 ...
- c#实现动态加载Dll
原文:c#实现动态加载Dll 原理如下: 1.利用反射进行动态加载和调用. Assembly assembly=Assembly.LoadFrom(DllPath); //利用dll的路径加载,同时将 ...
- C# 动态加载(转)
原文链接地址:http://blog.csdn.net/lanruoshui/article/details/5090710 原理如下: 1.利用反射进行动态加载和调用. Assembly assem ...
- 利用Jquery的load函数实现页面的动态加载
利用Jquery的load函数实现页面的动态加载 js的强大功能相信大家都知晓,今天通过jquery的库函数load可以更加方便的实现页面的动态刷新,经过几天的研究与探索,终于有所成效!吾心甚蔚! ...
- C# 利用反射动态加载dll
笔者遇到的一个问题,dll文件在客户端可以加载成功,在web端引用程序报错.解决方法:利用反射动态加载dll 头部引用加: using System.Reflection; 主要代码: Assembl ...
- 微信小程序(五) 利用模板动态加载数据
利用模板动态加载数据,其实是对上一节静态数据替换成动态数据:
随机推荐
- thinkphp整合系列之极验滑动验证码
对于建站的筒子们来说:垃圾广告真是让人深恶痛绝:为了清净:搞个难以识别的验证码吧:又被用户各种吐槽:直到后来出现了极验这个滑动的验证码:这真是一个体验好安全高的方案:官网:http://www.gee ...
- C#中如何使用断点操作调试程序
Visual Studio调试器调试 当代码不能正常运行时,可以通过调试定位错误.常用的程序调试操作包括设置断点.开始.中断和停止程序的执行.单步执行程序以及使程序运行到指定的位置.下面将对这几种常用 ...
- Linux 两台服务器之间传输文件和文件夹
今天处理一个项目要迁移的问题,突然发现这么多图片怎么移过去,可能第一时间想到的是先从这台服务器下载下来,然后再上传到另外一台服务器上面去,这个方法确实是可行,但是实在是太费时间了,今天我就教大家怎么快 ...
- 使用js做创建图片及删除图片 若有什么不对或不完整的地方,请大家提出来,谢谢
首先我们要在<body>中创建一个按钮<button>来用作点击创建图片,在<button>中写一个点击事件(随便命名), 在创建一个<div>存放图片 ...
- JaveScript简单数据类型(JS知识点归纳二)
JS中的简单数据类型有五种 : --> string --> number -->boolean --> null -->undefined 数据类型的检测 :typeo ...
- springMVC(1)---@RequestMapping详解
@RequestMapping详解 RequestMapping是一个用来处理请求地址映射的注解,可用于类或方法上.用于类上,表示类中的所有响应请求的方法都是以该地址作为父路径.这句话,太熟悉了. ...
- hdu 1233 还是畅通project(kruskal求最小生成树)
还是畅通project Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Tota ...
- zookeeper web ui-->node-zk-browser安装
眼下公司正在使用zookeeper做配置管理和其它工作,在网上找几个zookeeper管理工具,都不尽人意,要么功能不够强大,要么不能友好的浏览zk树形结构.我的想法是zk管理工具,应该有一个树形结构 ...
- 浅析Spring事务传播行为和隔离级别
7个传播行为.4个隔离级别. Spring事务的传播行为和隔离级别[transaction behaviorand isolatedlevel] Spring中事务的定义: Propagation(k ...
- OSX: Scripts,让BootCamp在不论什么Mac上支持生成Windows7的USB安装盘
为什么要做这个呢,由于BootCamp仅仅有在默认的Mac上才会有生成USB安装盘的选项.这个脚本就是为了确保用户使用它在不论什么一个Mac机器上都能够生成Windows的USB安装盘.当然了,假设你 ...