获取DataTable中的某一列及增加一行数据

本文介绍了如何在C#中使用DataTable,包括如何获取DataTable中某一列的数据并存储到List<T>中,以及两种添加新行的方法。第一种方法适用于动态列数,通过循环设置每列数据;第二种方法适用于固定列数,直接用对象数组初始化新行。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

C#中获取DataTable中的某一列数据,存入List<T>

Field 需要用到System.Data.DataSetExtensions

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data;

namespace ConsoleApplication108
{
    class Program
    {

        static void Main(string[] args)
        {
            DataTable dt = new DataTable();

            dt.Columns.Add("ID", typeof(int));
            dt.Columns.Add("Qty", typeof(int));
            dt.Columns.Add("Name", typeof(string));

            dt.Rows.Add(new object[] { 0, 321, 33 });
            dt.Rows.Add(new object[] { 1, 100, 4 });
            dt.Rows.Add(new object[] { 2, 355, 23 });

            List<int> results = dt.AsEnumerable().Select(x => x.Field<int>("Qty")).ToList();

            foreach(var i in results)
            {
                Console.WriteLine(i);                
            }
            Console.ReadKey();
        }
    }
}  

datatable 中增加一行数据的2 种方法:

1. 列数可能为动态列数

System.Data.DataRow dr = table.NewRow();
        table.Rows.Add(dr);
        dr[0] = logData.name;
        dr[1] = logData.time;
        for (int i = 0; i <= this.PropertyNames.Value.Count - 1; i++)
        {
            dr[i + 2] = logData.values[i];
        }

2. 列数为固定列数:

table.Rows.Add(
            new object[]
            {
                logData.name,
                logData.time,
                logData.value
            }
            );     

<think>嗯,用户问的是如何在C#获取DataTable最后一行的各列数据。首先,我需要回忆一下DataTable的结构。DataTable有Rows集合,里面每一行都是DataRow对象。要获取最后一行,应该先确定Rows集合的最后一个元素。 接着想到,Rows的索引是从0开始的,所以最后一行的索引应该是Rows.Count - 1。不过要注意,如果DataTable没有数据的话,Rows.Count会是0,这时候直接访问会导致索引越界异常。所以在代码中需要先检查是否有数据行存在。 然后,用户需要获取各列的数据。假设列名已知的话,可以通过列名来访问,比如row["列名"]。或者也可以通过索引来获取,比如row[0]。不过用列名更安全,特别是当列顺序可能变化的时候。 接下来,可能的步骤是:首先检查DataTable是否为空,然后获取最后一行,再遍历各列取出数据。或者用户可能需要特定列的数据,所以给出两种方式可能更好。 另外,可能需要提醒用户注意异常处理,比如使用if语句判断Rows.Count是否大于0,避免程序崩溃。或者使用LINQ的LastOrDefault()方法,但需要引入System.Linq,并且处理可能的null值。 然后,组织回答的结构。先介绍基本方法,然后给出示例代码,包括检查空表,获取最后一行,然后读取数据的方式。同时,提醒注意事项,比如列名存在性、空值处理等。 可能用户的应用场景是在处理数据库查询结果或者导入的Excel数据,需要获取最新添加数据行进行分析或显示。因此,代码示例需要简洁明了,容易集成到他们的项目中。 最后,确保示例代码语法正确,比如使用DataRow row = dataTable.Rows[dataTable.Rows.Count - 1];,然后展示如何用列名和索引获取数据。同时强调异常处理的重要性,比如使用if (dataTable.Rows.Count > 0)的判断。</think>在C#获取DataTable最后一行的各列数据,可以通过以下步骤实现: --- ### 一、基本方法 1. **获取最后一行** 使用`DataTable.Rows[DataTable.Rows.Count - 1]`访问最后一行 ```csharp if (dataTable.Rows.Count > 0) { DataRow lastRow = dataTable.Rows[dataTable.Rows.Count - 1]; } ``` 2. **提取各列数据** - **通过列名获取** ```csharp string column1Value = lastRow["ColumnName1"].ToString(); int column2Value = Convert.ToInt32(lastRow["ColumnName2"]); ``` - **通过列索引获取** ```csharp string column1Value = lastRow[0].ToString(); int column2Value = Convert.ToInt32(lastRow[1]); ``` --- ### 二、完整示例代码 ```csharp // 假设已有DataTable实例dataTable if (dataTable != null && dataTable.Rows.Count > 0) { DataRow lastRow = dataTable.Rows[dataTable.Rows.Count - 1]; // 遍历所有列 foreach (DataColumn column in dataTable.Columns) { string columnName = column.ColumnName; object value = lastRow[columnName]; Console.WriteLine($"列 {columnName}: {value}"); } // 或直接指定列名 string id = lastRow["ID"].ToString(); DateTime date = Convert.ToDateTime(lastRow["CreateTime"]); } else { Console.WriteLine("DataTable为空或没有数据行"); } ``` --- ### 三、注意事项 1. **空值检查** 使用前需判断`dataTable.Rows.Count > 0`,避免索引越界异常 ```csharp if (dataTable.Rows.Count == 0) return; ``` 2. **列名有效性** 如果通过列名访问,需确保列名存在,否则会抛出`ArgumentException` 3. **类型转换** 使用`Convert.ToXXX()`或`TryParse`方法处理数据类型转换,建议添加`null`值判断: ```csharp if (lastRow["Age"] != DBNull.Value) { int age = Convert.ToInt32(lastRow["Age"]); } ``` --- ### 四、扩展方法(LINQ) 通过LINQ的`LastOrDefault()`方法获取最后一行: ```csharp using System.Linq; DataRow lastRow = dataTable.AsEnumerable().LastOrDefault(); if (lastRow != null) { string name = lastRow.Field<string>("Name"); } ``` --- 通过以上方法,可以安全高效地获取DataTable最后一行数据。实际应用中请根据业务需求选择合适的方式,并添加必要的异常处理。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值