从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();
但是它没有更新数据库。
也许有更好的方法,但是我不知道怎么做。
完全取消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() {...}