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

本文关键字:调用 方法 另一个 | 更新日期: 2023-09-27 18:04:19

我的c#应用程序有一个问题,我不知道如何处理。这是我学习的一个应用程序,这是我第一次使用c#和Visual Studio。

所以-我有一个菜单条的主要形式Form1,我可以去另一个形式(这是从我的数据集显示在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);
        }

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

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

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

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

但是它没有更新数据库。

也许有更好的方法,但是我不知道怎么做。

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

完全取消Function表单。你从不这样使用形式。相反,创建一个可以从表单实例化的服务类(注意,依赖关系是任意的,因为我不熟悉您的模型):

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对象。如果您需要该服务。要使WriteXML方法对所有类可用而不需要实例化一个,则将WriteXML方法设置为静态:

public static void WriteXML() {...}