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

C# 如何将DataTable从一个类传递到另一个类,c#,mysql,datagridview,C#,Mysql,Datagridview,目前我正在学习MySQL,很抱歉我的新手问题。这是我的问题 我有两个类,第一个是Windows窗体,另一个只是一个类,我想包含来自SQL的所有进程。下面是我在SQL类中的代码 public void SampleQuery(string tablename) { DataTable dataTable; string query = "SELECT * FROM " + tablename; //Open connection

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

我有两个类,第一个是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;
        }
我想做的是,用DataGridView显示SQL中的数据。 是否可以在上面的SQL类中对datagridview进行编码?或者必须是Windows窗体的一部分

如果必须是windows窗体,如何将现在保存所有数据的dataTable抛出到windows窗体类


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

您可以使用
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;
   }
}

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

使您的
SampleQuery
方法返回
datatable

public DataTable SampleQuery(string tablename) {
    // Fill dataTable...
    return dataTable
}
然后在表单中调用该方法,并将
dataTable
绑定到
dataGridView

dataGridView.DataSource = SampleQuery("MyTable");

在这个场景中,您将更改返回DataTable而不是nothing(void)的方法,并以

return dataTable;
然后在你叫它的时候抓住它:

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

就我个人而言,我建议使用基于类的对象而不是DataTable,但是DataTable会起作用。

指定
DataTable的
SampleQuery
方法的返回类型

//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指定为网格的数据源

     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;
            }
将datatable指定为数据源

dataGridView.DataSource = SampleQuery("tablename");

形式课的第一部分?sql类的第二部分是什么?是的,MyForm是你的Form类,DataAccess是你的数据访问层。多谢大家…顺便说一句,为什么我的SampleQuery用红色下划线表示“并非所有路径代码都返回值”?可能是因为你返回的是内部if语句=>你应该返回外部if。是的,我已经试过了,但是返回的dataTable说的是,使用未赋值变量。但是在顶部我已经声明了它。datagridview应该用(“tablename”)调用samplequery吗?因为tablename只是包含dataTable中已有内容的表的名称