C#动态生成属性

问题描述

请问propertyGrid如何自动生成属性,比如我有一个DataTable,我用来一个类myclass来表示DataTable,类的属性就是DataTable的列名,然后propertygrid.selectedObject=myclass就可以在propertygrid中显示列名,但是,由于DataTable的列数的不确定的,请问如何可以实现动态的显示这些属性

解决方案

解决方案二:
这是要把模型变成过去式的节奏
解决方案三:
引用:System.Reflection,System.Reflection.Emit窗体上放一个Button,一个PropertyGrid控件。privatevoidbutton1_Click(objectsender,EventArgse){DataTabledt=newDataTable();DataColumn[]cols=newDataColumn[3];cols[0]=newDataColumn("AAA",typeof(int));cols[1]=newDataColumn("BBB",typeof(string));cols[2]=newDataColumn("CCC",typeof(DateTime));dt.Columns.AddRange(cols);for(inti=0;i<10;i++){dt.Rows.Add(newobject[]{i+1,(i+1).ToString()+"F",DateTime.Now.AddHours(i)});}IEnumerable<object>objs=CreateObjects(dt);foreach(varobjinobjs){propertyGrid1.SelectedObject=obj;MessageBox.Show("点击确定继续下一个。");}}privateIEnumerable<object>CreateObjects(DataTabledt){Typetype=CreateType(dt);PropertyInfo[]ps=type.GetProperties();foreach(DataRowdrindt.Rows){objectobj=Activator.CreateInstance(type);for(inti=0;i<dt.Columns.Count;i++){ps[i].SetValue(obj,dr[dt.Columns[i]]);}yieldreturnobj;}}privateTypeCreateType(DataTabledt){AssemblyNameMyAssemblyName=newAssemblyName("MyAssembly");AssemblyBuilderMyAssembly=AppDomain.CurrentDomain.DefineDynamicAssembly(MyAssemblyName,AssemblyBuilderAccess.Run);ModuleBuildermb=MyAssembly.DefineDynamicModule(MyAssemblyName.Name);TypeBuildertb=mb.DefineType("MyClass",TypeAttributes.Public);inti=1;foreach(DataColumncolindt.Columns){FieldBuilderfb=tb.DefineField("_f"+i.ToString(),col.DataType,FieldAttributes.Private);varmethodGet=tb.DefineMethod("_get"+col.ColumnName,MethodAttributes.Public,col.DataType,null);varilOfGet=methodGet.GetILGenerator();ilOfGet.Emit(OpCodes.Ldarg_0);ilOfGet.Emit(OpCodes.Ldfld,fb);ilOfGet.Emit(OpCodes.Ret);varmethodSet=tb.DefineMethod("_set"+col.ColumnName,MethodAttributes.Public,null,newType[]{col.DataType});varilOfSet=methodSet.GetILGenerator();ilOfSet.Emit(OpCodes.Ldarg_0);ilOfSet.Emit(OpCodes.Ldarg_1);ilOfSet.Emit(OpCodes.Stfld,fb);ilOfSet.Emit(OpCodes.Ret);PropertyBuilderpb=tb.DefineProperty(col.ColumnName,System.Reflection.PropertyAttributes.None,col.DataType,null);pb.SetGetMethod(methodGet);pb.SetSetMethod(methodSet);i++;}returntb.CreateType();}

解决方案四:
解决了,谢谢

时间: 2024-07-30 23:57:28

C#动态生成属性的相关文章

VB.net Or C# 类 根据DataTable的值 生成属性 另一类调用

问题描述 第一个类(clsDYCN):1.从数据库中取得某表(CRTB)中指定字段(TBVD)的值,生成DataTable.DataTable中共5条记录:A1.A2.A3.A4.A5(为示例数据,数据会增加,但是不会更改或删除)2.根据DataTable,动态生成属性.第二个类(clsUSCO)1.写代码时,引用第一个类,在代码编辑器里,比如A.A1,(A1.A2.A3.A4.A5可以下拉选择).=================================================

在python的类中动态添加属性与生成对象_python

本文将通过一下几个方面来一一进行解决       1.程序的主要功能       2.实现过程       3.类的定义       4.用生成器generator动态更新每个对象并返回对象       5.使用strip 去除不必要的字符       6.rematch匹配字符串       7.使用timestrptime提取字符串转化为时间对象       8.完整代码 程序的主要功能 现在有个存储用户信息的像表格一样的文档:第一行是属性,各个属性用逗号(,)分隔,从第二行开始每行是各个属

