2011-07-14 121 views
-1

我的无能使我在项目中不使用“干净”解决方案。我在一个类中得到了一个ADO数据集,并且需要在winforms和其他类之间共享它。为了实现它,我将数据集作为公众成员。当我在项目早期阶段时,我在互联网上搜索了很多,但还没有找到令人满意的答案。但是现在我还有一些额外的时间,而且我的项目不是很大,我想做的对。任何提示?在分类之间共享数据集

坦克, 雷

+0

它完全不清楚你想要达到的目标。这是什么意思“共享winforms和其他类的数据集”? –

+0

我很抱歉,我会尽量做得更具体。我有一个类实现了一些数据库相关的操作,并有一个DataSet成员来保存数据。我希望这个DataSet成为我项目中其他类的唯一数据源。为了避免浪费系统资源,我希望尽可能多地访问其他类别。这是否更具描述性? – Ray

回答

1

尝试回答非常通用quesiton:读你写的东西,我wolud说,这是perectly很好的解决方案,使您要在应用程序的不同部分acees一类的公共属性。唯一的提示,我能想到的(仅仅因为它没有被指定,并不意味着它没有以这种方式完成)在你的专用数据访问类中有一个DataSet。

重复,这个问题太泛泛。也许如果你将某些更具体的事情细化,你将会得到更具体的帮助。

问候。

0

使用get,set accessor创建dataSet作为属性。 YOu可以使它成为静态的,所以它可以在不创建类(或形式)新引用的情况下使用。

例子:

public partial class Form1 : Form 
{ 
    public static DataSet myDataSet { get; set; } 
    public Form1() 
    { 
     InitializeComponent(); 

     Class1 c1 = new Class1(); 
     Class2 c2 = new Class2(); 
    } 
} 

class Class1 
{ 
    public Class1() 
    {  
     //fill dataSet (add new table and some example rows): 
     DataTable table = new DataTable("table1"); 
     table.Columns.Add("Column1", typeof(string)); 
     table.Rows.Add("item 1"); 
     table.Rows.Add("item 2"); 

     Form1.myDataSet = new DataSet(); 
     Form1.myDataSet.Tables.Add(table); 
    } 
} 

class Class2 
{ 
    public Class2() 
    { 
     //show dataSet results: 
     StringBuilder sb = new StringBuilder(); 
     foreach (DataRow dr in Form1.myDataSet.Tables["table1"].Rows) 
     { 
      sb.AppendLine(dr[0].ToString()); 
     } 
     //show: 
     System.Windows.Forms.MessageBox.Show(sb.ToString()); 
    } 
} 
+0

感谢Mitja,事实上,将数据集标记为静态是一个解决方案:) – Ray