System.Data.DataRowView wird in Textboxen angezeigt und wie bekomme ich es hin eine ComboBox zu verwenden

  • VB.NET

Es gibt 20 Antworten in diesem Thema. Der letzte Beitrag () ist von RodFromGermany.

    System.Data.DataRowView wird in Textboxen angezeigt und wie bekomme ich es hin eine ComboBox zu verwenden

    Hallöchen,

    Ich habe zwei Probleme:

    1.



    ich habe hier aus einem Dataset die Daten, das funktioniert auch soweit mit speichern, laden und so weiter. nur habe ich das Problem das in zwei Textboxen nicht der wert sondern nur "System.Data.DataRowView" angezeigt wird. Bei der ersten kann ich das noch irgend wie verstehen, bzw. ich erkenne zu mindest einen unterschied zu den anderen nämlich das es der Primär schlüssel ist. bei der anderen erkenne ich überhaupt keinen unterschied.


    2.

    Bei anrede möchte ich gerne eine Combobox haben, aber irgend wie bekomme ich die anbindung nicht hin. er zeigt mir zwar an was in dem datensatz steht, aber als "alternative" zeigt sie mir nur das an was in den anderen datensätzen steht, ich würde aber gerne einfach da "Herr" oder "Frau" stehen haben das bekomme ich aber nicht hin habe es auch schon mit einer zweiten Tabelle probiert bekomme das aber irgend wie nicht auch wenn die Lösung bestimmt ganz leicht ist :D
    Zur Kundennummer und Hausnummer-Textbox solltest du im Designer beider TBs unter (DataBindings) - Text pürfen was da steht. Das steht sicher nicht die selbe Bindingsource wie in den den anderen TBs drinnen. Ansonsten kann ich mir das nicht erklären. Ich hätte ja eher die Vermutung, dass Du da etwas mit Comboboxen herumexperimentiert hast und falsche Bindings verwendest.
    *unnötiges Zitat entfernt*

    Tatsache, aber ich bekomme wenn ich es auswähle eine fehlermeldung vermutlich wegen dem "."?

    Die DataMember-Eigenschaft Haus Nr kann in der DataSource nicht gefunden werden.

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Marcus Gräfe“ ()

    Eigentümlich.
    Dazu ist der Designer eiglich da, dass der nur Werte als Datamember vorschlägt, die auch aus der DataSource kommen.
    Also Codeseitig kann man ja jeden Quatsch in die Bindings schreiben, aber wenn man den Designer benutzt, sollte es nicht zu der genannten Exception kommen.

    Oder du änderst codeseitig die Datasource, sodasses zur Laufzeit eine andere ist.
    Oder du änderst nachträglich das Dataset - aber dann kann man oft das Form überhaupt nicht mehr anzeigen im Designer.
    Im Designer kannst Du bei den TextBox-DataBindings ja Text anwählen. Und dort suchst Du die richtige Tabellenspalte raus:


    Zur ComboBox: Hast Du Dir ne Anrede-ComboBox aus dem Datenquellenfenster gezogen? Dann wär das der falsche Weg, siehe auch in dem Thread, bei dem ich auf die Nase gefallen bin. Aber ich war nicht allein. Du brauchst das komplexe Binding über den SmartTag einer leeren ComboBox aus der Toolbox, nicht aus dem Datenquellenfenster:

    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.
    Im Designer kannst Du bei den TextBox-DataBindings ja Text anwählen. Und dort suchst Du die richtige Tabellenspalte raus:


    ja das weis ich schon, nur leider geht es nicht es kommt zu oben genanten Fehlermeldung...

    habe es jetzt so gemacht wie es @ErfinderDesRades geschrieben hat.


    zu dem tehma Combobox:



    So heir einmal die einstellung


    Hier das nicht zufriedenstellendes ergebnis
    zur ComboBox: Wertemember und ausgewählter Wert sollten eig. vom gleichen Typ sein - also z.B. ne ID, also Int32. Ich mach es immer so, dass ich in jeder! Tabelle als erstes ne ID (PrimaryKey, Int32, AutoIncrement)* habe. Die Kundentabelle hat dann für die Anrede eine AnredeID (Int32), die dann auf die Zeile der Anrede-Tabelle verweist. Dann kann man beim ComboBox-DataBinding den Wertemember auf AnredeBindingsource-ID stellen und Ausgewählter Wert auf KundeBindingSource-AnredeID.
    btw: von welchem Typ ist bei Dir in der Kundentabelle die Anredespalte? String?
    Entferne mal bitte das Leerzeichen in der Tabellenspalte "Haus Nr.". Das crasht bei mir. Außerdem wird Hausnummer zusammengeschrieben.

    *dazu gleich die Frage nochmal @ErfinderDesRades: Hattest Du schonmal den Fall, dass ne Int32-AutoIncrement-ID über Int32.MaxValue ging?
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.
    Vielleicht sollte der TE mal ein Bildchen von seinem DataSet hier einstellen. Vielleicht stimmt da ja was nicht. (Meine Vermutung)
    Rechtschreibfehler betonen den künstlerischen Charakter des Autors.
    Also das mit dem
    zur ComboBox: Wertemember und ausgewählter Wert sollten eig. vom gleichen Typ sein - also z.B. ne ID, also Int32. Ich mach es immer so, dass ich in jeder! Tabelle als erstes n.....


    könnte das Problem sein, kann es aber grade nicht testen weil es meine Form Sprenkt ^^

    Aber irgend wie scheine ich gennerell bei "Relationen" auf dem Schlauch zu stehen.

    Also Dataset1 = Artickel
    Dataset 2 = Rechnungen

    Jetzt möchte ich das wenn ich bei Rechnungen z.b. "100" bei Pos1 eingäbe bei Name und Netto Preis automaisch aus der "Arickel" Tabelle Geholt wird. Geht das überhaupt?

    Pos1 und Nummer sind jeweils Int32, Pos1 Name und Pos1 Preis Normal Netto sind Strings

    KAXTJ schrieb:

    weil es meine Form Sprenkt
    Wie meinst Du das?
    Leerzeichen in Tabellenspalten - sobald ich einem DGV solch eine Spalte zuordnen will, schmiert mir VS ab.
    Wozu braucht man 2 DataSets?
    Artikel wird wie gerade getan geschrieben. Nicht mit "ck". Aber im tDS scheint es ja richtig zu sein.
    Mach mal bitte nen Screenshot Deines tDS-Designers und lad ihn hoch.

    KAXTJ schrieb:

    Geht das überhaupt?
    Ja, das wär das Vorgehen wie ich Post#7 erwähnte.
    Hast Du die Optionen bei "zu erstellendes Element auswählen" im Beziehungsfenster selber mit Absicht geändert?
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.

    VaporiZed schrieb:

    Wozu braucht man 2 DataSets?


    Enschuldigung das wahr mein Fehler, ich meine zwei Tabellen.


    VaporiZed schrieb:

    Wie meinst Du das?



    Dadruch das ich in den Tabellen was änder stimmt meine Binding Souce nicht mehr, muss ja das mit dem int ändern. des wegen werde ich das später probieren.

    VaporiZed schrieb:

    Ja, das wär das Vorgehen wie ich Post#7 erwähnte.
    Hast Du die Optionen bei "zu erstellendes Element auswählen" im Beziehungsfenster selber mit Absicht geändert?


    Ja um rumm zu probieren, also ich habe jetzt denke ich alle varanten druch, bekomme es aber nicht hin wenn ich in der datagridView unter POS1 100 eingebe das bei Pos 1 Name qautmatisch der name erscheint.


    Aktuell Komplett Ohne Bezihungen
    Schau Dir mal das VVV-Tutorial vom EdR an.
    Dann noch das Testprojekt im Anhang: 2 Tabellen, beide mit ner ID, die Kundentabelle mit der Int32-Fremdschlüssel-ID, die dann die Verbindungsstelle mit der Anrede-Tabelle ist. Die Einstellungen sollte man normalerweise nicht ändern - gibt bestimmt gute Gründe, die mal zu ändern. Ich hatte bisher solch eine Situation noch nicht. Auch wenn das nicht sonderlich viel aussagt.
    Im DGV auf dem Formular kann man die gewünschte Auswahl mal durch eine ComboBox-Spalte erhalten, die man mit der Anrede-Tabelle füttert und bei Displaymember die Anrede und bei Valuemember die ID der Anredetabelle einstellt.
    Probier's mal aus.
    Dateien
    • TestApp.zip

      (41,54 kB, 77 mal heruntergeladen, zuletzt: )
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.

    VaporiZed schrieb:

    *dazu gleich die Frage nochmal @ErfinderDesRades: Hattest Du schonmal den Fall, dass ne Int32-AutoIncrement-ID über Int32.MaxValue ging?
    Nein.
    Man kann sich spasseshalber ja mal ausrechnen, wieviele Datensätze man pro Woche anlegen müsste, um in mw. 5 Jahren int.MaxValue zu erreichen:
    2147483647 / 260 = 8.259.552 Also knapp über eine Million pro Tag, incl. Wochenenden und Feiertage.
    Erstmal an edr supper tut :)

    So das hilft mir schon mal ne ganze menge.

    Ich bin Grade nicht am Rechner, aber was mir noch nicht klar ist wie ich folgendes mache:

    Tabelle mit Zig spalten, unter anderem: pos1id und pos1name

    Jetzt gebe ich im datagridviw, oder in der Detail Ansicht in pos1id 100 ein, da ist in einer anderen Tablelle "brot'' hinterlegt. Wenn ich die 100 eingebe und ein ''tab'' mache soll in einer anderen spalte (pos1name) der Name (brot) angezeigt werde


    Das einzige was ich mir vorstellen könnte, wenn ich die in der Detail Ansicht nach dem tab die Nummer automatisch übertrage in eine combobox für pos1name, die so konfiguriert ist das dann der Name angezeigt wird. Aber es gibt bestimmt eine andere Variante oder?

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „KAXTJ“ ()

    Gegenfrage: Warum sollte jemand mit IDs arbeiten? Ich habe das Beispiel extra so gemacht, das man das nicht macht. Ist im Normalfall nicht sonderlich benutzerfreundlich, mit IDs zu hantieren. Es geht, so ist es nicht. Aber den Sinn erkenn ich noch nicht. Oder geht es eher um festgelegte Kennzahlen, die bei Dir/Euch allseits bekannt sind, sodass man bei Euch ruft »Haben wir noch ein paar 100er im Lager?« Im Sinne von: "100" = 500 g Weizenbrot mit Sonnenblumenkörnern.
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.
    So blöd wie es sich anhört, genau so ist es. Daher wird eigentlich nur mit den ids gearbeitet.

    Ich habe es jetzt so wie oben schon geschrieben, das funktioniert auch ganz gut, Problem ist es funktioniert nur wenn in der id combobox mit Baus ausgewählt wird, wenn man nur per Tastatur eingibt geht es leider nicht...
    Dann kommt es wohl darauf an, was das werden soll. Ich tippe jetzt mal auf ne Bestelliste oder sowas.
    Dafür gäbe es 2 Möglichkeiten, die ich im Anhang mit drin habe.
    Variante 1 finde ich benutzerfreundlicher, da schneller zum Ausfüllen, Variante 2 kommt ohne Zusatz-VB-Code aus.
    Zu Variante 2: Wenn man eine Kennzahl eingeben will, ploppt automatisch die ComboBox auf. Sobald man dann was ausgewählt hat, erscheint auch in der Nachbarspalte die Bezeichnung - vorausgesetzt, man befindet sich nicht in der letzten Zeile und drückt Enter. Keine Ahnung, ob das gewollt oder ein Bug ist, aber die Produktbezeichnungsspalte wird dann nicht aktualisiert. Spekulatius: Weil die BindingSource schon im Neuen-Eintrag-Erstellen-Modus ist. Für das Phänomen kennt @ErfinderDesRades bestimmt eine gute Lösung.
    Dateien
    • TestApp2.zip

      (48,26 kB, 68 mal heruntergeladen, zuletzt: )
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.
    Also die Erste Variante ist er die die mir zusagt nur leider finde ich keine Möglichkeit sie so an zu wenden das es für mich passt. es hat mich aber auf folgende lösung gebracht:

    VB.NET-Quellcode

    1. Private Sub TextBox1_KeyDown(sender As Object, e As KeyEventArgs) Handles TextBox1.KeyDown
    2. If e.KeyCode = Keys.Enter Then
    3. RechnungenBindingSource.EndEdit()
    4. RechnungenBindingSource.ResetItem(RechnungenBindingSource.Position)
    5. End If
    6. If e.KeyCode = Keys.Tab Then 'Hier Suche ich grade noch eine Lösung
    7. End If
    8. End Sub



    zu dem tehma da suche ich eine lösung, ich würde gerne noch das Tab abfangen das gesteltet sich aber schwer....

    Diesen Lösungsansatz:

    VB.NET-Quellcode

    1. <System.Security.Permissions.UIPermission( _
    2. System.Security.Permissions.SecurityAction.LinkDemand, _
    3. Window:=System.Security.Permissions.UIPermissionWindow.AllWindows)> _
    4. Protected Overrides Function ProcessDialogKey( _
    5. ByVal keyData As Keys) As Boolean
    6. ' Extract the key code from the key value.
    7. Dim key As Keys = keyData And Keys.KeyCode
    8. If key = Keys.Tab Then
    9. RechnungenBindingSource.EndEdit()
    10. RechnungenBindingSource.ResetItem(RechnungenBindingSource.Position)
    11. End If
    12. Return MyBase.ProcessDialogKey(keyData)
    13. End Function


    verfolge ich jetzt seid einer Stunde, hat interresanter weise auch mal Funktioniert, jetzt habe ich die Tab reienfolge geändert jetzt geht es wieder nicht mehr.

    Dachte am anfang es leigt daran das der Focus von textbox1 zu schnell verloren geht habe es des wegen auch schon über ein KeyDown event der Form, natürlich mit aktivierung, probiet geht auch nicht.

    Die form Regisitriert beim Tab drücken nicht mal ein Event, bei enter usw. schon (Getestet über haltepunkte) jetzt gehen mir langsam die ideen aus wie ich ein Taqb abfragen könnte


    bei dem Tipp vb-paradise.de/index.php/Thread/?postID=45604#post45604 stört mich das der Tab im ganzen system abgefangen wird

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „KAXTJ“ ()

    @KAXTJ Wenn Du im KeyDown-Event die Funktionalität der Taste abgearbeitet hast, hast Du die Möglichkeit, die weitere Bearbeitung dieses Tastendrucks abzubrechen und dann sofort dier Prozedur zu verlassen:

    VB.NET-Quellcode

    1. Private Sub TextBox1_KeyDown(sender As Object, e As KeyEventArgs) Handles TextBox1.KeyDown
    2. If e.KeyCode = Keys.Enter Then
    3. RechnungenBindingSource.EndEdit()
    4. RechnungenBindingSource.ResetItem(RechnungenBindingSource.Position)
    5. e.SuppressKeyPress = True
    6. Return
    7. End If
    8. If e.KeyCode = Keys.Tab Then 'Hier Suche ich grade noch eine Lösung
    9. End If
    10. End Sub
    Damit wird das KeyPress-Ereignis unterdrückt (nicht aber KeyUp) und somit wird kein AutoRepeat erzeugt.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „RodFromGermany“ ()

    Also mit der Enter Taste bin ich vom verhalten her ganz zufrieden...

    Habe es eben obwohl ich davon ausgegeangen bin das es nicht funktioniert weil die Tab taste gar kein Event auslöst, auprobiert (Bei der tab taste) gibt es leider kein unterschid