Databinding



  • Huhu,

    Ich muss eine Einsendeaufgabe loesen und komm nicht weiter.
    (I-wo hatte ich mal ein beitrag drueber geschrieben nur wo?!-.-)

    Es handelt sich um eine Datenbank in die ich Fehlerabfang-
    routinen einbringen muss.

    Ich habe 2 Formulare.
    Ein Formular soll 2 weitere Forms durch je 2 Buttons anzeigen.

    private: System::Void button1_Click(System::Object^  sender, System::EventArgs^  e) {
    
    				kListe ^neuListe = gcnew kListe;
    				neuListe->ShowDialog();
    			 }
    	private: System::Void buttonEinzelansicht_Click(System::Object^  sender, System::EventArgs^  e) {
    
    				kEinzel ^neuEinzel = gcnew kEinzel;
    				neuEinzel->ShowDialog();
    			 }
    

    Das erste Formular zeigt die normalen Kundendaten an
    (eine Art Liste).

    Einzelform:
    http://img19.imageshack.us/img19/6483/test2mmg.jpg

    Liste:
    [img=http://img19.imageshack.us/img19/7274/test1wcf.jpg]

    Mhm i-wie scheint die Bildervorschau hiernicht zu funktionieren.

    Nun ist die Fehlerabfangroutine bei der Liste nicht das
    Problem aber bei dem Einzelform.

    Zitat:
    "Die bindung der einzelnen Eingabefelder(vom Einzelform)
    an die Spalten der Datenbank-Tabelle erfolgt ueber due
    Untereigenschaft Text der Eigenschaft (DataBindings)."

    Die Frage ist nun:
    Wie stell ich das an?
    Ein Rat/Tip waere super.

    Danke.

    PS:Ich hoffe die Infos reichen, denn das ganze ist
    ziemlich umfangreich.



  • Hi, was für Abfangroutinen willst Du den implementieren und wie liest Du die Daten ein?



  • Huhu,

    Naja per Datagridview konnte ich meine Tabelle einlesen
    wie auf Bild 1 zu sehen.

    Das ist das eigentliche Form, wo ich auf beide Tabellen
    zugreife.
    Nur, dass in das Einzelformular die Daten "gezogen" wurden.
    ->Datenquellen anzeigen->Datenquellen(Tabellendaten ins form ziehen)

    Ich hoffe, das reicht als Info.

    http://img142.imageshack.us/img142/9425/testgsl.jpg

    Hier wird z.B. geprueft, ob die Postleitzahl genau
    5 Ziffern entspricht und ob es auch nur Ziffern sind.

    Quellcode:

    private: System::Void kundenDataGridView_CellValidating(System::Object^  sender, System::Windows::Forms::DataGridViewCellValidatingEventArgs^  e) {
    
    			 //fuer die zusaetzlichen Pruefungen der Postleitzahl
    			 Boolean fehlerKeinEintrag=false;
    			 Int32 postleitzahlTemp;
    			 // ueberprueft werden nur die Spalten 2-7
    			 // Index = 0
    			 if ((e->ColumnIndex > 0) && (e->ColumnIndex < 6)){
    
    				 //ist der Eintrag leer?
    				 if (e->FormattedValue->ToString()==String::Empty){
    
    					 //Meldung anzeigen
    					 MessageBox::Show("Sie muessen einen Wert fuer " + kundenDataGridView->Columns[e->ColumnIndex]->HeaderText + " eingeben");
    
    					 //den Fehlertext setzen
    					 kundenDataGridView->Rows[e->RowIndex]->Cells[e->ColumnIndex]->ErrorText="Die Zelle darf nicht leer sein!";
    
    					 e->Cancel=true;
    
    					 //fehlerKeinEintrag wird true, da die weiteren
    					 //Pruefungen fuer die Postleitzahl nicht mehr
    					 //erforderlich sind
    
    					 fehlerKeinEintrag = true;
    				 }
    			 }
    			 //Detailpruefungen der Postleitzahl
    			 //sind wir inm der Spalte fuer die PLZ und ist ein Einrag vorhanden?
    			 if ((e->ColumnIndex == 4)&& (fehlerKeinEintrag == false)){
    
    				 //ist der einrag exakt 5 Zeichen lang?
    				 //sonst Meldung anzeigen und Verarbeitung abbrechen
    				 if (e->FormattedValue->ToString()->Length != 5){
    
    					 MessageBox::Show("Die Postleitzahl muss 5 Ziffern lang sein!");
    
    					 e->Cancel = true;
    				 }
    				 //sind es nur Ziffern?
    				 else
    					 if (Int32::TryParse(e->FormattedValue->ToString(),postleitzahlTemp)==false){
    
    						 MessageBox::Show("Das Format der Postleitzahl ist ungueltig");
    
    						 e->Cancel=true;
    					 }
    			 }
    		 }
    


  • Ich poste Dir mal ein Beispiel für bindingsource Objektverwendung:

    //1. Adapter erzeugen und Verbindung mit DB aufnehmen
    					 String ^AbfrageString = "SELECT * from bndlaender";
    					 OleDbConnection ^verbindung = gcnew OleDbConnection(verbindungsstr);
    					 dbAdapter = gcnew OleDbDataAdapter(AbfrageString,verbindung);
    
    					 //2. Datenset erzeugen und , Tabellenstruktur vorgeben und über Adapter mit Daten befüllen
    					 dataSet1 = gcnew DataSet();
    					 dataSet1->Tables->Add("bndlaender");
    					 dbAdapter->Fill(dataSet1,"bndlaender");
    
    					 //3. BindingSource erzeugen und mit DataSet als Datenquelle verknüpfen
    					 bindingSource1 = gcnew BindingSource();
    					 bindingSource1->DataSource = dataSet1;
    					 bindingSource1->DataMember = "bndlaender";
    
    					 bindingNavigator1->BindingSource = bindingSource1;
    					 tbRang->DataBindings->Add(gcnew Binding("text",bindingSource1,"Rang"));
    					 tbBundesland->DataBindings->Add(gcnew Binding("text",bindingSource1,"Bundesland"));
    					 tbEinwohner->DataBindings->Add(gcnew Binding("text",bindingSource1,"Einwohner"));
    
    					 OleDbCommandBuilder ^commandBuilder = gcnew OleDbCommandBuilder(dbAdapter);
    
     //6. Änderungen im DataSet in die Datenbank schreiben
    			 bindingSource1->EndEdit();
    			 dbAdapter->Update(dataSet1->Tables["bndlaender"]);
    

    Ich hoffe, das hilft Dir weiter...



  • Mhm danke dir, ich setz mich damit eben mal
    auseinander.

    ich editiere diesen Beitrag, falls ich es hinbekomme
    bzw auch nicht.



  • Hi Nyoko

    Warum fängst du die fehler nicht einfach so ab wie bei der Plz?

    Gruß Sebastian



  • Hier ein Beispiel:

    [/code]

    private: System::Void kNameTextBox_Validated(System::Object^  sender, System::EventArgs^  e) 
    		 {
    			 if (kNameTextBox->Text == String::Empty)
    			 {
    				 MessageBox::Show("Bitte geben Sie einen Nachnamen für die Person ein.","Fehler",MessageBoxButtons::OK,MessageBoxIcon::Exclamation);
    				 kNameTextBox->Focus();
    			 }
    		 }
    


  • Huhu Sebastian,

    danke fuer die Antwort aber das waere ein wenig zu
    einfach(auch wenn ich das anfangs dachte-.-)

    Du musst dir das wie ein Shurtcut vorstellen.

    Die Datenbank ist der Ordner, das Einzelform ein
    anderer Ordner mit Shurtcuts und die Liste
    befindet sich direct schon im Ordner der Datenbank.



  • Ich hab das Selber bei der HAF gehabt und hab eine 2 dafür bekommen weil ich eine kleinigkeit vergessen habe. Du mußt auch selber noch einbisschen nach denken. Aber am ende mußt du es wissen wie du es machst.



  • Ja nur das du wahrscheinlich in eine Schule gehst
    und ich nur ein Heft zur Verfuegung habe, in der
    ich darueber keinerlei Info finde.:p



  • Das ist so wie das Sebastian sagt, Du musst auch mal das machen was man Dir sagt oder selber mal die Zellen in Bewegung bringen.
    Alles soll man euch vorkauen.
    Aber später mal Programmierer werden wollen, wie soll das klappen!? 🙄



  • Das ist mir schon klar, aber wozu ist sonst dieses
    Forum da???

    Ich hab mir jetzt auch ein Buch gekauft,
    "C++ Lernen und professionel anwenden".

    Problem ist halt nur:
    Wenn du z.B. ein tutorial vorliegen hast,
    um eine Uhr zusammenzubasteln, aber dir
    as Wissen um die Materialien fehlt kannst du
    damit ja auch nix anfangen:p

    Im Heft steht nun mal nichts, um einen Anfang
    zu haben.

    Und btw, ich moechte auch keine Loesung sondern nur
    einen Rat.



  • Nyoko schrieb:

    Ja nur das du wahrscheinlich in eine Schule gehst
    und ich nur ein Heft zur Verfuegung habe, in der
    ich darueber keinerlei Info finde.:p

    Das Haf steht für Hamburger Akademie für Fernstudium und ist das gleiche wie Ils ect.

    Ich hab das gleiche wie du und, ich mußte auch manche Hefte 3 mal durch lesen um es zu verstehen das weiß ich, weil ich mußte meinen Job meine Familie (Frau, Kinder) alles unter einem Hut bringen. Man muß sich halt durch beißen und am Ball bleiben damit man gut würd. Es ist noch kein Meister vom Himmel gefallen.

    Gruß Sebastian



  • Hast ja Recht.
    Haenge trotzdem immer noch an der Aufgabe.

    Und das heft hab ich nicht nur einmal durchgearbeitet.
    Der einzige Tip der einem gegeben wird, ist folgender:

    Die Bindung der einzelnen Eingabefelder an die Spalten der
    Datenbanktabelle erfolgt ueber die Untereigenschaft Text der
    Eigenschaft (Databindings).

    Tolle Info^^
    Bissl spaerlich ist das schon, findeste nicht?
    Na egal, i-wann komm ich schon drauf.



  • Hi

    Ist doch ganz einfach damit würd gemeint das du darüber die Headertexte anschauen kannst, damit du weißt wie die Felder heißen kannst.
    Bei Fehlermeldung abfangen mußt du ja jede einzelne Zelle abfangen auf bestimmte art und weisen.

    P.s.: Bei unklaren Tip oder Aufgaben stellungen kannst du auch deinen Studienleiter fragen ob er dir die Aufgaben stellung anders erklären kann.

    MFG Sebastian



  • Mit einer Aussage, ein par Post weiter vorne haste mir
    doch geholfen^^
    Ich habs nur leicht uebersehen bzw nicht gedacht, es nutzen
    zu koennen:p

    Danke



  • Nun, ich habe noch ein klitzekleines Problem:

    In diesem Code Schnipsel wird die PLZ geprueft:
    -> ob genau 5 Ziffern verwendet wurden und
    -> ob es Ziffern sind

    Nur , wenn ich versuche genau 5 Ziffern einzugeben
    kommt troz alledem die Fehlermeldung:

    "Das Format der PLZ ist ungueltig"

    Woran kann das liegen?

    private: System::Void kPLZTextBox_Validating(System::Object^  sender, System::ComponentModel::CancelEventArgs^  e) {
    
    			 Boolean fehlerEintrag = false;
    			 Int32 postleitzahlTemp;
    
    			 if (kPLZTextBox->Text == String::Empty)
                 {
                     MessageBox::Show("Bitte geben Sie eine PLZ ein.","Fehler",MessageBoxButtons::OK,MessageBoxIcon::Exclamation);
                     kPLZTextBox->Focus();
    				 e->Cancel = true;
    				 fehlerEintrag = true;
    
                 } 
    			 if (fehlerEintrag == false)
    			 {
    				 if(kPLZTextBox->Text->ToString()->Length != 5)
    				 {
    					 MessageBox::Show("Die PLZ muss 5 Ziffern lang sein");
    					 e->Cancel = true;
    				 }
    				 else
    					 if (Int32::TryParse (e->ToString(), postleitzahlTemp)==false)
    					 {
    						 MessageBox::Show("Das Format der PLZ ist ungueltig!");
    						 e->Cancel = true;
    					 }
    			 }	 
    		 }
    


  • Ês muß ja nicht nur validating sonder auch validated gemacht werden.



  • Mhm stimmt-.-danke.



  • Habs geschafft^^
    Ich hab n ur eine variable falsch definiert;:P


Anmelden zum Antworten