Datatable: Neue Spalte aus mehreren bestehenden mit Zeilenumbruch

  • VB.NET
  • .NET (FX) 4.5–4.8

Es gibt 9 Antworten in diesem Thema. Der letzte Beitrag () ist von Kasi.

    Datatable: Neue Spalte aus mehreren bestehenden mit Zeilenumbruch

    Hallo,
    ich möchte in einer Datatable zur Laufzeit eine neue Spalte anlegen, welche bestehende Spalten zusammen fasst. Das klappt auch soweit:

    VB.NET-Quellcode

    1. Dim strAnzeige As String = ""
    2. strAnzeige = "[Arbeitsplatz] + ' (' + [ArbeitsplatzLang] + ')'+ ' ' + [Zeitpunkt1] + '-' + [Zeitpunkt2] + ' ' + [Kostenstelle1]"
    3. Me.DbLeiKaDataSet.tblLvSteckbrief.Columns.Add("SteckbriefAnzeige", GetType(String), strAnzeige)

    Nun würde ich hier allerdings gerne mit Zeilenumbrüchen arbeiten und die Datumsfelder ohne Uhrzeit anzeigen. \n funktioniert an der Stelle nicht (oder ich verwende es falsch?) und Environment.Newline macht natürlich keinen Sinn.

    Mit dem Code oben würde die Ausgabe so aussehen:
    123_Arbeitsplatz (Bahnhof) 01.01.2020 00:00:00 - 31.12.2020 00:00:00 Kostenstelle_ABC


    Aussehen soll es aber so:
    123_Arbeitsplatz (Bahnhof)
    01.01.2020 - 31.12.2020
    Kostenstelle_ABC


    Gruß, André

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

    @AndPod Was passiert, wenn Du an den entsprechenden Stellen ein Environment.Newline einfügst?
    Und:
    String-Verknüpfung in VB erfolgt mit einem &.
    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
    Ich verknüpfe hier nicht mehrere Strings sondern füge einer bestehenden Datatable eine "Berechnete" Spalte hinzu. Und da verknüpft man die einzelnen Spalten mit einem Plus (ich werde mal die Eckigen Klammern ergänzen, welche im Code optional sind wenn man im Spaltenname keine Leerzeichen verwendet).
    ​Environment.Newline würde zwar einen Zeilenumbruch im String erzeugen, allerdings nicht in den Ausgegebenen Datensätzen der Datatable.
    @AndPod Falls Du die Daten in einem DataGridView anzeigst, probierma

    VB.NET-Quellcode

    1. DataGridView1.Columns[0].DefaultCellStyle.WrapMode = DataGridViewTriState.True
    2. ' bzw.
    3. DataGridView1.DefaultCellStyle.WrapMode = DataGridViewTriState.True
    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
    Die Daten werden letztendlich in einem Datagridview angezeigt, das ist richtig. Da bringt mir allerdings der Zeilenumbruch des DGV nur bedingt was, da ich nicht wirklich steuern kann nach welchem Bereich er erfolgen kann. Und die ausgegebenen Texte haben keine feste Länge (bis auf das Datum).
    Ich kann auch in der Datenbank eine Abfrage erstellen die mir das wie gewünscht dar stellt. Allerdings habe ich in der Anwendung schon dermaßen viele Tabellen und Abfragen, das ich versuchen möchte soviel wie möglich innerhalb der Anwendung zu lösen.
    @AndPod Hast Du sowohl Environment.Newline als auch WrapMode in einem gemeinsamen Lauf getestet?
    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!
    versuch mal

    VB.NET-Quellcode

    1. strAnzeige = "[Arbeitsplatz] + CHAR(13) + ' (' + [ArbeitsplatzLang] + ')'+ ' ' + [Zeitpunkt1] + '-' + [Zeitpunkt2] + ' ' + [Kostenstelle1]"


    CodeTags gesetzt ~VaporiZed

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

    habe multiline bisher nicht gebraucht, hier ein Ansatz

    VB.NET-Quellcode

    1. Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
    2. With DataGridView1
    3. .Columns.Add("Sp1", "SP1")
    4. Dim i As Integer = .Columns.Add("Sp2", "SP2")
    5. .Columns(i).DefaultCellStyle.WrapMode = DataGridViewTriState.True
    6. .Columns(i).DefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleLeft
    7. .Rows.Add(8)
    8. End With
    9. End Sub
    10. Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
    11. With DataGridView1
    12. .Rows(5).Cells(1).Value = "Heute ist Monntag 16.11.2020, sieht nach Regen aus"
    13. Dim Gr As Graphics = Me.CreateGraphics()
    14. '.Rows(5).Height = Gr.MeasureString("X", .Font).Height * 2 + 2 ' 2 zeilen
    15. .Rows(5).Height = Gr.MeasureString("x", .Font).Height * 3 + 2 ' 3 zeilen
    16. End With
    17. End Sub