C#编程实现动态生成Word文档

如何用C#编程实现动态生成Word文档并填充数据的效果呢?要使用C#操作word,首先要添加引用     1.添加引用->COM->Microsoft Word 11.0 Object Library     2.在.cs文件中添加     using  Word;     下面的例子中包括C#对Word文档的创建.插入表格.设置样式等操作:     (例子中代码有些涉及数据信息部分被省略,重要是介绍一些C#操作word文档的方法)     public   string  CreateWor

复杂表单的动态生成与动态验证

这里所谓的复杂表单,是指表单中包含多种不同的输入类型,比如下拉列表框.单行文本.多行文本.数值等.在经常需要更换这类表单的场合,需要有一个表单的动态生成程序.本文介绍的正是这样一个系统,它以数据库保存表单定义数据,利用ASP脚本动态生成表单HTML代码以及验证表单输入的脚本. 一.定义数据库表结构 在Web上经常可以看到"每周调查"之类的表单,这就是一种需要经常更新的表单.如果有一个动态生成表单及其验证脚本的程序,可以大大减少制作这些表单的工作量. 在本文的动态表单生成与验证示例中,我

复杂表单的动态生成与动态验证(转)

动态|动态验证 这里所谓的复杂表单,是指表单中包含多种不同的输入类型,比如下拉列表框.单行文本.多行文本.数值等.在经常需要更换这类表单的场合,需要有一个表单的动态生成程序.本文介绍的正是这样一个系统,它以数据库保存表单定义数据,利用ASP脚本动态生成表单HTML代码以及验证表单输入的脚本. 一.定义数据库表结构 在Web上经常可以看到"每周调查"之类的表单,这就是一种需要经常更新的表单.如果有一个动态生成表单及其验证脚本的程序,可以大大减少制作这些表单的工作量. 在本文的动态表单生成

利用OWC服务器端组件动态生成图表

动态|服务器|图表 利用OWC服务器端组件动态生成图表 以前在这里也曾经有一些文章谈到了在ASP中生成动态图表的问题,但那些文章中所谈到的一些方法都有某些方面的限制,如需要在客户端安装office2000或安装OWC,有些则可能在Intranet中使用时没什么问题,但在通过Internet访问的时候,就可能出现无法正常工作的现象(这主要和SQL Server的安全设置有关).那么,我们如何来避免这些问题呢?有一个很好的方法,就是将在ASP中生成的图表转换成图片文件保存在服务器上,这样用户最终看到

在ASP.NET中动态生成图形(转)

asp.net|动态|图形 在ASP.NET中动态生成图形 .NET有一个很灵巧的特性,就是可以编写代码生成动态图形,然后将生成的图形保存在磁盘上或者直接将其发送到客户端的浏览器. 原理 用.NET生成图形的功能封装在System.Drawing名称空间中,它支持多种图形文件格式,包括:JPEG.GIF.PNG.TIFF.BMP.PhotoCD.FlashPIX.WMF.EMF和EXIF. 创建这些图形的通用机制是构造一个BitMap(位图)对象,它为要创建的图形提供了内存空间.然后,就可以调用

使用silverlight构建一个工作流设计器(十四)(动态生成流程图片下载_下)

源代码下载:http://www.shareidea.net/opensource.htm 在线演示:http://www.shareidea.net/workflow.htm 视频教程: http://www.shareidea.net/video/sharedesigner/sharedesigner.html 在上篇文章中,韦恩卑鄙提出了silverlight3.0版本中增加了本地动态生成图片的方法,我又搜索了一下,的确可以了,您可以访问http://developer.51cto.com

Extjs动态生成表格

在web显示数据时,会遇到grid的列数和行数不确定的这种情况.如何来根据数据动态的创建表格呢? Extjs 的json data给我们带来了一个很好的比较简单的方法. 要创建一个grid需要确定它的列数,再根据数据的数量就可以确定行数了. 看到有人用过一种方法就是讲列的属性和数据一起放在json data里去,这样可以达到效果,但是不难发现,这样的话,就很难进行分页或者更新表格里的数据. 其实我们可以结合extjs官网上的那种固定列数的访问方法来动态生成表格. 首先通过Ajax从服务端反回列的