Tabelle erstellen & auto. sortieren

  • VB.NET
  • .NET 5–6

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

    Tabelle erstellen & auto. sortieren

    Hallo,
    klingt eventuell blöd aber ich habe mir im DataGridView1 3 Spalten gemacht.

    Name, Rang, Abzeichen (als Beispiel)

    Der Inhalt in den Rows wird bei Form.load definiert und steht dann zB so drinnen:

    Test2, 1, Bilddatei.png
    Test1, 3, Bilddatei.png
    Test3, 2, Bilddatei.png

    Ich möchte nun das alles nach Rang sortiert wird absteigend, ich bin da am struggeln wie ich das hinbekommen kann, kann wer helfen? Vielen Dank :)
    Moderatorenanmerkung: bitte Threadtitel konkretisieren erledigt

    .NET 5 - behalte ich mal im Hinterkopf.
    Wenn die Daten vom richtigen Datentyp sind, also Spalte 1 = String und Spalte 2 = Integer, braucht man gar nix weiter im Code zu machen. Einfach den Spaltenkopf anklicken, um es entsprechend zu sortieren.
    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“ ()

    Ich hab die Spalten nicht wirklich definiert, ich hab die Tabelle einfach rechtsklick gemacht und Spalten so eingefügt.

    Die Rows sollen dann über abrufe vom FTP entstehen das bekomme ich hin. Aber ich möchte das bei form.load eine gewisse Spalte gleich direkt automatisch sortiert wird. Das möchte ich haben.
    Ok, dann schreibst du vermutlich Werte direkt in DataGridViewCells

    Stattdessen setze dich lieber mit dem DataSet auseinander. Da schreibst du die Werte rein, über ein BindingSource wird dann automatisch alles ans DataGridView vermittelt.

    Das DataGridView hat auch ein Sort Methode, da kannst du ja auch mal mit rumprobieren. Ich habe die nie benutzt.
    Auf der anderen Seite, wenn es nur im Load passieren soll, warum schreibst du die Werte nicht direkt in der richtigen Reihenfolge da rein?
    Vollzitat eines Vorposts an dieser Stelle entfernt ~VaporiZed

    Ich habe das ganze jetzt mit Listview geregelt:

    Abruf FTP: (Gedownloadet wird eine Zahl aus dem Internet)
    Dim TEST1 As Integer = web.DownloadString("ftp://xxxxxxx/www/.Test1/rang.txt")
    Dim TEST2 As Integer = web.DownloadString("ftp://xxxxxxxxx/www/.Test2/rang.txt")
    Dim TEST3 As Integer = web.DownloadString("ftp://xxxxxxxxx/www/.Test3/rang.txt")

    Me.ListView1.Items.Clear()
    Me.ListView1.Items.Add(TEST1).SubItems.Add("Name1") 'use SubItems
    Me.ListView1.Items.Add(TEST2).SubItems.Add("Name2") 'use SubItems
    Me.ListView1.Items.Add(TEST3).SubItems.Add("Name3") 'use SubItems
    ListView1.Sorting = SortOrder.Descending

    Kann ich irgendwie das noch so einstellen das ich auch ein Bild anzeigen und anzeigen lassen kann? Bzw. Platz 1, 2 und 3?

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

    Dafür ist das DGV geeignet, denn da kann man einstellen, dass eine Spalte Bilder enthalten soll. DataGridViewImageColumn.
    Aber wenn Du mich schon voll zitierst inkl. der Moderatorenanmerkung, dann setz das doch bitte auch um. Wir Moderatoren haben Weisungsrecht, wenn Du Dich an die Boardregeln erinnerst ;)
    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.
    Vollzitat des direkten Vorposts an dieser Stelle entfernt ~VaporiZed

    Hey ich hoffe der Themenname passt jetzt.
    Das Thema ist aber ich habe das mit der DGV nicht hinbekommen, cool wäre es natürlich schon wenn ich da eine kleine Grafik mitanzeigen lassen kann im Vergleich zur Listview gesehen.
    Bei der Listview habe ich das mal so weit hinbekommen das ich zufrieden wäre aber halt ohne einem Bild, bei der DGV habe ich viel gegoogelt aber nichts gefunden was mir hilft.

    Und das passt gerade nicht zum Thema aber kann ich irgendwie simple ohne Today und TimeOfDay von einem Zeitserver in zwei verschiedenen Labels einmal Datum und einmal Uhrzeit anzeigen lassen im deutschen Format? Ich habe einen Code für das gefunden allerdings spuckt mir der irgendwie so etwas aus

    11 OCT 2023 08:48 oder irgendwie so, in einer Schlange. Ich möchte das ein Nutzer nicht seine Systemuhrzeit ändern quasi und die Uhrzeit in der Software gleich mit. Um das gehts. (Lizenzgeschichte)

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

    Was deine Datenanzeige angeht, weißt du was ein DataSet ist?

    Mit Today kriegst du nicht mehr als die Systemuhrzeit. Wenn du mit Nutzungszeit Lizenzen ausführen willst, dann muss man trickreicher werden.
    Mit Schlangen und Datumsformaten kann ich nicht ganz folgen, vielleicht kannst du ein Vorher/Nachher-Bild machen?
    Ich vermute du kämpfst nur mit dem Format?

    VB.NET-Quellcode

    1. Dim datum = Date.Now
    2. Label1.Text = $"{datum:dd.MM.yyyy HH:mm:ss}"

    Bilder
    • DS1.png

      16,57 kB, 700×306, 43 mal angesehen
    • DS2.png

      11,11 kB, 434×270, 43 mal angesehen
    Titel ist ok. Jetzt werd ich erstmal Deine Vollzitate entsorgen, da unnötig, v.a., wenn es der komplette Vorpost ist.

    Das DGV kann sehr viel, auch das mit Datum und Uhrzeit getrennt. Beispiel folgt in ca. 30 Minuten, also nachher ggf. nochmal auf diesen Post hier schauen.

    Mikebazz schrieb:

    bei der DGV habe ich viel gegoogelt aber nichts gefunden was mir hilft.
    Naja, falsch oder zu unkonkret gesucht, würd ich sagen.

    Mikebazz schrieb:

    Ich möchte das ein Nutzer nicht seine Systemuhrzeit ändern quasi und die Uhrzeit in der Software gleich mit.
    ?( Soll er jetzt irgendwas können oder eben nicht können?

    ##########

    @Mikebazz
    Testprojekt anbei. DataBinding ist ne feine Sache, man muss aber das Sortieren selbst übernehmen. Will heißen: In Form1 kann man im DGV die Spaltenköpfe anklicken, in Form2 muss man das Sortieren selbst im Code implementieren. Aber nach dem Datenladen einfach die DataPacks nach Wunsch sortieren, fertig. Ist dank LINQ etc. ein Einzeiler. Spaltenköpfe anklicken ist nicht mehr einzeilig, sondern wohl eher ein Dreizeiler.
    Dateien
    • DgvTest.zip

      (95,1 kB, 103 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.

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

    Mikebazz schrieb:

    Ich möchte das ein Nutzer nicht seine Systemuhrzeit ändern quasi und die Uhrzeit in der Software gleich mit.
    Da wird es tricky.
    Speichere die letzte Nutzungszeit (Beenden des Programms) und vergleiche diese Zeit mit der neuen Startzeit. Liegt die Startzeit vor der letzten Ende-Zeit, wurde manipuliert.
    Allerdings holen praktisch alle Rechner, die am www hängen, ihre Systemzeit von einem Time-Server, so dass das Zeit-Speicher-Management nur bei Insel-Rechnern ohne Internet-Zugriff wirkt.
    Und:
    Ist Dein Programm so wertvoll, dass Du solch einen Aufwand treiben musst?
    ====
    Wir hatten mal einen Kunden, der wollte die letzte Rate nicht zahlen, der wurde dann aber von der befristeten Lizenz dazu "überredet". ;)
    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!
    Vollzitat eines Vorposts an dieser Stelle entfernt ~VaporiZed

    Für das Zeitthema habe ich aktuell folgendes:

    Quellcode

    1. Dim tcpc As New TcpClient()
    2. Dim read(10) As Byte
    3. Dim Server As String = "time.ien.it"
    4. Try
    5. Dns.GetHostEntry(Server)
    6. Catch ex As Exception
    7. MsgBox(ex.Message)
    8. Exit Sub
    9. End Try
    10. tcpc.Connect(Server, 13)
    11. Dim s As Stream
    12. Try
    13. s = tcpc.GetStream()
    14. Catch ex As InvalidOperationException
    15. MsgBox(ex.Message)
    16. Exit Sub
    17. End Try
    18. Dim bytes As Integer = s.Read(read, 0, read.Length)
    19. Dim Zeit As String = Encoding.ASCII.GetString(read)
    20. Label61.Text = $"{Zeit:dd.MM.yyyy}"
    21. tcpc.Close()


    Rauskommen bei Label61 tut: 11 OCT (davon abgesehen dass das nicht das ist was ich haben möchte, ist es auch englisch anstatt deutsch)

    Quasi Label61 soll nur das Datum anzeigen und bei Label62 die Uhrzeit. So hätte ich das gerne

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

    Zeit muss auch vom Typ DateTime sein, sonst klappt das nicht.

    VB.NET-Quellcode

    1. Dim Zeit = DateTime.Parse(Encoding.ASCII.GetString(read))
    2. Label61.Text = $"{Zeit:dd.MM.yyyy}"
    3. Label62.Text = $"{Zeit:HH:mm:ss}"


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

    Der komplette Teil sieht jetzt so aus:

    Quellcode

    1. Dim tcpc As New TcpClient()
    2. Dim read(18) As Byte
    3. Dim Server As String = "time.ien.it"
    4. Try
    5. Dns.GetHostEntry(Server)
    6. Catch ex As Exception
    7. MsgBox(ex.Message)
    8. Exit Sub
    9. End Try
    10. tcpc.Connect(Server, 13)
    11. Dim s As Stream
    12. Try
    13. s = tcpc.GetStream()
    14. Catch ex As InvalidOperationException
    15. MsgBox(ex.Message)
    16. Exit Sub
    17. End Try
    18. Dim bytes As Integer = s.Read(read, 0, read.Length)
    19. Dim Zeit = DateTime.Parse(Encoding.ASCII.GetString(read))
    20. Label61.Text = $"{Zeit:dd.MM.yyyy}"
    21. tcpc.Close()


    Aber trotzdem ist die Ausgabe: 11 OCT, da tut sich aktuell nichts :l
    Habe dort hingeklickt in die Zeile und Haltepunkt hinzugefügt aber ich sehe das gar nicht so wie du, ich bin jetzt auch nicht so erfahren muss ich sagen, mach das nur als Hobby.
    Aber ich kann dir sonst auch kurz Teamviewer oder so anbieten. Aber in labael61 schreibt er mir immer nur 11 OCT rein mehr nicht leider, obwhol ich deinen Code übernommen habe.
    Wenn du mit dem Mauszeiger über Zeit hoverst, dann wird er dir anzeigen was da drinsteckt.
    Bei mir habe ich aus dem Lokal-Fenster die Werte nur im Bild dazu montiert damit man beides auf einen Blick sieht.

    Bedienung von Visual Studio haben wir hier auch.

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

    Interessant ist aber das ich den Fehler im anderen Projekt nicht erhalten habe, habe dann Testweise eben ein neues gemacht da kam das direkt.

    Achja ich hab leider nur die Möglichkeit von dem Server das zu beziehen, deswegen war das mit dem Substring eine gute Lösung.

    Anbei ein neuer Screen, das hat nun die Lösung gebracht, danke dir, ich küss dein Herz.

    EDIT:
    Im Anderen Projekt mit gleichen Code steht der aber wieder auf 11 OCT jetzt, das check ich absolut nicht.
    Bilder
    • Capture.JPG

      51,25 kB, 1.256×461, 43 mal angesehen

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