在循环一个DataTable的时候,还要指定列名,的确有些不方便,今日想能不能转换为类似List<Model>的形式呢,这样操作会方便的多。主要代码为类ModelConvertHelper,主要思路是利用泛型传入实体类Model,DataTable的每一行都是一个实体,所以首先要循环DataTable,定义此泛型的对象T t = new T(),然后利用反射获得实体类里面的公共属性,具体代码如下的PropertyInfo[] propertys = t.GetType().GetProperties();的部分,然后利用如下循环:
foreach (PropertyInfo pi in propertys)
{
tempName = pi.Name;
// 检查DataTable是否包含此列
if (dt.Columns.Contains(tempName))
{
// 判断此属性是否有Setter
if (!pi.CanWrite)
continue;
object value = dr[tempName];
if (value != DBNull.Value)
pi.SetValue(t, value, null);
}
}
判断如果传入的DataTable和实体类的字段一致的话,就把此值赋给上面新定义的泛型对象t。最后ts.Add(t);把此t加入集合
完整代码及使用方式如下:
运行结果:
学号:001,姓名:张三学号:002,姓名:李四
注意:
1、在上面的代码中,
pi.SetValue(t, value, null);最好写成以下形式:
pi.SetValue(t, Convert.ChangeType(value, pi.PropertyType, CultureInfo.CurrentCulture), null);
2、数字不能为泛型,否则出现以下错误
类型“System.String”的对象无法转换为类型“System.Nullable`1[System.Int32]”。
当然这里是可以,原因是在增加列的同时指定了数据类型,如下代码,如果不指定数据类型就会出现错误
dt.Columns.Add("StuAge", Type.GetType("System.Int32"));
但是我们在实际开发的时候,一般是系统默认指定,而没有指定列类型。所以最好在你的Model层把数字为泛型的地方都取消,如上面的public int? StuAge { get; set; } 最好写为public int StuAge { get; set; }
参考:http://www.xueit.com/html/2009-09/21_4465_00.html
分享到:
相关推荐
非常方便的datatable类型与List泛型实体对象集合的互相转换,在面向对象的开发中,经常会用到的,如使用上不懂可以咨询我
### .Net Framework 中的各种类型转换方法 在 .Net Framework 的开发过程中,类型转换是一项非常重要的技术,它确保了数据能够以正确的方式在不同系统或组件之间流动。本文将详细介绍 .Net Framework 中各种类型的...
通用转换方法的核心在于能够自动识别`DataSet`中`DataTable`的列类型,并将其转换为相应的`List<T>`类型,其中`T`为具体的业务实体类。以下是对代码片段的详细解析: ```csharp public List<T> ChangeDataSet...
首先,`DataTable`是.NET Framework中的一个类,用于存储和管理表格形式的数据。它可以从数据库查询结果、XML文件或其他数据源获取数据,并提供了一组方法和属性来操作这些数据。而`IList<T>`是接口,它是`List<T>`...
在.NET开发中,DataTable和List是两种常用的...总之,将DataTable转换为List是.NET开发中常见的数据操作,理解不同类型间的转换规则和使用适当的转换策略,能帮助我们更高效地在数据访问层和业务逻辑层之间传递数据。
这里首先调用`GetList`方法获取数据集,然后调用`DataTableToList`方法将`DataTable`转换为`List<Model.tbl_JW_Score>`。这样的设计使得数据处理更加灵活,便于后续业务逻辑的实现。 ### 总结 通过以上分析,我们...
序列化是将对象的状态转换为可以存储或传输的形式的过程。通常用于以下场景: - 对象可以通过网络传输。 - 对象可以持久化到磁盘上。 - 序列化后的对象可以在不同的系统之间共享。 - 反序列化是序列化的逆过程,...
- 可能包含一个将DataTable转换为List的工具方法或类(Utility),以简化数据库数据与实体列表之间的转换。 4. 视图设计 - 设计一个视图来展示图片列表,使用Razor语法显示图片数据。 - 需要定义表格样式以及动态...
- ADO.NET是.NET Framework中用于数据库访问的组件,它提供了DataSet、DataTable、DataAdapter等对象,支持离线数据操作和关系数据与XML的转换。 16. **属性** - 属性是C#中一种特殊的方法,用来封装对象的成员...
4. **集合框架**:Java集合框架包括List、Set、Queue和Map等接口及其实现类,如ArrayList、HashSet、LinkedList、HashMap等,它们为数据存储和操作提供了强大的支持。 5. **多线程**:Java内置了对多线程的支持,...
`ListToDataTable`方法将泛型列表转换为DataTable对象,而`DataTableToList<T>`则将DataTable转换回指定类型的泛型列表。这对于数据绑定和数据库操作十分方便。 ```csharp public static DataTable ListToDataTable...
.NET Framework 类库是微软开发的一个核心组件,它为开发者提供了丰富的类和接口,用于构建、运行和管理基于.NET Framework的应用程序。这个类库是.NET Framework的重要组成部分,它包含了多个命名空间,每个命名...
.NET框架是微软开发的一种软件框架,它为开发者提供了一个运行环境和编程模型,使得构建、部署和运行基于Windows的应用程序变得更加便捷。以下是一些.NET面试题及其相关知识点的详细解释: 1. **C#基础** - **面向...
这个框架包含了大量的类库,这些类库为C#和其他.NET兼容语言提供了丰富的功能支持。以下是一些.NET Framework 4.0常用类库的关键知识点: 1. **System** 命名空间:这是.NET Framework的基础命名空间,包含了众多...
- ADO.NET是.NET框架中处理数据库的组件,包括DataSet、DataTable、DataAdapter等。 - 掌握如何执行SQL查询、事务处理以及参数化查询以防止SQL注入。 8. **ASP.NET Web Forms与MVC** - Web Forms是ASP.NET的早期...
2. 将数据集转换为 `DataTable`,计算总记录数除以 `pageSize` 的结果 `Count`。 3. 针对可能出现的余数情况,使用条件语句确定 `pageCount`: - 如果 `Count` 大于 `(dt_1.Rows.Count) / 30`,说明总页数应向上...
`BtnExcel_Click`事件处理程序被触发时,首先从`Session`中获取一个类型为`List<Snell.Model.Guide.SignInfo>`的对象,这是存储要导出数据的列表。然后,遍历这个列表,为每个`SignInfo`对象创建一个新的`DataRow`...
总的来说,这个项目为学习.NET编程提供了一个系统化的途径,通过每周一课的方式,逐步积累和巩固.NET的核心知识。无论你是.NET新手还是有经验的开发者,都可以从中受益,提升自己的编程技能。同时,与HTML标签相关的...
本篇文章主要探讨如何在C#中通过使用`DataSet`对象来读取数据库,并将其转换为泛型集合,如`List<T>`。 首先,我们来看一个基本的示例代码,它演示了如何从数据库获取数据并将其绑定到一个`GridView`控件上。`Page_...
例如,如果数据源是一个`DataTable`或`List<T>`对象,可以直接赋值给`DataSource`,控件会自动根据数据源的结构生成列。 2. **事件驱动编程**:在实时数据传递中,事件扮演着关键角色。`DataGridView`提供了多种...