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
相关产品推荐
相关产品推荐

