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

如何在C#中通过OOP方式实现DataGridView数据加载

核心问题说明

你当前的get方法仅在方法内部读取了数据库字段值,没有将数据返回给外部调用方,因此窗体侧无法拿到查询结果,自然无法填充到DataGridView控件中。以下是可直接落地的修改方案:


方案1:用实体集合传递数据(符合OOP设计思想)

步骤1:定义学生实体类存储单条数据

// 专门用来存储学生单条记录的实体类
public class Student
{
    public string StName { get; set; }
    public string Nic { get; set; }
}

步骤2:修改数据操作类的get方法,返回数据集合

public class StdDbHelper
{
    // 方法返回值修改为List<Student>集合,存储所有查询到的学生数据
    public List<Student> GetAllStudents()
    {
        List<Student> studentList = new List<Student>();
        // 使用using包裹数据库连接,代码执行完会自动释放连接,不需要手动写Close
        using (SqlConnection con = new SqlConnection("server =.; initial catalog=testdb; User ID=sa; Password=123"))
        {
            string sql = "select * from std";
            con.Open();
            SqlCommand cm = new SqlCommand(sql, con);
            SqlDataReader dr = cm.ExecuteReader();
            while (dr.Read())
            {
                Student stu = new Student();
                stu.StName = dr["st_name"].ToString();
                stu.Nic = dr["nic"].ToString();
                studentList.Add(stu);
            }
        }
        return studentList;
    }
}

步骤3:窗体侧绑定数据到DataGridView

有两种绑定方式可选:

方式A:自动绑定(最简便)

提前给DataGridView的每一列设置DataPropertyName属性,对应实体类的属性名:姓名列设为StName,Nic列设为Nic,之后直接赋值数据源即可:

StdDbHelper ss = new StdDbHelper();
List<Student> stuList = ss.GetAllStudents();
dataGridView1.DataSource = stuList;

方式B:手动添加行(适合自定义行逻辑的场景)

StdDbHelper ss = new StdDbHelper();
List<Student> stuList = ss.GetAllStudents();
dataGridView1.Rows.Clear();
foreach (var stu in stuList)
{
    // 参数顺序和DataGridView列的顺序保持一致即可
    dataGridView1.Rows.Add(stu.StName, stu.Nic);
}

方案2:用DataTable传递数据(无需定义实体,适合快速实现)

如果不想额外写实体类,也可以直接用DataTable承载查询结果:

修改数据操作类方法

public DataTable GetAllStudentTable()
{
    DataTable dt = new DataTable();
    using (SqlConnection con = new SqlConnection("server =.; initial catalog=testdb; User ID=sa; Password=123"))
    {
        string sql = "select * from std";
        SqlDataAdapter sda = new SqlDataAdapter(sql, con);
        // 自动完成连接打开、查询、填充、连接关闭的全流程
        sda.Fill(dt);
    }
    return dt;
}

窗体绑定代码

StdDbHelper ss = new StdDbHelper();
dataGridView1.DataSource = ss.GetAllStudentTable();

内容的提问来源于stack exchange,提问作者kobi udemy

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 07:36:03