2010-08-31 68 views
0

我如何可以訪問的數據集,它的TablesData(S)從另一個類中添加/刪除/編輯行C#訪問數據集的數據

我有一個WinForm和我添加一個DataGridView dataGridView1 後來我加入一個DataSet dataSet1的 然後我綁定他們的BindingSource

所有的數據將被保存在一個XML

一切工作正常,我做了一些測試項目,所有做工精細

但是當我嘗試測試從另一個類添加數據行的可能性,它不會顯示DataGridView上的變化!

所以我必須用Form1中和dataGridView1都dataSet1的是公共

其他類中我做了

 var esf = new Form1(); 

     DataRow pl = esf.dataSet1.Tables["MyItems"].NewRow(); 

     pl["Type"] = type; 
     pl["Name"] = true; 

     esf.dataSet1.Tables["MyItems"].Rows.Add(pl); 

,如果我添加

 esf.dataSet1.WriteXml(esf.XmlSettingsFile); 

它正確保存文件!

但在寫其他數據

我覺得我與另一個數據集是一樣的我原來的一個在Form

工作,但我需要訪問原始數據集的數據在主要形式

只是我需要有dataSet1作爲公共靜態,所以我可以訪問它並將編輯數據添加到它 但是當我這樣做時,Visual Studio給我錯誤!在窗體的視覺效果中!?!

任何建議

回答

2

如果我理解正確的...

  1. 您啓動項目或什麼的,並使用Form1中其中有一個DataGridView。
  2. 然後,您可以在另一個類中運行您的第一組代碼,並添加一些新數據。
  3. 如果你寫出XML,你只有得到新的東西,而Form1上的原始東西丟失?

如果是這樣的話,那麼它很明顯是怎麼回事...

  1. 啓動項目,該項目創建了Form1的對象。
  2. 你可以在Form1中做任何事情來填充DataGridView。你可以運行你的第一個代碼塊,然後var esf = new Form1();行創建一個Form1的新實例,它與您試圖從中提取數據的原始實例不同。
  3. 來自其他類的任何代碼只是在新實例化的Form1上運行,這與您嘗試訪問的不同。

我的假設可能是錯誤的,因爲我顯然看不到您的代碼,但希望這有助於。

編輯 - 爲了解決這個問題...

同樣,我只能推測,以現有的代碼是什麼樣子,但你可以做這樣的事情:

而不是試圖訪問從Form2的值(或任何其他形式是),設置窗體2有從接入到Form1開始走:

  1. 給Form2的公共財產「數據集」什麼的。
  2. 當窗體2 instantiationg(大概從Form1中),簡單地做到這一點:

    窗體2 reliantForm =新窗體2();

    relaintForm.DataSet = this.dataSet1;

    reliantForm.Show();

  3. Form2現在具有對數據集的引用,並且可以根據需要對其進行操作。

+0

你是絕對正確的:-) – 2010-08-31 13:24:11

+0

那麼該如何解決呢? – 2010-08-31 13:50:49

+0

查看編輯答案。 – Ocelot20 2010-08-31 18:21:13