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.jpgListe:
[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:pIm 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.:pDas 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:pDanke
-
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 sindNur , 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