DataGridView 与 DataTable 与csv 序列

DataGridView 和 DataTable 对比速查表

项目 DataGridView (显示控件) DataTable (数据表)
作用 表格显示控件,用户界面 内存数据表,数据源
创建 dataGridView1 (拖拽) DataTable dt = new DataTable();
绑定关系 dataGridView1.DataSource = dt; ← 数据源

📊 DataGridView 常用属性

属性/方法 说明 示例代码
Columns.Count 列数量 int cols = dataGridView1.Columns.Count;
Rows.Count 行数量 int rows = dataGridView1.Rows.Count;
Columns[i].HeaderText 列标题文本 string title = dataGridView1.Columns[0].HeaderText;
[列,行].Value 访问单元格 object val = dataGridView1[0,0].Value;
Rows[i].Cells[j].Value 访问单元格 object val = dataGridView1.Rows[0].Cells[0].Value;

🗂️ DataTable 常用属性和方法

属性/方法 说明 示例代码
dt.Columns.Add() 添加列 dt.Columns.Add("姓名");
dt.NewRow() 创建新行 DataRow row = dt.NewRow();
dt.Rows.Add() 添加行 dt.Rows.Add(row);
dt.Columns 所有列的集合 foreach(DataColumn col in dt.Columns)
dt.Rows 所有行的集合 foreach(DataRow row in dt.Rows)
dt.Columns[i].ColumnName 列名 string name = dt.Columns[0].ColumnName;

🔄 两者交互操作

从 DataGridView 提取到 DataTable

csharp

复制代码
DataTable dt = new DataTable();

// 1. 复制列标题
for (int i = 0; i < dataGridView1.Columns.Count; i++)
{
    dt.Columns.Add(dataGridView1.Columns[i].HeaderText);
}

// 2. 复制行数据
for (int i = 0; i < dataGridView1.Rows.Count - 1; i++)
{
    DataRow dr = dt.NewRow();
    for (int j = 0; j < dataGridView1.Columns.Count; j++)
    {
        dr[j] = dataGridView1[j, i].Value;
    }
    dt.Rows.Add(dr);
}

从 DataTable 绑定到 DataGridView

csharp

复制代码
// 直接绑定
dataGridView1.DataSource = dt;

// 获取绑定的DataTable
DataTable dt = (DataTable)dataGridView1.DataSource;

CSV序列化与反序列化概念速查表

概念 含义 对应操作 代码示例
CSV文件 逗号分隔值文件,纯文本表格格式 数据交换格式 data.csv
序列化 将数据 → 保存为文件 保存/导出 DataTable → CSV文件
反序列化 将文件 → 加载为数据 读取/导入 CSV文件 → DataTable
分隔符 CSV用逗号,分隔列 列边界 "张三,25,北京"
表头 第一行列标题 列名定义 姓名,年龄,城市
数据行 表头后的实际数据 数据内容 张三,25,北京

🔄 CSV 序列化流程(保存)

步骤 操作 关键代码
1 从DataGridView提取数据到DataTable dt.Columns.Add(dataGridView1.Columns[i].HeaderText)
2 打开保存对话框 SaveFileDialog dialog = new SaveFileDialog()
3 写入表头(列名) data += dt.Columns[i].ColumnName + ","
4 写入数据行 data += dt.Rows[i][j] + ","
5 写入文件 sr.WriteLine(data)

保存代码框架:

csharp

复制代码
// 1. 提取数据到DataTable
DataTable dt = new DataTable();
for (int i = 0; i < dataGridView1.Columns.Count; i++)
{
    dt.Columns.Add(dataGridView1.Columns[i].HeaderText);
}
for (int i = 0; i < dataGridView1.Rows.Count; i++)
{
    DataRow dr = dt.NewRow();
    for (int j = 0; j < dataGridView1.Columns.Count; j++)
    {
        dr[j] = dataGridView1[j, i].Value;
    }
    dt.Rows.Add(dr);
}

