String nach Double mit Punkt Trennzeichen

  • C#
  • .NET 4.5

Es gibt 33 Antworten in diesem Thema. Der letzte Beitrag () ist von Amro.

    @Amro Formatiere den String mit englischer Kultur:
    docs.microsoft.com/de-de/dotne…tem_String_System_Object_
    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!
    Hallo Rod,
    meinst du sowas:

    VB.NET-Quellcode

    1. doubleList(1) = Decimal.Parse(stringList(1), CultureInfo.GetCultureInfo("en-US"))

    funktioniert leider auch nicht.

    Mit Breakpoint wird es in der doubleList richtig angezeigt aber das Grid macht da wieder ein Komme drauß.
    Übergebe ich es als String an die Grid, passt es wieder mit den Punkt als Trenner.
    Dafür stimmt aber wieder die Sortierung nicht mehr, da hier dann nach String sortiert wird :cursing: .

    Amro schrieb:

    meinst du sowas:
    Nein.
    Ich meinte so was:

    VB.NET-Quellcode

    1. Dim myText = myValue.ToString("0.000", CultureInfo.GetCultureInfo("en-US"))
    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!
    @RodFromGermany
    Dann hab ich wieder ein String in der DataGridView.

    Zu mein Vorhaben:
    Ich will eine Stückliste erstellen diese kann wiederum Unterstücklisten enthalten.
    Beispiel-Struktur:
    1
    2
    2.1
    2.2
    10
    11
    Ich will aber später in der Grid Sortieren können deshalb muss der Wert irgendwie Numerisch sein!
    Die DataGridView spielt da nicht mit, weil sie den Punkt durch ein Komma ersetzt.
    Hab eine datatable gebunden da ist der Punkt noch drin.
    Auch in eine Liste bleibt der Punkt noch drin aber sobald die Grid ins spiel kommt, ist es ein Komma.
    Punkt muss aber sein, weil es in Stücklisten so gehandhabt wird.
    Als String sieht die Sortierung so aus:
    1
    10
    11
    2.1
    2.2
    Das darf nicht sein.

    CulterInfo und StringFormat bringt da nicht viel.
    Vielleicht geht das mit einer eigenen Sortierung oder sowas.
    Bin für jede Lösung offen :) .
    Bau eine „Unsichtbare“ Spalte mit fortlaufendender Nummerierung ein, nach der dann sortiert wird.
    "Gib einem Mann einen Fisch und du ernährst ihn für einen Tag. Lehre einen Mann zu fischen und du ernährst ihn für sein Leben."

    Wie debugge ich richtig? => Debuggen, Fehler finden und beseitigen
    Wie man VisualStudio nutzt? => VisualStudio richtig nutzen

    mrMo schrieb:

    Bau eine „Unsichtbare“ Spalte mit fortlaufendender Nummerierung ein, nach der dann sortiert wird.

    Ja das hab ich auch so gelöst.
    Mir fehlt nur noch das Event mit den ich die Unsichtbare-Spalte Sortieren lasse wenn zBsp. Spalte(2) Sortiert wird.

    Ich dachte es gibt eine bessere Lösung vielleicht.

    @Dksksm
    Doch , aber das hat leider auch nicht geholfen.
    Auch das ändern der Spalten.CulturInfo brachte nix.
    Mit Thread.Culturinfo probiert , bringt auch nix.
    Was bedeutet diese Aussage?

    Amro schrieb:


    Mir fehlt nur noch das Event mit den ich die Unsichtbare-Spalte Sortieren lasse
    "Gib einem Mann einen Fisch und du ernährst ihn für einen Tag. Lehre einen Mann zu fischen und du ernährst ihn für sein Leben."

    Wie debugge ich richtig? => Debuggen, Fehler finden und beseitigen
    Wie man VisualStudio nutzt? => VisualStudio richtig nutzen
    @mrMo
    Ich meine das so:
    Wie kann ich nach der unsichtbaren Spalte Sortieren, wenn ich den Header einer anderen Spalte klicke.
    Sowohl Aufsteigend als absteigend.
    Da arbeite ich noch dran (ColumnHeaderMouseClick).
    Aber wie gesagt, so würde ich es echt nur machen, wenn es wirklich nicht anders geht.

    Amro schrieb:

    Wie kann ich nach der unsichtbaren Spalte Sortieren, wenn ich den Header einer anderen Spalte klicke.
    Dann musst Du einen eigenen DataGridView-Sorter bauen.
    docs.microsoft.com/de-de/dotne…t?view=windowsdesktop-5.0
    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!
    Im moment ist das so gelöst.
    Spoiler anzeigen

    C#-Quellcode

    1. ListSortDirection direction = ListSortDirection.Ascending;
    2. private void dataGridView_ColumnHeaderMouseClick(object sender, DataGridViewCellMouseEventArgs e)
    3. {
    4. if (dataGridView.Columns["Col2"].Index == e.ColumnIndex)
    5. {
    6. if( direction == ListSortDirection.Ascending)
    7. {
    8. direction = ListSortDirection.Descending;
    9. }
    10. else
    11. {
    12. direction = ListSortDirection.Ascending;
    13. }
    14. dataGridView.Sort(dataGridView.Columns["Col5"],direction);
    15. }
    16. }


    Es muss doch auch anders gehen , ist wieder alles nur rundherum gebaut!

    Amro schrieb:

    Mir gehts aber nicht nur um die darstellung also Punkt oder Komma.
    Kannst Du das mal etwas näher ausführen?
    Was für Daten, was für eine Spalte, wie formatiert, ...?
    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!

    Amro schrieb:


    Mir gehts aber nicht nur um die darstellung also Punkt oder Komma.
    Das DGV muss auch richtig Sortieren.


    Das Sortieren von den Werten darfst du gerne selbst impelmentieren, ist so schwer nun wirklich nicht. Auch dazu gibts reihenweise Googletreffer, inkl. Beispiele von MS Docs.
    Da bei mir die Werte vom Datentyp Decimal sind und nicht Text, ist eine Hilfsspalte also nicht notwendig.
    Wie konkret du das am Ende umsetzt ist dein Bier.

    Dksksm schrieb:

    Da bei mir die Werte vom Datentyp Decimal sind und nicht Text,

    Das ist genau das Problem, ich bekomme die Werte als String und muss sie entweder in double oder
    decimal konvertieren.
    Dann ist es noch eine DataTable die an die Grid gebunden wird oder in eine Foreach schleife in die Grid
    eingefügt wird. Somit bekommt die Grid auch eine Sortierung.
    Ich häng mal ein kleines Beispiel an mit meinen Daten wie sie mir vorliegen.
    Du meinst Spalte Position muss jetzt richtig Sortieren ohne Hilfsspalte und CultureInfo?
    Dateien
    • TestStrDbl.zip

      (16,67 kB, 2 mal heruntergeladen, zuletzt: )

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

    @Amro Die SLN-Datei gehört zum Projekt, obj- und bin-Verzeichnis gehören NICHT in die ZIP-Datei.
    ====
    Was muss ich tun, um Deinen Effekt zu reproduzieren??
    Was passiert?
    Was soll passieren?
    ========
    Den Strings ist es egal, was da für eine Kultur ist, solange Du lateinische Schriftzeichen verwendest.

    C#-Quellcode

    1. private void LoadStückListe()
    2. {
    3. DTStückListe = new DataTable();
    4. DTStückListe.Columns.Add("Bezeichnung", typeof(string));
    5. DTStückListe.Columns.Add("Position", typeof(decimal));
    6. DTStückListe.Columns.Add("Menge", typeof(int));
    7. DTStückListe.Rows.Add("BG1", 1, 5);
    8. DTStückListe.Rows.Add("Schraube", 1.1, 20);
    9. DTStückListe.Rows.Add("UScheibe", 1.2, 20);
    10. DTStückListe.Rows.Add("BG2", 2, 1);
    11. DTStückListe.Rows.Add("BG3", 10, 2);
    12. DTStückListe.Rows.Add("BG3", 20, 3);
    13. DTStückListe.Rows.Add("BG4", 3, 8);
    14. DTStückListe.Rows.Add("BG5", 2.5, 1);
    15. DGV.DataSource = DTStückListe;
    16. button2.Enabled = true;
    17. }
    Sieh Dir mal das CellFormatting-Event an, hier ein NICHT DEIN-Beispiel:

    C#-Quellcode

    1. private void dataGridView1_CellFormatting(object sender, DataGridViewCellFormattingEventArgs e)
    2. {
    3. if (e.Value == null)
    4. {
    5. return;
    6. }
    7. if (e.ColumnIndex != 6) // FPS
    8. {
    9. return;
    10. }
    11. double fps = (double)e.Value;
    12. if (fps > 40)
    13. {
    14. DataGridViewCellStyle style = e.CellStyle;
    15. style.ForeColor = Color.Red;
    16. style.Font = new Font(style.Font, style.Font.Style | FontStyle.Bold);
    17. e.CellStyle = style;
    18. }
    19. }
    ########################################
    Benenne diesen Deinen Thread nach CSHARP um!
    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!

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