You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C#中无需使用SQL如何将类作为数据库为DataGridView提供数据

实现方案

你可以直接用「实体类+内存泛型集合」的方案实现需求,完全不需要SQL数据库,操作也非常简单:


第一步:定义实体类(对应数据库表结构)

首先根据你的业务数据定义实体类,类的公共属性对应表的字段,示例如下(以学生信息管理为例):

// 给类加Serializable特性是为了后续可选的本地持久化,不需要存本地可以不加
[Serializable]
public class Student
{
    // 公共可读写属性会被DataGridView自动识别为表格列
    public int 学号 { get; set; }
    public string 姓名 { get; set; }
    public int 年龄 { get; set; }
    public string 专业 { get; set; }
}

注意:属性必须是public的可读写属性,DataGridView才能自动生成对应列。


第二步:用泛型集合做内存存储(对应数据库)

优先用BindingList<T>而不是普通的List<T>,前者支持数据变更自动同步到DataGridView,不需要手动刷新界面:

// 把这个集合声明为Form类的全局成员,整个窗口范围内都能操作
private BindingList<Student> studentDb = new BindingList<Student>();

第三步:绑定集合到DataGridView

在Form的Load事件里完成绑定即可,还可以提前加测试数据验证效果:

private void Form1_Load(object sender, EventArgs e)
{
    // 插入测试数据
    studentDb.Add(new Student { 学号 = 1, 姓名 = "张三", 年龄 = 19, 专业 = "计算机科学与技术" });
    studentDb.Add(new Student { 学号 = 2, 姓名 = "李四", 年龄 = 20, 专业 = "软件工程" });
    
    // 绑定集合到DataGridView,运行后表格会自动生成列并加载数据
    dataGridView1.DataSource = studentDb;
}

常用增删改查操作(直接操作集合即可)

  • 新增数据:直接调用studentDb.Add(新的Student对象),界面会自动显示新行
  • 修改数据:直接修改对应位置的对象属性即可,比如studentDb[0].年龄 = 21,界面会自动同步变更
  • 删除数据:调用studentDb.RemoveAt(行索引)或者studentDb.Remove(指定Student对象)
  • 查询数据:用LINQ筛选即可,比如筛选年龄大于19的学生:
    var queryResult = studentDb.Where(s => s.年龄 > 19).ToList();
    // 要把查询结果绑定回表格的话,转成BindingList即可
    dataGridView1.DataSource = new BindingList<Student>(queryResult);
    

可选:数据本地持久化(关闭程序后数据不丢失)

如果需要下次启动程序还能保留数据,可以把集合序列化保存到本地文件,启动时反序列化读取即可,示例用系统自带的二进制序列化实现:

// 关闭窗口时保存数据
private void Form1_FormClosing(object sender, FormClosingEventArgs e)
{
    using (FileStream fs = new FileStream("data.dat", FileMode.Create))
    {
        BinaryFormatter formatter = new BinaryFormatter();
        formatter.Serialize(fs, studentDb.ToList());
    }
}

// 窗口加载时读取本地数据
private void LoadLocalData()
{
    if (File.Exists("data.dat"))
    {
        using (FileStream fs = new FileStream("data.dat", FileMode.Open))
        {
            BinaryFormatter formatter = new BinaryFormatter();
            List<Student> localData = (List<Student>)formatter.Deserialize(fs);
            studentDb = new BindingList<Student>(localData);
        }
    }
}

内容的提问来源于stack exchange,提问作者Tv B

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.30 19:54:03