Auftragsbuch mit Dataset, Datagridview und XML-Export

  • VB.NET

Es gibt 97 Antworten in diesem Thema. Der letzte Beitrag () ist von Dksksm.

    Das Problem ist: Solange Du noch in der Zeile selber bist, ist der Editiermodus dafür nicht beendet.
    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:

    Das Problem ist: Solange Du noch in der Zeile selber bist, ist der Editiermodus dafür nicht beendet.


    Gibt es irgendeinen Trick, das zu umgehen? Ich hatte versucht, einen Tastenanschlag mit SendKeys zu simulieren aber es muss in diesem Fall scheinbar wirklich ein physischer Anschlag sein.
    Auch jegliche Versuche mit Refresh brachten nichts.

    ErfinderDesRades schrieb:

    Bei CheckboxColumns gehe ich inzwischen quasi "hintenrum" vor:


    Ich verusche mal mein Glück

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „Madde“ ()

    Naja, statt da irgendwas zu simulieren, mach doch an der Stelle (wo immer das auch ist) ein DeinDGV.EndEdit: DeineBindingSource.EndEdit.
    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.
    Ich mach das im CellContentClick-EventHandler und da funktioniert das super.
    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:

    Ich mach das im CellContentClick-EventHandler und da funktioniert das super.

    Habe es noch einmal damit versucht aber das funktioniert bei mir nicht wirklich. Ich muss erst den Haken setzen (klappt erst beim zweiten Klick...und nein ich verwende nicht das DoubleClick-Event ;) ) dann die Zelle verlassen und erst bei erneutem Klick in die Zelle kommt der Eintrag.
    Na dann: finde den relevanten Unterschied
    Dateien
    • WinFormsVB.zip

      (22,6 kB, 53 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:

    Na dann: finde den relevanten Unterschied

    8o Jetzt!!! Danke. Ich hatte die EndEdits nach der Befüllung der Spalten gesetzt. War wohl falsch.

    Ich hoffe, es ist Ok, wenn ich alle Fragen, welche das Auftragsbuch betreffen, hier reinschreibe und nicht immer einen neuen Post eröffne. Ich war der Meinung, der Übersichtlichtkeit wegen nur einen Anlaufpunkt zu haben, trotz der sehr variablen Fragen.

    Das Buch läuft im Übrigen aktuell in einer Testphase und macht bislang einen guten Eindruck. In wie weit das dann mit zunehmender Auftragsanzahl aussieht, wird man sehen.
    Eine Sache hätte ich dann doch noch.
    Es gibt die Möglichkeit der Filterung nach Auftragsnummer, Kunde oder Datum. Ich hätte gern noch eine Möglichkeit mit eingebaut, welche einen gesamten Monat listet. Sprich, per Combobox o.ä. den Monat wählen und dann werden alle Aufträge aus diesem Monat gelistet.
    Aktuell filtere ich nach Datum wie folgt.

    VB.NET-Quellcode

    1. TblAuftragsbuchBindingSource.Filter = String.Format("CONVERT([Eingangsdatum],System.String) LIKE '*{0}*'", TextBoxSearch.Text)


    Jetzt wird mir @ErfinderDesRades die DataExpressions ans Herz legen aber da steige ich irgendwie nicht dahinter.
    Ich glaube, ich benötige hier mal wieder einen Denkanstoß ;)

    Gruß Madde
    Hier halte ich mal meine Variante (siehe post#28) neben der von Vpz:

    VB.NET-Quellcode

    1. Private Sub DgvOrders_CellContentClickVpz(sender As Object, e As DataGridViewCellEventArgs) Handles DgvOrders.CellContentClick
    2. If BsOrders.Count = 0 Then Return
    3. If e.ColumnIndex = 1 Then
    4. DgvOrders.EndEdit()
    5. BsOrders.EndEdit()
    6. Dim CurrentOrder = DirectCast(DirectCast(BsOrders.Current, Data.DataRowView).Row, DataSet1.OrdersRow)
    7. If CurrentOrder.IsDone Then CurrentOrder.TimeStamp = Date.Now
    8. End If
    9. End Sub
    10. Private Sub DgvOrders_CellContentClickEdr(sender As Object, e As DataGridViewCellEventArgs) Handles DgvOrders.CellContentClick
    11. If BsOrders.Count = 0 OrElse e.ColumnIndex <> 1 Then Return
    12. Dim CurrentOrder = DirectCast(DirectCast(BsOrders.Current, Data.DataRowView).Row, DataSet1.OrdersRow)
    13. CurrentOrder.IsDone = Not CurrentOrder.IsDone
    14. If CurrentOrder.IsDone Then CurrentOrder.TimeStamp = Date.Today
    15. End Sub
    wie gesagt: Bei mir ist die Spalte dann Readonly.
    Und die Checkbox zu klicken ist im Grunde gar keine Eingabe ins DGV (die mit bs.EndEdit nachzubessern ist).
    Sondern das ist nur ein Klick, der eine Codeseitige Datenmanipulation auslöst.



    Vielleicht wäre so auch noch sinniger:

    VB.NET-Quellcode

    1. Private Sub DgvOrders_CellContentClickEdr2(sender As Object, e As DataGridViewCellEventArgs) Handles DgvOrders.CellContentClick
    2. If BsOrders.Count = 0 OrElse e.ColumnIndex <> 1 Then Return
    3. Dim CurrentOrder = DirectCast(DirectCast(BsOrders.Current, Data.DataRowView).Row, DataSet1.OrdersRow)
    4. CurrentOrder.IsDone = Not CurrentOrder.IsDone
    5. CurrentOrder.TimeStamp = If(CurrentOrder.IsDone, Date.Today, #1/1/1900#)
    6. End Sub
    dass bei UnDone der Timestamp auch wieder auf den Minimalwert gesetzt wird.
    Noch weiter gedacht kann dann der Boolean aus dem Datenmodell sogar entfallen. IsDone ergibt sich ja aus dem Timestamp.

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

    Beispiel

    Madde schrieb:

    TblAuftragsbuchBindingSource.Filter = String.Format("CONVERT([Eingangsdatum],System.String) LIKE '*{0}*'", TextBoxSearch.Text)


    Darf ich Euch nochmal in Bezug auf das Filtern bemühen. Ich würde eben gern neben den bereits funktionierenden Filtern, auch alle Einträge eines gewissen Monats filtern. Die Auswahl soll dann per Combobox erfolgen.
    Soll heißen, alle Aufträge des gewählten Monats sollen angezeigt werden.
    Hallo Zusammen,

    ich würde gern noch etwas in das Auftragsbuch einbauen, komme aber nicht dahinter, wo ich ansetzen muss.

    Aktuell verwende ich folgenden Code für die Anzeige im DGV.

    VB.NET-Quellcode

    1. Dim Row = DirectCast(DirectCast(TblAuftragsbuchBindingSource(SelectedRowIndex), Data.DataRowView).Row, dtsAuftragsbuch.tblAuftragsbuchRow)
    2. If DirectCast(DirectCast(TblAuftragsbuchBindingSource(SelectedRowIndex), Data.DataRowView).Row, dtsAuftragsbuch.tblAuftragsbuchRow).Geliefert = True Then
    3. If Row.Ersteller = "STORNO" Then
    4. Row.Lieferart = "Storniert"
    5. ElseIf Row.Versandart = "Fahrer" Then
    6. Row.Lieferart = "Geliefert"
    7. ElseIf Row.Versandart = "UPS" Then
    8. Row.Lieferart = "Versandt"
    9. Else
    10. Row.Lieferart = "Abgeholt"
    11. End If


    Nun würde ich gern im DGV bei Lieferart eine Combobox haben mit Fahrer1, Fahrer 2, Fahrer 3, Versandt, Abgeholt
    Im Dataset würde ich dafür die Lieferart in Combobox umstellen.
    Nur wie muss ich diese Spalte nun im Code ansprechen, dass sie mir entsprechend der Auswahl in der Combobox die Einträge anzeigt und in die XML schreibt.

    @ErfinderDesRades Dein Beispiel "Phonebook" bringt ja mit dem Title so etwas ähnliches mit aber ich werde daraus dennoch nicht schlau.


    Gruß Madde

    Madde schrieb:

    Im Dataset würde ich dafür die Lieferart in Combobox umstellen.
    Eh … wat? DataSet kennt keine ComboBox.
    Was Du machen kannst, um das vermutliche Ziel zu erreichen: eine DataTable Lieferarten mit ID (Int32) und Name oder Beschreibung (String). Das kannst Du an ne ComboBox auf Deinem Form anbinden: ValueMember ist ID, DisplayMember ist Name (oder eben Beschreibung). Dann kannst Du über die ComboBox die Lieferart auswählen. Row.Lieferart ist dann natürlich kein String mehr, sondern das Teil wird zu LieferartID vom Typ Int32, was dann nur auf den entsprechenden Eintrag in der Lieferartentabelle verweist.

    btw: If […].Geliefert = True Then -> If […].Geliefert Then: Boolean-Vergleiche mit True sind überflüssig.
    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.

    Madde schrieb:

    @ErfinderDesRades Dein Beispiel "Phonebook" bringt ja mit dem Title so etwas ähnliches mit aber ich werde daraus dennoch nicht schlau.
    Tja.
    Beschäftige dich damit. Prüfe zuerst, ob das Sample vom Prinzip her das kann, was du benötigst.
    Wenn ja, wirds wohl keinen sinnvollen Weg drumrum geben, sich daraus schlau zu machen.
    Weil steckt ja das KnowHow drin was du brauchst. Und ohne das wirst du allenfalls eine minderwertige Lösung zusammenstoppeln können, wenn überhaupt.
    Um beim Aufschlauen helfen zu können brauchts aber konkrete Fragen - die Info allein, dass du draus nicht schlau wirst gibt keinen Ansatz, auf den man eingehen könnte.
    Hallo Zusammen,

    ich hätte da nochmal eine Frage in Bezug auf die Auswertung von Daten im DGV/Bindingsource.

    Ich würde gern in einem Label anzeigen, was der "auftragsreichste" Monat war. Die Basis hierfür wäre die Spalte "Eingangsdatum".
    Wie könnte ich das umsetzen?

    Gruß Madde
    Ich kenne deine DGV-Spalten nicht. Aber ganz grundlegend: Sich die Daten aus einem DGV herauszufischen ist ein krampf, vor allem sinnlos (naja eher unzweckmäßig) wenn die Daten ohnehin in einer Datatable vorliegen.
    Mein vorschlag, such mal nach LINQ Query Datatable und überlege dir, welche Zeiträume du meinst. Ich weiß ja nicht einmal, ob deine Daten typisiert vorliegen.