// 2. 保存为CSV
SaveFileDialog dialog = new SaveFileDialog();
if (dialog.ShowDialog() == DialogResult.OK)
{
    using (StreamWriter sw = new StreamWriter(dialog.FileName))
    {
        // 写表头
        string header = string.Join(",", dt.Columns.Cast<DataColumn>().Select(c => c.ColumnName));
        sw.WriteLine(header);
        
        // 写数据行
        foreach (DataRow row in dt.Rows)
        {
            string line = string.Join(",", row.ItemArray);
            sw.WriteLine(line);
        }
    }
}

🔄 CSV 反序列化流程(加载)

步骤 操作 关键代码
1 打开文件对话框选择CSV OpenFileDialog ofd = new OpenFileDialog()
2 读取文件行 string line = sr.ReadLine()
3 按逗号分割 string[] values = line.Split(',')
4 第一行作为表头创建列 dt.Columns.Add(values[i])
5 后续行作为数据 dt.Rows.Add(values)
6 绑定到DataGridView dataGridView1.DataSource = dt

加载代码框架:

csharp

复制代码
// 1. 选择文件
OpenFileDialog ofd = new OpenFileDialog();
if (ofd.ShowDialog() == DialogResult.OK)
{
    DataTable dt = new DataTable();
    bool isHeader = true;
    
    // 2. 读取文件
    using (StreamReader sr = new StreamReader(ofd.FileName))
    {
        while (!sr.EndOfStream)
        {
            string line = sr.ReadLine();
            string[] values = line.Split(',');
            
            if (isHeader)  // 第一行是表头
            {
                foreach (string col in values)
                    dt.Columns.Add(col);
                isHeader = false;
            }
            else  // 数据行
            {
                dt.Rows.Add(values);
            }
        }
    }
    
    // 3. 显示数据
    dataGridView1.DataSource = dt;
}

📊 核心概念对比

对比项 序列化(保存) 反序列化(加载)
方向 数据 → 文件 文件 → 数据
起点 DataTable/DataGridView CSV文件
终点 CSV文件 DataTable/DataGridView
关键操作 写文件(WriteLine) 读文件(ReadLine)
分隔处理 用逗号连接数据 按逗号分割字符串
表头处理 写入列名 读取为列定义

💡 记忆口诀

  1. 序列化 = 保存 = 数据变文件

  2. 反序列化 = 加载 = 文件变数据

  3. CSV格式:表头一行 + 数据多行,逗号分隔

  4. 流程:对话框选文件 → 读/写行 → 分割/连接 → 绑定/保存

🎯 一句话总结

序列化:DataTable → CSV文件(保存数据)
反序列化:CSV文件 → DataTable(加载数据)

相关推荐
Greg_Zhong12 分钟前
前端基础知识实践总结,每日更新一点...
前端·前端基础·每日学习归类
We་ct32 分钟前
LeetCode 148. 排序链表:归并排序详解
前端·数据结构·算法·leetcode·链表·typescript·排序算法
IT_陈寒1 小时前
JavaScript开发者必看:5个让你的代码性能翻倍的隐藏技巧
前端·人工智能·后端
还是大剑师兰特1 小时前
Vue3 中 computed(计算属性)完整使用指南
前端·javascript·vue.js
井川不擦2 小时前
前端安全通信方案:RSA + AES 混合加密
前端
孜孜不倦不忘初心2 小时前
Ant Design Vue 表格组件空数据统一处理 踩坑
前端·vue.js·ant design
AD_wjk2 小时前
Android13系统集成方案
前端
Joyee6912 小时前
RN 的新通信模型 JSI
前端·react native
somebody2 小时前
零经验学 react 的第6天 - 循环渲染和条件渲染
前端
青晚舟2 小时前
AI 时代前端还要学 Docker & K8s 吗?我用一次真实部署经历说清楚
前端·github