C# 维数组转换为DataTable 的三个方法
### C# 中维数组转换为 DataTable 的三种方法 在 C# 开发中,经常会遇到需要将数据从一种格式转换到另一种格式的需求,特别是在处理 Excel 数据时。本文将介绍如何使用 C# 将多维数组转换成 `DataTable`,这对于操作 Excel 数据并将其转化为更易于处理的格式非常有用。 #### 方法一:单列数据转换 **描述**:此方法适用于只有一个字段(即列)的情况。它接收一个字符串数组和一个列名作为参数,并返回一个新的 `DataTable` 对象。 **代码示例**: ```csharp public static DataTable Convert(string ColumnName, string[] Array) { DataTable dt = new DataTable(); dt.Columns.Add(ColumnName, typeof(string)); for (int i = 0; i < Array.Length; i++) { DataRow dr = dt.NewRow(); dr[ColumnName] = Array[i]; dt.Rows.Add(dr); } return dt; } ``` **解释**: 1. 创建一个新的 `DataTable` 实例。 2. 向 `DataTable` 添加一个名为 `ColumnName` 的列。 3. 遍历输入的字符串数组 `Array`。 4. 对于每个元素,创建一个新的 `DataRow` 并设置该行的值为当前数组元素的值。 5. 将新创建的行添加到 `DataTable` 中。 6. 返回填充后的 `DataTable`。 #### 方法二:多列数据转换 **描述**:当有多列数据需要转换时,可以使用这种方法。它接受一个字符串数组列表(每个元素代表一列的数据)以及一个字符串数组(包含列名),并返回一个新的 `DataTable` 对象。 **代码示例**: ```csharp public static DataTable Convert(string[] ColumnNames, List<string[]> Arrays) { DataTable dt = new DataTable(); foreach (string columnName in ColumnNames) { dt.Columns.Add(columnName, typeof(string)); } int rowsCount = Arrays[0].Length; for (int i = 0; i < rowsCount; i++) { DataRow dr = dt.NewRow(); for (int j = 0; j < ColumnNames.Length; j++) { dr[ColumnNames[j]] = Arrays[j][i]; } dt.Rows.Add(dr); } return dt; } ``` **解释**: 1. 创建一个新的 `DataTable` 实例。 2. 遍历 `ColumnNames` 数组中的每个元素,并向 `DataTable` 添加相应的列。 3. 获取第一列数据的长度,假设所有列的数据长度相同。 4. 遍历每一行数据,对于每一行: - 创建一个新的 `DataRow`。 - 遍历每一列数据,将对应位置的值填入新创建的行。 - 将新创建的行添加到 `DataTable` 中。 5. 返回填充后的 `DataTable`。 #### 方法三:使用反射进行动态转换 **描述**:此方法适用于需要根据动态类型转换的情况。它通过使用反射来自动识别输入数组的类型,并根据这些类型创建 `DataTable`。 **代码示例**: ```csharp public static DataTable Convert(string[] ColumnNames, object[] Arrays) { DataTable dt = new DataTable(); // 添加列 for (int i = 0; i < ColumnNames.Length; i++) { dt.Columns.Add(ColumnNames[i], Arrays[i].GetType()); } // 填充数据 int rowsCount = Arrays[0].GetType().GetProperty("Length").GetValue(Arrays[0]).ToString(); for (int i = 0; i < rowsCount; i++) { DataRow dr = dt.NewRow(); for (int j = 0; j < ColumnNames.Length; j++) { dr[ColumnNames[j]] = Arrays[j].GetType().GetProperty(i.ToString()).GetValue(Arrays[j]); } dt.Rows.Add(dr); } return dt; } ``` **解释**: 1. 创建一个新的 `DataTable` 实例。 2. 使用反射获取每个数组的类型,并根据这些类型创建相应类型的列。 3. 使用反射获取数组的长度。 4. 遍历每一行数据,对于每一行: - 创建一个新的 `DataRow`。 - 使用反射获取每个数组中的值,并填入新创建的行。 - 将新创建的行添加到 `DataTable` 中。 5. 返回填充后的 `DataTable`。 ### 总结 以上介绍了三种不同的方法,用于将 C# 中的维数组转换为 `DataTable`。这些方法涵盖了从简单的单列数据转换到复杂的多列数据转换的各种场景。选择合适的方法取决于具体的应用需求。通过这些方法,我们可以更高效地处理 Excel 数据或其他来源的数据,并轻松地将其整合到 C# 应用程序中。


























using System.Data;
namespace ArrayToDataTable
...{
class ArrayToDataTable
...{
/**//// <summary>
/// 把一个一维数组转换为DataTable
/// </summary>
/// <param name="ColumnName">列名</param>
/// <param name="Array">一维数组</param>
/// <returns>返回DataTable</returns>
/// <remarks>随风工作室 http://www.jobroon.cn/ </remarks>
public static DataTable Convert(string ColumnName, string[] Array)
...{
DataTable dt = new DataTable();
dt.Columns.Add(ColumnName, typeof(string));
for (int i = 0; i < Array.Length; i++)
...{
DataRow dr = dt.NewRow();
dr[ColumnName] = Array[i].ToString();
dt.Rows.Add(dr);
}
return dt;
}


- 粉丝: 1
我的内容管理 展开
我的资源 快来上传第一个资源
我的收益
登录查看自己的收益我的积分 登录查看自己的积分
我的C币 登录后查看C币余额
我的收藏
我的下载
下载帮助


最新资源
- 高阶逻辑定理证明:第15届国际会议论文集
- (源码)基于CC++编程语言的简易操作系统.zip
- (源码)基于意图识别的假肢控制系统.zip
- (源码)基于ARM CortexM处理器的迷宫游戏开发.zip
- (源码)基于编程语言的Smart Utility Vehicle.zip
- 基于 MAX78000 与 SSD 目标检测网络的猫咪识别喂食器:借助单片机 CNN 加速器实现神经网络计算
- (源码)基于Python和DGL的图计算实验框架MyPaGraph.zip
- 从零开始设计并训练神经网络,助你透彻理解它
- (源码)基于Python的JSON数据图形化展示系统.zip
- (源码)基于Arduino的传感器读取系统.zip
- 电气工程手册:计算机与数字设备精华
- (源码)基于Arduino框架的IoT环境监控系统.zip
- (源码)基于Python的模拟村庄发展项目-村庄模拟器.zip
- (源码)基于Keil C51编程语言的MCS52单片机打地鼠游戏.zip
- 基于基于常用 CNN 神经网络实现超 30 万条手写数学符号识别
- (源码)基于C++的太阳能飞机控制系统.zip


