ComboBox sortieren - Monat.Jahr

  • VB.NET

Es gibt 21 Antworten in diesem Thema. Der letzte Beitrag () ist von davyb.

    ComboBox sortieren - Monat.Jahr

    Hallo,
    Ich habe nach eine Lösung gesucht im Netz und davon viel probiert aber leider geht bei mir nicht.
    Ich habe ein Combobox die ich binde mit ein Spalte von ein Tabelle.
    Der Wert in diese Spalte ist "Monat.Jahr", also zum Beispiel "01.2013", "05.2013", "04.2013", "01.2014"
    Befühlen von der Combobox funktioniert:

    VB.NET-Quellcode

    1. DataTableBindingSource.Sort = "MonatJahr" 'Sortieren von Daten
    2. cboxMonatJahr.DataSource = frmTimeTool.DBDataDataSet.Tables("Table_Informations")
    3. cboxMonatJahr.DisplayMember = "MonatJahr"


    Leider wird diese nicht sortiert wie ich möchte, es kommt diese Reihenfolge: "01.2013", "01.2014", "04.2013", "05.2013"
    Ich möchte aber gern diese Reihenfolge:"01.2013", "04.2013", "05.2013", "01.2014".

    Mit

    VB.NET-Quellcode

    1. cboxMonatJahr.Sorted=true

    geht leider auch nicht.

    Kann mir da Jemand helfen?

    Merci beaucoup ;)
    DavyB

    davyb schrieb:

    Kann mir da Jemand helfen?
    Häng an die Combobox keine Strings, sondern DateTime-Objekte:

    VB.NET-Quellcode

    1. ComboBox1.Items.Add(DateTime.Now)
    die sind in jedem Fall chronologisch sortierbar.
    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!
    Danke für deine Antwort. Ich habe folgendes probiert:
    - Neue Spalte in mein DB als DateTime, Name "MA"
    Werte sind "01.01.2013", "01.05.2013", "01.04.2013", "01.01.2014"
    Als Code habe ich so gemacht:

    VB.NET-Quellcode

    1. Dim RowCountMonatJahr As Integer
    2. RowCountMonatJahr = DataTableBindingSource.Count
    3. DataTableBindingSource.Sort = "MA"
    4. For i = 0 To RowCountMonatJahr - 1
    5. Dim SPLITX As Array
    6. SPLITX = Split(DBDataDataSet.Tables("Table_Informations").Rows(i).Item("MA"), ".")
    7. Dim Tag As New DateTime(SPLITX(2), SPLITX(1), SPLITX(0))
    8. cboxMonatJahr.Items.Add(Tag)
    9. Next
    10. cboxMonatJahr.Sorted = True


    leider bekomme ich immer noch folgende Reihenfolge: "01.01.2013", "01.01.2014", "01.04.2013", "01.05.2013"
    in deiner Combobox stehen zwar Datums werte sie werden aber als Strings ausgewertet.

    Du müsstest die Werte in einer List(of date) sammeln und sortieren und dann Sortiert wieder in die Combobox schreiben.
    There is no CLOUD - just other people's computers

    Q: Why do JAVA developers wear glasses?
    A: Because they can't C#

    Daily prayer:
    "Dear Lord, grand me the strength not to kill any stupid people today and please grant me the ability to punch them in the face over standard TCP/IP."
    Ich sehe gerade:

    Da musst Du die Combobox halt selbst sortieren. Gugst Du hier.
    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!
    Vielen Dank an euch Beide. Mit der List(of date) hat geklappt.
    So habe ich der Code geändert, vielleicht kann man noch etwas verbessern, aber es funktioniert...

    VB.NET-Quellcode

    1. Dim RowCountMonatJahr As Integer
    2. Dim ListDate As New List(Of Date)
    3. RowCountMonatJahr = DataTableBindingSource.Count
    4. For i = 0 To RowCountMonatJahr - 1
    5. ListDate.Add(DBDataDataSet.Tables("Table_Informations").Rows(i).Item("MA"))
    6. Next
    7. ListDate.Sort()
    8. For j = 0 To ListDate.Count - 1
    9. cboxMonatJahr.Items.Add(ListDate.Item(j).ToString("MM.yyyy"))
    10. Next


    und erhalte jetzt : "01.2013", "04.2013", "05.2013", "01.2014"
    Hi,

    kannst da nicht am Ende sowas wie
    cboxMonatJahr.DataSource = ListDate machen?
    Es war einmal ein kleiner Bär... der wollte eine Geschichte hörn... Da erzählte ihm seine Mutti:
    Es war einmal ein kleiner Bär... der wollte eine Geschichte hörn... Da erzählte ihm seine Mutti:
    Es war einmal ein kleiner Bär... der wollte eine Geschichte hörn... Da erzählte ihm seine Mutti:
    ... Nun solltest es selber wissen. :'D
    Da ist auch nen Denkfehler.
    Du kannst das Source keinen String geben. Nur Auflistungen.
    Also das "toString" versaut dir da die Sache total ;)
    Du kannst aber der Combobox nen "FormatString" geben.
    Also kannst du dann soweit meine Idee, die Liste mit Daten an die Combobox hängen als Source und ihr nen FormatString übergeben der sie nur den Monat und das Jahr anzeigen lässt.

    Manuelles Beispiel:

    VB.NET-Quellcode

    1. Dim liste As New List(Of Date)
    2. liste.Add(CDate("01.01.2013"))
    3. liste.Add(CDate("01.02.2013"))
    4. liste.Add(CDate("01.01.2014"))
    5. Me.ComboBox1.FormatString = "MM.yyyy"
    6. Me.ComboBox1.DataSource = liste


    PS:
    Kannst du nicht gleich

    VB.NET-Quellcode

    1. DBDataDataSet.Tables("Table_Informations")
    als DataSourceverwenden und bei der

    VB.NET-Quellcode

    1. Combobox1.DisplayMember = "MA"
    verwenden um die Daten anzuzeigen?
    Es war einmal ein kleiner Bär... der wollte eine Geschichte hörn... Da erzählte ihm seine Mutti:
    Es war einmal ein kleiner Bär... der wollte eine Geschichte hörn... Da erzählte ihm seine Mutti:
    Es war einmal ein kleiner Bär... der wollte eine Geschichte hörn... Da erzählte ihm seine Mutti:
    ... Nun solltest es selber wissen. :'D

    Dieser Beitrag wurde bereits 4 mal editiert, zuletzt von „MemoAnMichSelbst“ ()

    Vielen Dank.
    Der FormatString hat funtkioniert.

    mit

    VB.NET-Quellcode

    1. DBDataDataSet.Tables("Table_Informations") als DataSource
    2. Combobox1.DisplayMember = "MA"


    hat er mir nicht die Sortierung gemacht.
    Aber mit der List (of Date) funktioniert perfekt.

    Vielen Dank an euch alle für eure Super Hilfe.

    Merci Beaucoup;-)
    DavyB
    Habe auch eine Frage zu diesem Thema. Fülle eine Combobox aus einer List of String
    Wie bekomme ich hier die Datumsortierung realisiert?

    VB.NET-Quellcode

    1. Me.ComboBox_Zieh_Ziehungsdatum.Items.Clear()
    2. If CBool(Not Gewinnspiel.Lotto.Ziehung.ZiehungsListe.Count - 1) Then
    3. With Me
    4. .ComboBox_Zieh_Ziehungsdatum.Items.Clear()
    5. .ComboBox_Zieh_Ziehungsdatum.Items.AddRange(Gewinnspiel.Lotto.Ziehung.ZiehungsListe.ToArray)
    6. .ComboBox_Zieh_Ziehungsdatum.Text = Gewinnspiel.Lotto.Ziehung.ZiehungsListe(Gewinnspiel.Lotto.Ziehung.ZiehungsListe.Count - 1)
    7. End With
    8. End If
    Gruß Markus
    Ich würd ja sagen:

    VB.NET-Quellcode

    1. Gewinnspiel.Lotto.Ziehung.ZiehungsListe.Sort
    2. Me.ComboBox_Zieh_Ziehungsdatum.DataSource = Gewinnspiel.Lotto.Ziehung.ZiehungsListe

    Ich geh mal von aus die Liste ist schon ne Liste?! Also ist .ToArray unnötig.


    So in der Art.
    Es war einmal ein kleiner Bär... der wollte eine Geschichte hörn... Da erzählte ihm seine Mutti:
    Es war einmal ein kleiner Bär... der wollte eine Geschichte hörn... Da erzählte ihm seine Mutti:
    Es war einmal ein kleiner Bär... der wollte eine Geschichte hörn... Da erzählte ihm seine Mutti:
    ... Nun solltest es selber wissen. :'D
    Funktioniert leider nicht. So erstelle ich die Liste

    VB.NET-Quellcode

    1. Public Sub Ziehungsliste_Laden()
    2. ZiehungsListe = New List(Of String)
    3. With Klassensatz
    4. .Initalisieren()
    5. .ExternCON(0) = New OleDb.OleDbConnection
    6. .ExternCMD(0) = New OleDb.OleDbCommand
    7. .ExternCON(0).ConnectionString = .BankVerbindung
    8. .ExternCMD(0).Connection = .ExternCON(0)
    9. .ExternCMD(0).CommandText = "Select FN01 from " & .Banktabelle & " where Ident_Nummer like " & .IdentNummer
    10. .ExternCON(0).Open()
    11. .ExternREADER(0) = .ExternCMD(0).ExecuteReader
    12. Do While .ExternREADER(0).Read
    13. If IsDate(.ExternREADER(0)("FN01").ToString) = True Then
    14. Me.Hilfsdatum = CDate(.ExternREADER(0)("FN01").ToString)
    15. If Me.Hilfsdatum >= Me.Startdatum Then
    16. ZiehungsListe.Add(.ExternREADER(0)("FN01").ToString)
    17. End If
    18. End If
    19. Loop
    20. .ExternCON(0).Close()
    21. End With
    22. ZiehungsListe.Sort()
    23. End Sub

    Macht es Sinn die Liste in eine List of Date zu wandeln.
    Meine Datenbank arbeitet immer auf der Grundlage von Strings.
    Möchte dieses Thema auch nicht mehr neu aufgreifen, Habe ich mit EDR eigentlich abgeschlossen.
    Gruß Markus

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Westerwälder“ ()

    Wenn du Daten verwalten willst, solltest du das auch in ner List(Of Date) tun. ;)
    Es war einmal ein kleiner Bär... der wollte eine Geschichte hörn... Da erzählte ihm seine Mutti:
    Es war einmal ein kleiner Bär... der wollte eine Geschichte hörn... Da erzählte ihm seine Mutti:
    Es war einmal ein kleiner Bär... der wollte eine Geschichte hörn... Da erzählte ihm seine Mutti:
    ... Nun solltest es selber wissen. :'D
    Sehe ich ein, weiss was du meinst.
    Irgendwo muss die Konvertierung der Daten erfolgen, da meine Datenbank halt nur Strings verwaltet. Kann und möchte ich auch nicht mehr ändern.
    Könnte man in diesem Fall nicht der Combobox ein entsprechendes Datumformat für die Sortierung übergeben?
    Gruß Markus
    Na, ich würd einfach die Liste umdeklarieren.
    Ne Combobox hat kein Problem damit, mit ner List(of Date) umzugehen, die ihr als Datasource zugeordnet wird.
    Es war einmal ein kleiner Bär... der wollte eine Geschichte hörn... Da erzählte ihm seine Mutti:
    Es war einmal ein kleiner Bär... der wollte eine Geschichte hörn... Da erzählte ihm seine Mutti:
    Es war einmal ein kleiner Bär... der wollte eine Geschichte hörn... Da erzählte ihm seine Mutti:
    ... Nun solltest es selber wissen. :'D
    Funktioniert einfach nicht. Hier die Listerstellung nun als date:

    VB.NET-Quellcode

    1. Public Sub Ziehungsliste_Laden()
    2. ZiehungsListe = New List(Of Date)
    3. With Klassensatz
    4. .Initalisieren()
    5. .ExternCON(0) = New OleDb.OleDbConnection
    6. .ExternCMD(0) = New OleDb.OleDbCommand
    7. .ExternCON(0).ConnectionString = .BankVerbindung
    8. .ExternCMD(0).Connection = .ExternCON(0)
    9. .ExternCMD(0).CommandText = "Select FN01 from " & .Banktabelle & " where Ident_Nummer like " & .IdentNummer
    10. .ExternCON(0).Open()
    11. .ExternREADER(0) = .ExternCMD(0).ExecuteReader
    12. Do While .ExternREADER(0).Read
    13. If IsDate(.ExternREADER(0)("FN01").ToString) = True Then
    14. Me.Hilfsdatum = CDate(.ExternREADER(0)("FN01").ToString)
    15. If Me.Hilfsdatum >= Me.Startdatum Then
    16. ZiehungsListe.Add(CDate(.ExternREADER(0)("FN01").ToString))
    17. End If
    18. End If
    19. Loop
    20. .ExternCON(0).Close()
    21. End With
    22. ZiehungsListe.Sort()
    23. End Sub


    und hier die ausgabe in der combobox

    VB.NET-Quellcode

    1. Me.ComboBox_Zieh_Ziehungsdatum.Items.Clear()
    2. If CBool(Not Gewinnspiel.Lotto.Ziehung.ZiehungsListe.Count - 1) Then
    3. With Me
    4. .ComboBox_Zieh_Ziehungsdatum.DataSource = Gewinnspiel.Lotto.Ziehung.ZiehungsListe
    5. End With
    6. End If
    Gruß Markus

    davyb schrieb:

    VB.NET-Quellcode

    1. DataTableBindingSource.Sort = "MonatJahr" 'Sortieren von Daten
    2. cboxMonatJahr.DataSource = frmTimeTool.DBDataDataSet.Tables("Table_Informations")
    3. cboxMonatJahr.DisplayMember = "MonatJahr"


    Leider wird diese nicht sortiert wie ich möchte,
    naja, wenn du bei DataTableBindingSource eine Sortierung festlegst, dann aber an frmTimeTool.DBDataDataSet.Tables("Table_Informations") bindest - was soll da schon sortiertes bei rauskommen?
    Binde an die sortierte Bindingsource, dann ist auch sortiert.