多个表单上的共享数据集C#

时间:2012-07-24 15:49:44

标签: c# dataset

所以我正在开发一个数据库项目,在我的第一个表单中,我有sql连接命令访问我的数据源。我还创建了一个数据集,这是我的displayform

displayform用于显示数据库,我添加了一个按钮来添加记录,所以当我点击添加记录时,它会转到addform,我可以在其中填写创建新联系人的详细信息。然后返回第一个表单以显示新创建的联系人以及所有其他联系人。

但是我遇到了一些问题,因为数据集需要与显示形式的数据集相同。

如何在所有表单中使数据集保持一致?

更新:

所以我所做的就是在我的Program.cs中我已经在那里创建了对象......并使它们成为公共静态的。

public static DataSet ds = new DataSet();

然后在我的addcontact表单中,我可以这样称呼它......

Program.ds.Clear();

与我的dataadaptor / bindingsource和sql连接相同。可以这样做吗?

2 个答案:

答案 0 :(得分:3)

创建数据集类通过构造函数向每个表单添加传递。 “Class = Class”作为参考而不是副本。 (DataSet是一个类...)

public partial class Form1 : Form
{
DataSet _dataset;

public Form1(DataSet dataSet)
{
    _dataset = dataset;
    InitializeComponent();
}
//..

public partial class Form2 : Form
{
DataSet _dataset;

public Form2(DataSet dataSet)
{
    _dataset = dataset;
    InitializeComponent();
}
//..


static class Program
{
    static void Main()
    {
        DataSet DS = new DataSet();

        Application.Run(new Form1(DS));
    }
}

答案 1 :(得分:2)

嗯,你有几个概念选择。您似乎想要访问子表单的数据集,这当然是您可以做的事情,但在我看来,子表单将单个记录的信息提供给父表单是有意义的。子表单不需要知道有关数据集或所有其他记录的任何信息。

一般情况下,您应该尝试限制信息,以便只在需要时才提供信息;你会减少错误的可能性。将数据集作为全局变量是一种不好的做法,这就是使它成为公共和静态的变量。通过这样做,您不仅可以将整个数据集提供给子表单(并且还可以对其进行修改),还可以让您从整个程序中的任何位置读取或修改数据。那只是在寻找麻烦。

一般的想法可能看起来像这样:

public partial class Form1 : Form
{
    public Form1()
    {
        InitializeComponent();
    }
    private void button1_Click(object sender, EventArgs e)
    {
        Form2 childForm = new Form2();
        childForm.ShowDialog();
        string name = childForm.Name;
        string value = childForm.SomeOtherValue;
        //you can stick these properties in your dataset here.
    }
}

public partial class Form2 : Form
{
    private TextBox textbox1;
    public Form2()
    {
        InitializeComponent();
    }

    private void button1_Click(object sender, EventArgs e)
    {
        Close();
    }

    public string Name { get { return textbox1.Text; } }
    public string SomeOtherValue { get { return "12345"; } }
}