Probleme bei Übergabe von Werten aus einem Dt

  • VB.NET

Es gibt 17 Antworten in diesem Thema. Der letzte Beitrag () ist von MR_NMS.

    Probleme bei Übergabe von Werten aus einem Dt

    Hallo!

    Ich versuche gerade Default Werte in ein Dgv anzuzeigen.
    Aber leider bekomme ich nicht alle Werte angezeigt!
    TagVon und TagBis werden angezeigt
    Mitarbeiter FullName leider nicht!

    Wenn ich einen Haltepunkt setze bekomme ich die Mitarbeiter im Code angezeigt!
    Kann es sein, das ich die Daten aus einem Anderen MitarbeiterDT nicht in das Gebundene Dgv (SchichtenDT) anzeigen kann?

    VB.NET-Quellcode

    1. Dim recordCount As Integer = 0
    2. recordCount = UmsatzDS.MitarbeiterDT.Rows.Count
    3. For Each Mitarbeiter In UmsatzDS.MitarbeiterDT
    4. For i = 0 To recordCount - 1
    5. UmsatzDS.Tables("SchichtenDT").Columns("FullName").DefaultValue = Mitarbeiter.FullName
    6. UmsatzDS.Tables("SchichtenDT").Columns("DatumVON").DefaultValue = TagVon
    7. UmsatzDS.Tables("SchichtenDT").Columns("DatumBIS").DefaultValue = TagBis
    8. Dim newCustomersRow = UmsatzDS.SchichtenDT.NewRow(i)
    9. newCustomersRow = UmsatzDS.SchichtenDT.Rows.Add
    10. Next
    11. Next
    Bei mir funktioniert es im Prinzip schon. Aber was Du machst, ist komisch.
    1. Du kannst auch hier typisiert arbeiten: UmsatzDS.SchichtenDT.FullNameColumn.DefaultValue = DeinWert
    2. Du kannst nur der gesamten Spalte einen Defaultwert geben. Warum setzt Du in der Schleife aber xmal einen anderen DefaultValue? Was wird das, wenn's fertig ist?
    3. Warum arbeitest Du nicht mit UmsatzDS.SchichtenDT.AddSchichtenDTRow(...)
    Bilder
    • DefaultColumnValues.png

      17,24 kB, 559×521, 151 mal angesehen
    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.
    Hi!
    Ich schaue zuerst welche Mitarbeiter in MitarbieterDT sind und füge dann die Anzahl zu!

    Sind 2 Mitarbeiter vorhanden werden 2 NewRows zugefügt!


    Nun habe ich im Dgv für FullName eine Combobox genommen mit dem Verweis auf den MitarbieterDT!

    Jetzt möchte ich aber die Combobox ist eine TextBox zurückstellen und dort dann die Mitarbeiter die im MitarbieterDt vorhanden sind untereinander eintragen!
    Bilder
    • Ansicht.JPG

      61,54 kB, 1.405×379, 145 mal angesehen
    Langsam. Du hast also in der 1. Spalte des DGVs ne ComboBox-Spalte. Und in jeder Zeile steht dann ein Mitarbeiter, den Du ggf. über die ComboBox in Spalte 1 ändern kannst. Und was dann?

    MR_NMS schrieb:

    Jetzt möchte ich aber die Combobox ist eine TextBox zurückstellen und dort dann die Mitarbeiter die im MitarbieterDt vorhanden sind untereinander eintragen!
    Den Satz versteh ich inhaltlich nicht. Derzeit stehen also die Mitarbeiter alle drin. Und was soll in den Zellen der 1. Spalte tatsächlich drinstehen? In der 1. Zelle jeder Zeile alle Mitarbeiter untereinander? Das heißt:
    Mux Masterman
    Kelmut Hohl
    Peter Unlustig
    bla
    bla
    Mux Masterman
    Kelmut Hohl
    Peter Unlustig
    bla
    bla
    Mux Masterman
    Kelmut Hohl
    Peter Unlustig
    bla
    bla
    :?:
    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.
    Es gibt dann 2 Möglichkeiten: Du schaltest die ComboBox Column auf ReadOnly und den DisplayStyle auf Nothing. Dann sieht es aus wie ne TextBox und bearbeitbar ist es auch nicht. Aber das DataBinding bleibt erhalten und die Spalte wird automatisch befüllt. Oder Du machst eine TextBoxColum draus, entfernst die Datenbindung und befüllst es manuell. Das kommt auch darauf an, ob die Namen noch bearbeitbar sein sollen - was ich nicht glaube. Daher wohl Variante A.

    VB.NET-Quellcode

    1. Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
    2. Tds.Konstrukteure.AddKonstrukteureRow("Mux Masterman")
    3. Tds.Cars.AddCarsRow(Date.Today, Tds.Konstrukteure(0))
    4. Tds.Konstrukteure.AddKonstrukteureRow("Kelmut Hohl")
    5. Tds.Cars.AddCarsRow(Date.Today, Tds.Konstrukteure(1))
    6. Tds.Konstrukteure.AddKonstrukteureRow("Peter Unlustig")
    7. Tds.Cars.AddCarsRow(Date.Today, Tds.Konstrukteure(2))
    8. End Sub
    Bilder
    • TextBoxLikeComboBoxColumn.png

      68,83 kB, 1.194×816, 90 mal angesehen
    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“ ()

    @MR_NMS: Und noch ein Tipp für zukünftige Posts. Ich habe Deine ursprüngliche Antwort in Post#7 gelesen und dachte, dass damit alles geklärt wurde. Wenn Du dann allerdings längere Zeit später den Beitrag bearbeitest und dann wie hier angibst, dass es doch nicht so läuft wie erhofft, dann ping mich mithilfe der @-Funktion an (so wie ich es am Anfang dieses Posts gemacht habe, also @'Name'), damit ich das auch mitbekomme, sonst erfahre ich nie, dass da noch was zu tun ist - bis jemand anderes noch antwortet. Wie in dem Fall EdR.
    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.
    Hallo!

    @VaporiZed:

    @ErfinderDesRades:


    Irgendwie ich immer noch auf dem Schlauch!

    Mein DGV habe ich an SchichtenDT gebunden. Im DGV habe ich eine Combobox gebunden an den MitarbieterDT.
    Es gelingt mir aber immer noch nicht, das die vorhandenen Mitarbeiter im MitarbiterDT in jeweils eine neue Zeile angezeigt werden! (Zu sehen Bild "Neu)
    Also wenn 3 Mitarbeiter vorhanden sind, sollen auch 3 Zeilen mit dem Jeweiligen Mitarbeiter angezeigt werden. (Zu sehen Bild2

    VB.NET-Quellcode

    1. For Each Mitarbeiter In UmsatzDS.MitarbeiterDT
    2. UmsatzDS.SchichtenDT.DatumVONColumn.DefaultValue = TagVon
    3. UmsatzDS.SchichtenDT.DatumBISColumn.DefaultValue = TagBis
    4. UmsatzDS.SchichtenDT.MonVONColumn.DefaultValue = "07:45"
    5. UmsatzDS.SchichtenDT.MonBISColumn.DefaultValue = "18:45"
    6. UmsatzDS.SchichtenDT.Rows.Add()
    7. Next
    Bilder
    • Neu.JPG

      87,49 kB, 811×1.411, 135 mal angesehen
    • Bild2.JPG

      71,67 kB, 1.587×480, 129 mal angesehen

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

    Was soll das denn: UmsatzDS.SchichtenDT.Rows.Add()
    Da der Schicht kein Mitarbeiter zugeordnet wurde, kann das DGV dann auch nix passendes anzeigen.
    Nutze UmsatzDS.SchichtenDT.AddSchichtenDTRow(AllDeineParameterDieGebrauchtWerdenUmDieZeileKomplettZuBefüllen)
    Dabei hilft Dir IntelliSense, indem Du nach Eingabe von UmsatzDS.SchichtenDT.AddSchichtenDTRow die Klammer öffnest und ein Komma eintippst.
    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.
    Weil für das gewünschte Funktionieren der DGV-Anzeige nicht der FullName gebraucht wird, sondern die Mitarbeiter-ID. Nur diese stellt die Verbindung zwischen den DataTables dar. Denn so hast Du die Verknüpfung zwischen den beiden DataTables ja definiert (Post#2, Bild "Neu"). Ok, ich weiß nicht, wie FullName in der SchichtenDT bei Dir definiert ist, aber Datenredundanz scheint mir naheliegend, da FullName in der einen SchichtenDT wahrscheinlich = FullName in der MitarbeiterDT, oder? Und jeweils String. Anders gesagt: Dass FullName in beiden Spalten gleich sein wird, ist für den Compiler irrelevant. Er könnte genauso gut glauben, dass es Zufall ist. Niemand hindert einen ja daran, in der SchichtenDT für FullName den Wert "?" oder "Rumpelstilzchen" zu hinterlegen, obwohl es diese Mitarbeiter nicht gibt, oder?

    ##########

    Und bevor EdR wieder zuschlägt: UmsatzDS.SchichtenDT.Rows.Add() gibt was für einen Objekttyp zurück? DataRow. Und das geht wieder gefährlich in Richtung untypisiert. Auch wenn Du es hier (noch) nicht nutzt.

    MR_NMS schrieb:

    Die Schichten für die Woche stehen schon fest!
    Nein, nicht laut Deinen Angaben. Standardschichten stehen fest. Aber konkrete Schichten nicht. Nicht jeder arbeitet immer von 07:45 bis 18:45. Zumindest nicht in einem normalen Betrieb. Wenn es bei Dir so wäre: Wozu braucht man denn dann einen Dienstplan, wenn eh alles schon feststeht und jeder immer genauso kommt und geht?
    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“ ()

    Moment.

    MR_NMS schrieb:

    Also werde ich ein wenig umdenken und die Schichten vorgeben und der Benutzer wählt den jeweiligen Mitarbeiter zur Schicht.
    Nicht, dass das jetzt in die falsche Richtung geht. Ok, ich weiß nicht, wie Du Dein Programm gestalten willst, aber Schichten vorgeben und Mitarbeiter mit diesen Schichten zusammenfügen? Das kommt mir komisch vor. Aber wenn Du einen Sinn darin erkennst, bleib dabei. Liegt aber wohl auch daran, dass ich in meinem Programm eine andere Vorgehensweise habe. Ich erstelle eine mitarbeiterspezifische Schicht immer dann, wenn der Mitarbeiter wirklich an einem Tag arbeitet. Das heißt, ich habe für eine neu zu planende Woche erstmal gar keine Zeilen in der SchichtenTabelle, sondern erst, wenn ein Mitarbeiter an einem bestimmten Tag im Schichtplan eingetragen wird, wird diese Schicht in die Tabelle eingetragen. Damit erhält quasi jeder Arbeitstag eines Mitarbeiters eine SchichtenTabellen-Zeile. Habe ich also 3 Mitarbeiter, bei denen MA1 3 Tage in KW 20 arbeitet, MA2 5 und MA3 6 ergeben sich für jene KW also 14 SchichtenTabellen-Zeilen. Du hast nur 3. Eine pro Mitarbeiter. Diese Zeilen sind aber im Vergleich zu meinen Zeilen sehr groß, da sie die ganzen Daten für eine Woche zu speichern scheinen. Arbeitet in einer Woche ein Mitarbeiter aber gar nicht, legst Du trotzdem eine SchichtenTabellen-Zeile an, ich hingegen nicht.
    Aber, wie gesagt: Zwei Datenmodelle, zwei Herangehensweisen. Welche davon besser oder schlechter ist, wage ich nicht zu entscheiden. Vielleicht kann man auch sagen: Sie sind einfach nur anders.
    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.
    Die Schichten liegen eigentlich für die Woche schon fest, da sie an den Öffnungszeiten und Kundenandrang gebunden sind.
    2 Mitarbeiter sind ab 07:45 bis 17:00 Uhr vor Ort.
    1 Mitarbeiter ab 08:30 bis 18:00
    1 Mitarbeiter ab 10:00 bis 19:00
    1 Mitarbeiter am 12:00 bis 19:00

    Also mein Gedanke, ich gebe die 5 Schichten vor und die Mitarbeiter werden der Schicht zugeordnet.
    Ah, ok! Fixe Schichtzeiten. Ja, dann ergibt das ganze Sinn und eine Mitarbeiterzuordnung zu den vorgegebenen Schichten ist der richtige Weg.
    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.