我的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();
但它没有更新数据库。
也许有更好的方法可以做到这一点,但我不知道如何。
答案 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对象。