2009-08-05 5 views
0

ein DataSet in WinForm App zur Erhaltung bin ich in den Prozess Web-App zu einem winformApp ein haus der Umwandlung für getrennte Gründe und ich traf die folgenden Haken.Versuch

Im Function SaveMe() auf der Webapp gibt es den folgenden Code auf der Person.ascx.vb Seite ->

 //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 

Der Teil I auf stecke ist, wie man logisch einen Datensatz auf einem WinForm app erstellen ?

Soll ich nur alle Felder abkratzen und in ein DataSet werfen? Wie (das ist, was ich forsche/versuche, während ich auf einen Rat von SO erwarte)?


EDIT

Die Session wird immer im LoadMe() Sub erstellt/bevölkert, wie so ->

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

EDIT

Was ich Ich versuche ein Formular Ebene Variable zu tun ist, erstellen ->private DataSet _personInfo; den Datensatz dann in meinem FormPaint(int personID) Ich nenne folgendes zu halten:

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

ich dann verwenden, um die verschiedenen Felder auf dem Formular zu füllen.

nächstes auf btnUpdate_Click() versuche ich die folgenden, aber ohne Erfolg:

 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); 
    } 

Ich bin unklar, was ich falsch mache? Vermisse ich einen Schritt?

Danke

+0

Wenn Sie durchtreten, ist areChanges falsch? Wenn dies der Fall ist, müssen Sie die Werte in Ihrem Dataset aktualisieren (entweder manuell oder durch Datenbindung). –

+0

ja es ist immer falsch .... –

Antwort

3

Zuerst

Wenn Sie eine gute Erklärung für die Ausgabe möchten, dass Jacob den folgenden Artikel lesen erhabener ...

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

Und ich stimme mit den anderen, die Sie zu sein scheinen macht es schwieriger, als es sein muss.

Sie sind nicht klar, was die ConnectBLL-Klasse ist ... ist das ein benutzerdefiniertes Bizness-Objekt oder ein stark typisiertes Dataset.

Databinding zu tun, die automatisch speichern würde eine sehr lange Post sein, so dass hier ein paar Links sind.

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

Das waren die ersten Links, die ich auf Google verwenden (Schritt für Schritt-Anleitung auf WinForms Databinding mit einem stark typisierte Datasets) als Suchbegriff gefunden. Sie könnten einen besseren finden. Der Code-Guru-Link sah ziemlich gut aus. Die anderen sind gründlicher auf Kosten der technischen.

Best of all ... wenn Sie für Chris Sells Buch in WinForms Entwicklung entspringen kann, sind die Kapitel über die Datenbindung ausgezeichnet (zusammen mit all den anderen Kapiteln.)

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

Hope this hilft.

+0

Wenn nichts anderes, bekommst du +1 für den richtigen Suchstring, der, ob du es glaubst oder nicht, manchmal die größte Hürde für einen neuen Solo-Entwickler ist. ConnectBLL ist eine benutzerdefinierte Business-Schicht. Ich denke, mein Problem hat mit Bindung zu tun. Vor einiger Zeit, als ich mit diesem Projekt anfing, sagte mir ein Typ auf den Inter-Tubes, ich solle MS-Datenbindung niemals verwenden und er benutzte immer seine eigenen. Ich erkenne jetzt, dass ich der ersten Hälfte seines Vorschlags gefolgt bin, ohne den zweiten Teil zu verstehen. Danke, dass Sie sich eine Weile Zeit genommen haben, eine offensichtlich neue Frage zu stellen. –

+0

Um Ihre Biz-Objekte direkt an die Benutzeroberfläche zu binden, müssen die Biz Objs bestimmte Schnittstellen implementieren ... alles schön erklärt in Chris Sells Buch. Databinding kann Eichhörnchen sein, aber wenn es funktioniert, funktioniert es. Stellen Sie sich vor, Sie tun dies ... me.myTextBox.DataBindings.Add ("Text", myBizObject, "MyBizObjectProperty") und dann geschieht das Einfügen/Aktualisieren automatisch. Viel Glück. Seth –

1

In diesem Code-Schnipsel, kommt das DataSet von Sitzung. Wann ist es eingestellt?

Sie können sicherlich ein DataSet in einer WinForms-Anwendung verwenden. Ist es die Datenbindung, mit der Sie Probleme haben?

+0

Ich verstehe nicht, wie die Änderungen in das DataSet zwischen der Einstellung von es und dem Speichern von es gelangen. Ist das ein Teil der Bindung? Wie würde ich bei meiner Winform-App vorgehen? –

1

Ihr Problem ist hier wahrscheinlich:

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

AcceptChanges setzt die RowState unverändert auf allen Zeilen, die bereit waren, aktualisiert zu werden. Ehrlich gesagt, wäre es wahrscheinlich besser, whatChanged zu verwenden, da Ihr Adapter dadurch nicht mehr nach geänderten Zeilen suchen muss.

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