如何用OO编程风格在datagridview中显示数据

本文关键字:datagridview 显示 数据 风格 何用 OO 编程 | 更新日期: 2023-09-27 18:29:33

这是我创建的代码,用于显示数据库中datagridview上的所有数据,工作正常。但我希望使用面向对象编程,这意味着这个表单只用于调用方法,并且该方法是从其他.cs文件创建的,但我不知道从哪里开始。可以教我如何在OOProgramming风格上做到这一点吗?谢谢你的帮助,非常感谢。

using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.Data.OleDb;
namespace PreviewRecord
{
 public partial class ViewPurchase : Form
 {
    OleDbConnection myConnection;
    OleDbDataAdapter adap;
    DataSet ds;
    public ViewPurchase(string aa)
    {
        InitializeComponent();
        label2.Text = aa;
    }
    private void ViewPurchase_Load(object sender, EventArgs e)
    {
        try
        {
            myConnection = new OleDbConnection();
            myConnection.ConnectionString = @"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:'Users'lenovo'Desktop'DataEntry'DataEntry'Database'Purchase.accdb";
            myConnection.Open();
            adap = new OleDbDataAdapter("SELECT * FROM " + label2.Text, myConnection);
            ds = new System.Data.DataSet();
            adap.Fill(ds, "Account_Records");
            dataGridView1.DataSource = ds.Tables[0];
        }
        catch (Exception ex)
        {
            Console.WriteLine("Exception in DBHandler", ex);
        }
    }
}

}

如何用OO编程风格在datagridview中显示数据

在迈向更坚实的面向对象设计的道路上,一个非常好的起点是开始考虑如何在ViewPurchase形式中分离关注点。目前,这个类负责很多事情:

  • 连接到数据库
  • 使用开放数据库连接获取原始数据
  • 筛选出用于演示的数据
  • 呈现过滤后的数据
  • 数据库连接完成后关闭

通过将这些职责中的一些从这个类中移除并放到一个新的类中,您将将UI逻辑(表单类)与为其提供数据所需的业务逻辑解耦。这将问题分解为两个不同的部分,更容易单独解决,而不是同时担心所有事情。当您创建这个新的业务逻辑类时,您可以在它被实例化时向ViewPurchase提供它的实例,并简单地像这样调用它来获取数据:

private void ViewPurchase_Load(object sender, EventArgs e)
{
    DataTable myData = _dataRetriever.GetData();
    dataGridView1.DataSource = myData;
}

请注意上面示例中的实例变量_dataRetriever。理想情况下,该变量将填充在ViewPurchase构造函数中,并继承某种接口,以便允许您在未来创建单元测试,并单独测试各个类。这几乎就是依赖注入背后的全部概念,这是OOP中的另一个良好实践。它可能看起来有点像这样:

interface IDataRetriever
{
    DataTable GetData();
}
class DataRetriever : IDataRetriever
{
    public DataTable GetData()
    {
        // TODO: How do we get the data?
    }
}
public partial class ViewPurchase : Form
{
    readonly IDataRetriever _dataRetriever;
    public ViewPurchase(IDataRetriever dataRetriever, string aa)
    {
        _dataRetriever = dataRetriever;
        label2.Text = aa;
    }
}

我知道,如果你只是想在面向对象的设计上下功夫,这可能是一个很大的收获,但如果你慢慢来,试着消化我在这里介绍的每一部分,我想你会发现你已经熟悉了核心概念——这真的只是学习将它们组合在一起的新方法!我们在这里真正做的是创建小类,并从中组成一个更大的单元。

我希望这个答案能有所帮助,祝你在学习面向对象编程时好运!

所谓面向对象编程风格,可能是指使用设计模式。

您应该签出模型视图视图模型模式。

简单地说,MVVM使用三个文件:

  1. 视图:一个控制数据在屏幕上显示方式的文件,通常用XAML为现代Windows应用程序编写
  2. 模型:您想要呈现的"实体",在本例中是数据库管理类
  3. 视图模型:控制视图和模型之间的连接。它通常隐藏模型的实现细节,并为视图提供所需的所有数据