从C#中的另一个类调用方法

时间:2014-05-19 22:04:59

标签: c# database forms methods ado.net

我的C#应用​​程序存在问题,而且我不知道如何处理它。它是我学习的应用程序,也是我第一次使用C#和Visual Studio。

所以 - 我的主窗体Form1带有一个MenuStrip,我可以转到另一个窗体(这是我在DataGridView中显示的数据集中的数据表)。我可以在无连接模式(将数据写入.xml文件)和连接模式(直接同步到我的数据库)中工作。 在主要表单中,我有一个Switch_btn按钮,我可以在其中更改我正在使用的模式。它使用了一个类:

public static class Connection_mode
    {
        public static int connection = 0;
    }

它只是改变了一个变量的值:

Connection_mode.connection = 1;

在另一种形式(类)Function中,我有一个更新数据库的方法:

public void MethodToExec()
        {
            this.ds.WriteXml("D:\\sth.xml");
            this.dataSet_baza.Tables["funkcja"].Merge(funkcjaTable);
            this.funkcjaTableAdapter.Update(dataSet_baza.funkcja);
        }

当我处于无连接模式时,我有一个本地DataTable,我正在对其进行更改。它以这种形式工作并将所有数据从本地表发送到数据库 - 这很好。

这是我的主要问题: 当我点击主Switch_btn中的Form1时,我想要将数据与数据库同步。我可以关闭所有其他表单,但是当我单击“切换”时,我想要从MethodToExec()表单执行Function

我在Switch_btn代码中尝试过这样的话:

var funkcja = new Function();
funkcja.MethodToExec();

但它没有更新数据库。

也许有更好的方法可以做到这一点,但我不知道如何。

1 个答案:

答案 0 :(得分:0)

完全取消功能表格。你永远不会以这种方式使用表格。相反,创建一个可以从表单实例化的服务类(请注意,依赖项是任意的,因为我不熟悉您的模型):

public class Service()
{
  private DataSet ds;
  private DataSet dataSet_baza;
  private TableAdapter funkjaTableAdapter;

  public Service()
  {
    ds = new DataSet();
    dataSet_baza = new DataSet();
    funkjaTableAdapter = new TableAdapter();
  }

  public void WriteXML(DataTable funkcjaTable)
  {
    this.ds.WriteXml("D:\\sth.xml");
    this.dataSet_baza.Tables["funkcja"].Merge(funkcjaTable);
    this.funkcjaTableAdapter.Update(dataSet_baza.funkcja);
  }
}

然后在Form1 Switch_btn方法中:

var svc = new Service();

try
{
   svc.WriteXML();
}
catch(Exception ex)
{
   //do something with the exception
}

现在,您可以跨所有类共享此功能,这些类可以实例化自己的Service对象。如果需要Service.WriteXML方法可供所有类使用而无需实例化,请将WriteXML方法设为静态:

public static void WriteXML() {...}

直接调用它而不创建新的Service对象。