Fahrzeuge in DGV erstellen und in Variablen speichern....

  • VB.NET

Es gibt 19 Antworten in diesem Thema. Der letzte Beitrag () ist von VaporiZed.

    Fahrzeuge in DGV erstellen und in Variablen speichern....

    Hallo Leute,

    ich habe eine DGV als Liste dort werden Autos gespeichert / gesetzt die man kauft ....

    so sieht das aus ...



    In meinen Spiel Startet man am 01.01.2000

    Klicke ich jetzt oben auf ein Fahrzeug kaufen (Sprinter oder Pritsche) dann erscheint alles wunderbar in der Tabelle, hier ist das TÜV datum zu beachten. Eingestellt ist +2 weil das Fahrzeug neu ist und zwei Jahre Tüv bekommt ...

    So meine Formel per Klick:

    VB.NET-Quellcode

    1. 'Beispiel Sprinter Kauf
    2. Dim Tuev As New Date
    3. Dim Fahrzeugart As String
    4. Dim Standort As String
    5. Dim Inspektion As Date
    6. Fahrzeugart = "Sprinter"
    7. Dim kzText = String.Format(SpielOption.Ortskennzeichen & "{0:0000}", Kennzeichen)
    8. Kennzeichen += 1
    9. Standort = Firmensitz.Text
    10. Tuev = DateAdd("yyyy", 2, SystemDatum)
    11. Inspektion = DateAdd("yyyy", 1, SystemDatum)
    12. DataGridView1.Rows.Add(Fahrzeugart, kzText, Standort, Tuev, Inspektion)


    Wenn ich jetzt z.b. am 5.1.2000 ein Fahrzeug kaufe dann wird mein TÜV datum überschrieben das quasi der Sprinter nicht mehr Tüv hat bis 01.01.2000 sondern 05.01.2002 ... dies erfolgt aber nur im hintergrund .... in der Tabelle beim ersten Auto wird Trotzdem noch das datum vom ersten auto Kauf angezeit (01.01.2000) und bei den neuen 05.01.2000 so wie es sein soll.....

    Wie bekomme ich es hin das er jedes Fahrzeug per klick für sich selber Speichert ? wie kann ich da vorgehen(brauche einen ansatz)?

    So sieht dann mein TÜV Klick aus wenn die 2 Jahre rum sind:

    VB.NET-Quellcode

    1. Dim NeuerTuev As New Date
    2. Dim Spalt As Integer
    3. Dim Zeil As Integer
    4. If Tuev > SystemDatum Then
    5. MessageBox.Show("Du Hast noch genug Tüv für dein Fahrzeug(Sprinter)", "Information")
    6. Exit Sub
    7. End If
    8. If NeuerTuev > SystemDatum Then
    9. MessageBox.Show("Du Hast noch genug Tüv für dein Fahrzeug(NEUTuev)", "Information")
    10. Exit Sub
    11. End If
    12. If MessageBox.Show("Willst du Tüv durchführen lassen an diesem Fahrzeug?", "Information", MessageBoxButtons.YesNo) = Windows.Forms.DialogResult.Yes Then
    13. NeuerTuev = DateAdd("yyyy", 2, SystemDatum)
    14. Spalt = 3
    15. Zeil = DataGridView1.CurrentCell.RowIndex
    16. DataGridView1.Item(Spalt, Zeil).Value = NeuerTuev
    17. End If


    Vielen dank im vorraus

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

    Du arbeitest ohne Datenmodell und wurstelst in einem ungebundenen DGV herum...
    Erstelle zunächst einmal ein typ. Dataset mit einer Tabelle, wo deine Daten gespeichert sind und binde dein DGV an diese Tabelle.
    Dann kannst du in der Tabelle deine Daten manipulieren und in einer .XML-Datei auf Festplatte etc. abspeichern und von dort deine Daten wieder zurrück in die Tabelle laden...
    @VBHunter Beachte auch, das der Tip, den @VB1963 dir gegeben hat, dir bereits in deinen zahlreichen Threads mehrfach gegeben wurde.
    Auch wurde dir mehrfach Hinweise gegeben, das Du mit VB6 Ranz arbeitest.
    Wenn Du all diese Tips auch wirklich mal umsetzen würdest, wäre Dein Spiel deutlich besser im Code...
    Mit e0inem typ. dataset erschlägst Du viele deiner Probleme auf einen Schlag und bekommst eine Lese/Speicher Funktion in wenigen Zeilen (für den Anfang geht es sogar in 1 Zeile Code)
    "Hier könnte Ihre Werbung stehen..."
    Sehr viele haben dir bereits viele Tipps gezeigt und viele Links gepostet welche du nicht liest/lernst. Hier helfen dir sooo viele und das in Ihrer Privaten Zeit, da solltest du dir bitte auch die Zeit nehmen die Links zu lesen und versuchen zu verstehen. Ist jetzt nicht böse gemeint. Ich habe dir bereits bei deinen ersten Post gesagt: Auch wenn du es vielleicht JETZT nicht glaubst, du bist schneller(!!!) unterwegs wenn du dir die Grundlagen aneignest und das Spiel dann erst beginnst. Im ernst, und ich meine das sogar inkl. (!!!) der Zeit für die Grundlagen, glaube mir.

    Ich wollte es damals auch so wie du, wurde aber ziemlich schnell klüger.

    Grüße
    Sascha
    If _work = worktype.hard Then Me.Drink(Coffee)
    Seht euch auch meine Tutorialreihe <WPF Lernen/> an oder abonniert meinen YouTube Kanal.

    ## Bitte markiere einen Thread als "Erledigt" wenn deine Frage beantwortet wurde. ##

    So ich habe mich mal jetzt zwei Tage beschäftigt mit dem Thema Datenbanken....

    Soweit blicke ich da durch und Danke für den Tipp es als Dataset anzulegen und das GridView datengebunden zu machen...Das speichern und Laden klappt super und ist sehr sauber aufgebaut....

    Ich habe jetzt in mein DataSet die Tabellen angelegt:


    Jetzt will ich es ja wie vorher haben das wenn ich ein Auto kaufe es Tabellarisch angeordnet wird .... Wie kann ich da weiter vorgehen(leider habe ich nichts ausführlicheres gefunden).

    Muss ich meine Code jetzt in die Datenbank / DataSet speichern oder trotzdem in der Form?

    Wie greife ich auf die DataSet zu, und füge ... hinzu so?
    DataGridView1.Rows.Add(Fahrzeugart)
    oder so?
    DataGridView1.Rows.Add(FahrzeugartDataGridViewTextBoxColumn)

    Danke im Vorraus...

    Nochmal zum letzten poast:
    Ja ich verstehe das, dass ich von vorn beginnen soll Tutorial für Tutorial das ich nicht laufend Fragen stelle. Aber ich will nicht mit irgendwelchen Programmen anfangen was ich nicht brauche. Ein Spiel was mir im Gedanken schwirrt erweitert immer mehr das wissen da immer wieder was neues dazu kommt wo man sich Fragt wie mache ich das .... wie funktioniert das .... usw.... aber na ja neben bei lese ich ja Bücher mit Grundwissen aber alles findet man in den dingern leider auch nicht.
    Stop. Du machst mit dem DGV codetechnisch gar nichts. Schau Dir die view Views vom ErfinderDesRades an: Form-Designer, Datenquellenfenster, DataTable als DGV auf das Form ziehen, fertig. Wenn Du mit den Videos durch bist und die Views nachbauen könntest, dann reden wir weiter. Vorher würde das in totalem Kuddelmuddel enden.
    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 nach einigen Tagen, mit lernen, Programieren und Testen habe ich es erfolgreich geschafft die view Views fertigzusetellen und so wie beschrieben umzusetzen. Es hat zwar einige anläufe gedauert aber damit ich es auch verstehe habe ich es in 3 mal nachgebaut...

    @VaporiZed wie wolltest du mir jetzt sagen wie es weiter geht :D
    Hallo

    wie es weiter geht

    OK, überleg mal was DU jetzt als nächstes unternehmen möchtest und versuche auf deine Art und weise an das Ziel zu kommen.
    Wenn du nicht an dein Ziel gelangst dann Poste was genau du versucht hast und den Code oder dein vorgehen und dann sehen wir weiter. Wir erwarten von dir das du es versuchst.
    Du willst doch was lernen richtig? Dazu gehört auch dan man sich genau überlegt was man machen möchte, dies in Worte zu fassen und danach zu Googeln. Also, mach das mal und Poste dann wie, was, wann und wo.

    Sonst bleibt der Lerneffekt völlig aus und du fängst jedesmal von vorne an, wie man an deinen letzten Themen/Beiträgen sehen kann.
    Ich weis, das wolltest du jetzt nicht hören, ich schreibs trotzdem 8-)

    Schöne Grüße
    Sascha
    If _work = worktype.hard Then Me.Drink(Coffee)
    Seht euch auch meine Tutorialreihe <WPF Lernen/> an oder abonniert meinen YouTube Kanal.

    ## Bitte markiere einen Thread als "Erledigt" wenn deine Frage beantwortet wurde. ##

    @VBHunter: Jetzt sollte Dir doch eigentlich ach klar sein, wo es wie weitergeht und was nicht mehr auf Deiner to-do-list stehen sollte. Denn wenn erstmal das DGV mit dem DataSet korrekt verbunden ist, geht es nur noch darum, das DataSet und dessen DataTables korrekt zu befüllen. Fertig. Deine Fahrzeuge landen dann in den Tabellen, d.h. die KFZ-Daten werden in die korrekten Schubläden gepackt und das DGV zeigt die aktuellen Daten automatisch an. Daher die Frage, die Nofear23m auch schon stellte: Wie willst Du jetzt weitermachen?
    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.
    Alles klar dann mach ich mich Mal Ran und Versuche es umzusetzen .... Dachte nur da käme jetzt noch irgendwas, wie man es angehen kann / ordnen kann weil du meintest erst lernen dann erzähle ich weiter :) ...
    So nachdem ich jetzt einige male umgebaut hab und so weiter.... bin ich jetzt wieder an ein ? geraten, wo ich einige Fragen habe.

    1. Das ist jetzt mein neuer Code der gekaufte Fahrzeuge in mein DataSet speichert....

    VB.NET-Quellcode

    1. Private Sub FahrzeugkaufSprinter()
    2. Dim Tuev As Date
    3. Dim Fahrzeugart As String
    4. Dim Standort As String
    5. Dim Inspektion As Date
    6. Fahrzeugart = "Sprinter"
    7. Dim kzText = String.Format(SpielOption.Ortskennzeichen & "{0:0000}", Kennzeichen)
    8. Kennzeichen += 1
    9. Standort = Firmensitz.Text
    10. Tuev = DateAdd("yyyy", 2, SystemDatum)
    11. Inspektion = DateAdd("yyyy", 1, SystemDatum)
    12. With DataSetBank
    13. .Fahrzeuge.AddFahrzeugeRow(Fahrzeugart, kzText, Standort, Tuev, Inspektion)
    14. End With
    15. End Sub


    Sieht ja eigendlich sehr gut aus bis hier hin ist auch alles Super. Kaufe ich jetzt ein zweites Fahrzeug habe ich wieder die gleichen Probleme wie vorher, das er beim neuen Adden eines Fahrzeugs das TÜV datum nimmt vom Kauf ... beispiel: Fahrzeug 1 wird am 01.01.2000 gekauft muss am 01.01.2002 zum TÜV. Fahrzeug 2 Wird am 04.01.2000 gekauft muss am 04.01.2002 zum TÜV .... haben wir jetzt Datum 01.01.2002 und ich will TÜV machen bei Fahrzeug 1 sagt er er hat noch TÜV (weil er vom letzten kauf ausgeht).....
    ABER NAJA ... ich hab es jetzt erstmal so geregelt das ich die Abfrage(siehe unter diesen absatz) entfernt hab und der Spieler immer TÜV machen darf innerhalb der 2 Jahre. Kommt er jedoch über 2 Jahre wird TÜVDATE Rot und er zahlt pro Tag eine Strafe. Weil im Reallife kan man ja auch vorher zum TÜV :rolleyes:.

    VB.NET-Quellcode

    1. If Tuev > SystemDatum Then
    2. MessageBox.Show("Du Hast noch genug Tüv für dein Fahrzeug(Sprinter)", "Information")
    3. Exit Sub
    4. End If


    2. Hier mein zeites Problem
    Ich weis nicht ob ich was falsch Verstanden hab oder es nochnicht so ganz in mein Dataset hinbekomme.
    Wenn ich ein Neues Fahrzeug kaufe, wie legt er es im DataSet an? Kann ich immer auf Fahrzeug (z.b. 3) zugreifen oder ändert sich das durch löschen des Fahrzeugs davor?

    3. Löschen von Datensätzen
    Ich habe gelesen das ich so Datensätze entfernen oder ändern kann DataSetBank.Fahrzeuge(3).TÜV = "01.01.3000" <---- in diesen fall ändert er TÜV im DataSet.
    Jetzt will ich alles löschen / das ganze Fahrzeug (Zeile) dies mache ich doch so oder? Oder bleibt der Datensatz trotzem im Set gespeichert?

    VB.NET-Quellcode

    1. Dim Index As Integer
    2. Index = DataGridView2.CurrentCell.RowIndex
    3. DataGridView2.Rows.RemoveAt(Index)
    4. MessageBox.Show("Fahrzeug wurde Verkauft.", "Information")


    Ich hoffe, ich belaste euch nicht zu sehr mit diesen ganzen Fragen :rolleyes:
    @ErfinderDesRades meint das Du die Funktionen von .Net nutzen sollst.
    Dein SystemDatum ist ja ein Date (hoffe ich) dann schreib mal ​SystemDatum. und schaue was Intelisense dir anbietet. Da gibt es jede Menge um dein Datum zu berechnen...
    "Hier könnte Ihre Werbung stehen..."
    Jo - insbesondere meine ich, den vb6-Namespace-General-Import rauszuwerfen - wie hier gezeigt: Visual Studio - Empfohlene Einstellungen
    @vbHunter: Das ist dir doch bestimmt schon zig-mal empfohlen worden!
    Und deine Codes sind trotzdem immer wieder ein schönes Beispiel dafür, wie dieser (ich nenne ihn: den "Deppen-Namespace") verhindert, dass man überhaupt anfängt, Struktur, Prinzipien und die gewaltigen Möglichkeiten der .Net-Sprachen und ihres Frameworks zu verstehen.
    Zum 1. Problem: mit dem Hinweis von MichaHo (dass Du mal SystemDatum schreibst und dann den Punkt dahinter in Deinem Code setzt, dann werden nämlich viele Vorschläge gemacht, was man mit jenem Objekt machen kann), sollte sich sehr schnell eine Lösung ergeben, wie folgendes Problem zu lösen ist: Der TÜV geht wohl nicht ab Kauf 2 Jahre, sondern einen Tag weniger. Also 2 Jahre draufrechnen und dann einen Tag abziehen. Schau mer mal, ob Du das vb.net-technisch hinbekommst. Bitte poste Deinen Vorschlag.

    Zum 2. Problem: Im DataSet hast Du laut Post#5 eine DataTable namens Fahrzeuge. DataTable = Tabelle => stell Dir ne Exceltabelle vor:
    Fahrzeug-ID
    Fahrzeugart
    Kennzeichen
    Standort
    TÜV
    Inspektion
    1
    Sprinter
    B-ER 2050
    Berlin
    03.01.2002
    04.01.2002

    Dann kommt Dein Code, mit dem Du ein neues Fahrzeug anlegst: DataSetBank.Fahrzeuge.AddFahrzeugeRow; Row = Zeile => Deine Tabelle Fahrzeuge wird um eine Zeile erweitert und dort werden die neuen Fahrzeugdaten eingetragen. Also wird da nichts überschrieben, sondern nur eine Tabelle erweitert. Allerdings wäre auf Dauer eine Kleinigkeit sinnvoll, die auch in den vier Views besprochen wurden: Dir fehlt Spalte 1, die ID, welche automatisch verändert wird, wenn eine neue Tabellenzeile angelegt wird. Ob Du sie für Dein Programm brauchst oder nicht, kannst Du m.E. noch nicht abschätzen. Aber besser ist, wenn Du sie drin hast. Es geht auch ohne, so ist es nicht. Aber da sich für Dich codetechnisch nichts ändert, versuch sie lieber früher als später reinzubauen.

    Zum 3. Problem:

    VBHunter schrieb:

    Ich habe gelesen das ich so Datensätze entfernen oder ändern kann
    Ich kenne zwar Deine Quelle nicht, aber so werden Datensätze nicht gelöscht. Auch das Löschen von Zeilen in einem DataGridiew ist kein gangbarer Weg. Stattdessen suchst Du Dir z.B. die DataRow aus, welche Du löschen willst und wendest Die Methode Delete() darauf an. "Häh, wiewas? Delete-Methode darauf anwenden? Was für ne Delete-Methode?" Das ist das gleiche wie bei Problem 1. Dort ist Systemdatum ein Objekt. Einen Punkt dahinterschreiben und es kommen Vorschläge, inkl. Methoden, die man auf dieses Objekt namens Systemdatum anwenden kann. Und so ist auch (wie alle Variablen in VB.Net) eine DataRow ein Objekt. Mit jenem Objekt kann man andere Sachen machen. Eben z.B. löschen mittels Delete().
    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.
    Danke jetzt weis ich was gemeint ist mit .... schreibe in VB.Net 8o

    Danke, ich zieh mir den Link gleich mal rein, hol nur schnell Popcorn ;)

    Beste @VaporiZed das ist mal wieder eine erklärung die einsteiger verstehen :thumbup: super erklärt.
    Ja genau so dachte ich es mir das es mir auch schon das es eine art Exel ist, nur dachte ich das man z.b. von woanders darauf zugreifen kann. Aber das mit der ID sollte ja auch wieder passen... wenn ich ID einbaue wie im Video dan Könnte ich z.b. ein Label (Dataset anhängen) und etwas anzeigen lassen z.b. Fahrzeug 7,9 & 10 wenn man auf Berlin klickt und es mir da alle Fahrzeuge anzeigen soll ... Ich werd es mal Testen und Berichten ^^

    zu 1. Ich werd mich da auch mal ran machen und mein Vorschlag poasten. Soweit hab ich das ja jetzt schon.

    VB.NET-Quellcode

    1. .Fahrzeuge.AddFahrzeugeRow(Fahrzeugart, kzText, Standort, SystemDatum.AddYears(2), Inspektion)

    zumindest beim Kauf eines Fahrzeugs. An die TÜV geschichte mach ich mich auch noch ran

    zu 3 nochmal:

    ähm also ich meinte wie kann ich ein eingetragenen Datensatz ändern? add fügt hinzu, Delete löscht.... was überschreibt? so wie ich es hatte? DataSetBank.Fahrzeuge(3).TÜV = "01.01.3000"

    und das andere war das löschen, gut das hab ich verstanden das ich ein Objekt so löschen kann nur was ist mir einer ganzen Zeile. Beispiel deine Tabelle da oben das Fahrzeug mit ID1 soll jetzt gelöscht werden.
    EDIT dazu: hab das hin bekommen ist es so richtig?

    VB.NET-Quellcode

    1. Dim Index As Integer
    2. Index = DataGridView2.CurrentCell.RowIndex
    3. With DataSetBank
    4. .Fahrzeuge.Rows.RemoveAt(Index)
    5. End With


    So löscht er jetzt zumindest eine Zeile aus dem Set nicht nur vom View

    Dieser Beitrag wurde bereits 3 mal editiert, zuletzt von „VBHunter“ ()

    Befindet sich in diesem With noch mehr Code, den du uns nicht zeigst? So wie es dort steht, ist With absolut unnötig. With benutzt man, wenn man mehrfach nacheinander auf eine Variable zugreift, um sich das immer erneute Schreiben dieser Variablen zu sparen. Wenn du die Variable nur 1x aufrufst, brauchst du With nicht.
    Das Ändern sollte nicht per DataGridView-Indices durchgeführt werden. Eine kurze DGV-Sortierung und der Index verweist auf die falsche DataRow. Ich dachte, dass das auch in den vier Views erwähnt wurde. Nutze die BindingSource, entweder, indem Du BindingSource.Current in eine DataRow unwandelst oder indem Du mit BindingSource.Position den Row-Index bekommst. Also statt

    VB.NET-Quellcode

    1. Index = DataGridView2.CurrentCell.RowIndex

    eben

    VB.NET-Quellcode

    1. Index = FahrzeugeBindingSource.Position

    oder eben direkt

    VB.NET-Quellcode

    1. DirectCast(DirectCast(FahrzeugeBindingSource.Current, DataRowView).Row, DataSetBank.FahrzeugeRow).Delete()

    Das mit dem Bearbeiten kannst Du codetechnisch z.B. so machen, wie Du es herausgefunden hast, ja.
    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.

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