2009-08-05 58 views
0

保持一個DataSet,我在一個內部Web應用程序轉換爲的winform應用斷開連接的原因的過程中,我打下面的障礙。試圖在winform應用程序

Function SaveMe()上的Web應用程序存在Person.ascx.vb頁面下面的代碼 - >

 //get dataset from session 
     Dim dsPerson As Data.DataSet = CType(Session.Item("Person" & Me.UniqueID), DataSet) 
     //if no rows in dataset, add 
     If dsPerson.Tables(0).Rows.Count = 0 Then 
      Dim rowPerson As Data.DataRow = dsPerson.Tables(0).NewRow 
      dsPerson.Tables(0).Rows.Add(FillPersonRow(rowPerson)) 
     Else 
     //otherwise update 
     ....more code here 

我堅持上的部分是如何在邏輯上一個WinForm應用程序創建一個數據集?

如果我只是湊的所有字段,扔一個DataSet?如何(這是我將研究/時嘗試從SO等待諮詢)?


編輯

是越來越創建會話/填充在LoadMe()子,像這樣 - >

 //load person 
     Dim dsTemp As Data.DataSet = BLL.Person.GetPerson(PersonID) 
     //save to session state 
     Session.Add("Person" & Me.UniqueID, dsTemp) 

編輯

我我要做的是創建一個表單級的變量 - >private DataSet _personInfo;持有的數據集,然後在我的FormPaint(int personID)我所說的以下內容:

  _personInfo = ConnectBLL.BLL.Person.GetPerson(personID); 

然後我用它來填充表單上的各個領域。

接下來,btnUpdate_Click()我嘗試以下方法,但無濟於事:

 void btnUpdate_Click(object sender, EventArgs e) 
    { 
     var areChanges = _personInfo.HasChanges(); 
     if (areChanges) 
     { 
      var whatChanged = _personInfo.GetChanges(); 
      var confirmChanges = 
       MessageBox.Show(
        "Are you sure you want to make these changes: " + 
        whatChanged.Tables[0].Rows[0].ItemArray.ToString(), "Confirm Member Info Changes", 
        MessageBoxButtons.YesNo, MessageBoxIcon.Hand); 
      if (confirmChanges == DialogResult.Yes) 
      { 
       _personInfo.AcceptChanges(); 
       ConnectBLL.BLL.Person.Update(_personInfo); 
      } 
     } 

     FormPaint(HUD.PersonId); 
    } 

我不清楚是什麼,我做錯了什麼?我錯過了一步嗎?

謝謝

+0

當你完成它時,isChanges是否爲false?如果是這樣,那麼您需要更新數據集中的值(手動或通過數據綁定)。 – 2009-08-05 22:42:14

+0

是的,它每次都是假的...... – 2009-08-06 00:23:46

回答

3

首先,

如果你想雅各募閱讀下面的文章問題的一個很好的解釋?

http://www.knowdotnet.com/articles/datasetmerge.html

而且我同意你似乎使它更難比它需要的其他人。

你不清楚ConnectBLL類是什麼......是一個自定義的bizness對象或強類型的數據集。

要做數據綁定,將自動保存將是一個非常長的職位,以代替這是一對夫婦的鏈接。

http://www.codeguru.com/columns/vb/article.php/c10815
http://support.microsoft.com/kb/313482
http://msdn.microsoft.com/en-us/library/aa984336(VS.71).aspx

這些都是作爲搜索字符串我在谷歌找到使用第一鏈接(一步一步的指令上的WinForms綁定一個強類型數據集)。你可能會找到一個更好的。 codeguru鏈接看起來不錯。另一個更加徹底,而不是犧牲更多的技術。

最重要的是...如果你春天的克里斯·塞爾斯書的WinForms開發,數據綁定的章節是優秀的(與所有其他章節的一起。)

http://www.amazon.com/Windows-Forms-Programming-Microsoft-Development/dp/0321267966/ref=sr_1_1?ie=UTF8&qid=1249525202&sr=8-1

希望這幫助。

+0

如果沒有別的東西,你會得到+1的正確搜索字符串,不管你信不信,它有時是新獨立開發的最大障礙。 ConnectBLL是一個自定義的業務層。我認爲我的問題與綁定有關。前一段時間,當我開始這個項目時,管間的一個人告訴我不要使用MS數據綁定,他總是使用他自己的。我現在意識到,我在不瞭解第二部分的情況下遵循了他的第一部分建議。感謝您花費一些時間處理一個明顯的'newb'問題。 – 2009-08-06 03:09:51

+0

爲了直接將你的商業對象綁定到用戶界面上,商業對象必須實現某些界面......在Chris Sells書中很好地解釋了這一點。數據綁定可以是松鼠,但是當它工作時,它可以工作。想象一下,這樣做... me.myTextBox.DataBindings.Add(「text」,myBizObject,「MyBizObjectProperty」),然後插入/ updatinng只是自動發生。祝你好運。 Seth – 2009-08-06 03:45:11

1

在該片段中,DataSet來自會話。它是什麼時候設置的?

你當然可以在一個WinForms應用程序中使用的數據集。它是數據綁定,您有麻煩?

+0

我不理解變化如何進入數據集之間的設置和它的保存。那是綁定的一部分嗎?在我的winform應用程序中,我該如何去做? – 2009-08-05 20:26:44

1

你的問題很可能是在這裏:

if (confirmChanges == DialogResult.Yes) 
{ 
     _personInfo.AcceptChanges(); 
     ConnectBLL.BLL.Person.Update(_personInfo); 
} 

的AcceptChanges設置的RowState爲Unchanged對準備要更新所有行。坦率地說,這很可能是更好的使用whatChanged作爲將從不必重新檢查更改的行保持你的適配器。

if (confirmChanges == DialogResult.Yes) 
{ 
     ConnectBLL.BLL.Person.Update(whatChanged); 
     _personInfo.AcceptChanges(); 
}