如何将DataTable从一个类传递到另一个类

本文关键字:一个 另一个 DataTable | 更新日期: 2023-09-27 18:15:21

目前我正在学习MySQL,抱歉我的新手问题。这是我的问题

我有2类,第一个是Windows窗体,而另一个只是一个类,我想包含从SQL的所有进程。这是我的代码在SQL类

public void SampleQuery(string tablename)
    {
        DataTable dataTable;
        string query = "SELECT * FROM " + tablename;
        //Open connection
        if (this.OpenConnection() == true)
        {
            adapter = new MySqlDataAdapter(query,connection);
            dataTable =  new DataTable();
            adapter.Fill(dataTable);
            //close Connection
            this.CloseConnection();
            return;
        }

我想做的是,显示数据从SQL与DataGridView。是否有可能在上面的SQL类编码数据视图?还是必须在Windows窗体部分?

如果必须在windows窗体,如何抛出的数据表,现在持有所有的数据到windows窗体类?

非常感谢你对我的帮助。如果我的问题听起来很荒谬,尽管问我。

如何将DataTable从一个类传递到另一个类

您可以使用DataGrid DataSource属性

示例代码演示思想:

class MyForm : Form
{
   public MyForm()
   {
      InitializeComponent();
      DataAccess  dataAccess = new DataAccess();
      m_dataGrid.DataSource = DataAccess.SampleQuery("MyTable");
   }
}
class DataAccess 
{
   public DataTable SampleQuery(string tablename)
   {
      DataTable dataTable;
      // 
      // Your Code
      // ..
      return dataTable;
   }
}

我认为是Form Load事件处理程序是加载数据的好地方(不是构造函数;)正如上面所示)。你也可以实现一些缓存(每次加载数据表,如果表单是打开的,效率不高:))

让您的SampleQuery方法返回dataTable:

public DataTable SampleQuery(string tablename) {
    // Fill dataTable...
    return dataTable
}

然后在表单中调用该方法并将dataTable绑定到dataGridView:

dataGridView.DataSource = SampleQuery("MyTable");

在此场景中,您将更改方法以返回DataTable而不是什么都不返回(void),并以

结束
return dataTable;

然后在调用时捕获它:

DataGridView.BindingSource = yourDal.SimpleQuery("Foo");

我个人建议基于类的对象而不是DataTable,但是DataTable也可以。

指定DataTableSampleQuery方法的返回类型。

//Instance method
public class Test
{
 public DataTable SampleQuery(string tablename)
 {
    DataTable dataTable=null;
    ....
    return dataTable;
 }
//or design a static method
 public static DataTable StaticSampleQuery(string tablename)
 {
    DataTable dataTable=null;
    ....
    return dataTable;
 }
}

在winform中,使用静态或实例方法。

//Instance method
Test obj=new Test();
dataGridView1.Datasource=obj.SampleQuery("tableName");
//Static method
dataGridView1.Datasource=Test.StaticSampleQuery("tableName");

从sqlclass中返回Datatable,并将该Datatable指定为grid的数据源

     public DataTable SampleQuery(string tablename)
            {
                DataTable dataTable;
                string query = "SELECT * FROM " + tablename;
                //Open connection
                if (this.OpenConnection() == true)
                {
                    adapter = new MySqlDataAdapter(query,connection);
                    dataTable =  new DataTable();
                    adapter.Fill(dataTable);
                    //close Connection
                    this.CloseConnection();
                    return dataTable;
                }
              return dataTable;
            }

指定数据表为数据源

dataGridView.DataSource = SampleQuery("tablename");