Listview Zeilenumbruch

  • VB.NET

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

    Listview Zeilenumbruch

    Hallo Leute,

    im Vorfeld möchte ich betonen, dass ich absoluter VB.Net Anfänger bin.

    Ich habe eine Datenbankabfrage in ein Listview Element geladen und würde gerne bei der Spalte "bezeichnung" sobald der Inhalt an das Spaltenende gerät, einen Zeilenumbruch erreichen. Wie kann ich das am einfachsten erreichen? Einen kleinen Codeauszug hängt dem Thread bei.

    Bin über jede Hilfe sehr dankbar!

    Lg, Zigras

    EDIT: Das übergroße Bild habe ich gelöscht. Code gehört in Code-Tags. Das erleichtert es den Nutzern dir zu helfen unvermeidet unnötigen Trafic. ~fufu

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

    zigras schrieb:

    dass ich absoluter VB.Net Anfänger bin
    Also das erste - hat garnix mit deim Problem zu tun - wäre: Visual Studio - Empfohlene Einstellungen
    Ist unumgänglich, wenn du mit Vb.Net weiter machen willst.

    Als nächstes würde ich raten: lass erstmal die Finger von Datenbanken. Vb.Net ganz fantastische Konzepte zur Unterstützung von Datenbank-Anwendungen - aber wenn man falsch anfängt - so wie du - dann kommt man nie Leben drauf, wie's wirklich geht.

    Aber wie gesagt: Vordringlich ist erstmal Visual Studio - Empfohlene Einstellungen - ohne das ist Vb.Net überhaupt keine ernstzunehmende Programmiersprache.
    Auch wenn es dir bei deiner Frage nicht weiter hilft:
    Lagere Datenbank Zugriffe in eine separate Klasse aus. Die haben in der GUI nix zu suchen -> Oder allgemeiner: Trenne Business Logik von der GUI ;)
    "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
    Sry das ich erst jetzt antworte und das ich das Bild angehängt hatte(habe auf dem Rechner kein Internetzugriff).

    Danke für die Hilfestellungen, allerdings brauche ich das wie beschrieben in einem Listview Element und mit dem Link zu "Mehrzeilige Listeneinträge mit Listbox/Listview" werde ich nicht schlau. Kenne mich da leider noch nicht gut genug aus.

    Eure Tipps neben dem Thema werde ich mir natürlich für die Zukunft zu Herzen nehmen, danke auch dafür!
    Zum Posten von Bildern oder Code mag das hier helfen: Ansonsten verläuft (für mich jdfs.) deine Frage grad im Sande.
    ListView ist sehr schlecht geeignet für Datenverarbeitung, und bevor du nicht Visual Studio - Empfohlene Einstellungen umgesetzt hast, braucht man eh nicht weiter zu diskutieren.
    Aber auch dann wirds mühsam, weil dein Anliegen ist (mit Databinding) eiglich ein trivialer Standardfall, nur muss man um es zu lösen einen Minimum-State-Of-Art kennen.
    Und bis dahin ist für dich vmtl. noch ein gut Stück Weg.

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

    Ja das stimmt, davon habe ich keinen plan.

    Wäre es vllt. möglich, das ganze erst beim Drucken geschehen zu lassen? Ich habe einen Code zum drucken aus dem Internet kopiert, den ich leider noch nicht so ganz verstehe:

    VB.NET-Quellcode

    1. con.Open()
    2. reader = cmd.ExecuteReader()
    3. Dim i As Integer = 0
    4. Do While reader.Read() And i <= 19
    5. With lvListe.Items
    6. Dim item As ListViewItem
    7. item = .Add(reader("id"))
    8. item.SubItems.Add(reader("werkzeugnr"))
    9. item.SubItems.Add(reader("kundenkuerzel"))
    10. item.SubItems.Add(reader("bezeichnung"))
    11. item.SubItems.Add(reader("dverbrauchpt"))
    12. item.SubItems.Add(reader("lagerortid"))
    13. i += 1
    14. End With
    15. Loop
    16. lvListe.GridLines = True
    17. reader.Close()
    18. con.Close()
    19. PrintDocument1.DefaultPageSettings.Landscape = True
    20. End Sub
    21. Private Sub cmdDrucken_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmdDrucken.Click
    22. Dim PrintPreview As New PrintPreviewDialog
    23. PrintPreview.Document = PrintDocument1
    24. PrintPreview.ShowDialog()
    25. End Sub
    26. Private Sub PrintDocument1_PrintPage(ByVal sender As Object, ByVal e As System.Drawing.Printing.PrintPageEventArgs) Handles PrintDocument1.PrintPage
    27. If lvListe.View = View.Details Then
    28. PrintDetails(e)
    29. End If
    30. End Sub
    31. Private Sub PrintDetails(ByRef e As System.Drawing.Printing.PrintPageEventArgs)
    32. Static LastIndex As Integer = 0
    33. Static CurrentPage As Integer = 0
    34. Dim DpiGraphics As Graphics = Me.CreateGraphics
    35. Dim DpiX As Integer = DpiGraphics.DpiX
    36. Dim DpiY As Integer = DpiGraphics.DpiY
    37. DpiGraphics.Dispose()
    38. Dim X, Y As Integer
    39. Dim ImageWidth As Integer
    40. Dim TextRect As Rectangle = Rectangle.Empty
    41. Dim TextLeftPad As Single = CSng(0 * (DpiX / 1))
    42. Dim ColumnHeaderHeight As Single = CSng(lvListe.Font.Height + (0 * (DpiX / 1)))
    43. Dim StringFormat As New StringFormat
    44. Dim PageNumberWidth As Single = e.Graphics.MeasureString(CStr(CurrentPage), lvListe.Font).Width
    45. StringFormat.FormatFlags = StringFormatFlags.NoWrap
    46. StringFormat.Trimming = StringTrimming.EllipsisCharacter
    47. StringFormat.LineAlignment = StringAlignment.Near
    48. CurrentPage += 1
    49. X = CInt(e.MarginBounds.X)
    50. Y = CInt(e.MarginBounds.Y)
    51. For ColumnIndex As Integer = 0 To lvListe.Columns.Count - 1
    52. TextRect.X = X
    53. TextRect.Y = Y
    54. TextRect.Width = lvListe.Columns(ColumnIndex).Width
    55. TextRect.Height = ColumnHeaderHeight
    56. e.Graphics.FillRectangle(Brushes.LightGray, TextRect)
    57. e.Graphics.DrawRectangle(Pens.DarkGray, TextRect)
    58. TextRect.X += TextLeftPad
    59. TextRect.Width -= TextLeftPad
    60. e.Graphics.DrawString(lvListe.Columns(ColumnIndex).Text, lvListe.Font, Brushes.Black, TextRect, StringFormat)
    61. X += TextRect.Width + TextLeftPad
    62. Next
    63. Y += ColumnHeaderHeight
    64. For i = LastIndex To lvListe.Items.Count - 1
    65. With lvListe.Items(i)
    66. X = CInt(e.MarginBounds.X)
    67. If Y + .Bounds.Height > e.MarginBounds.Bottom Then
    68. LastIndex = i - 1
    69. e.HasMorePages = True
    70. StringFormat.Dispose()
    71. e.Graphics.DrawString(CStr(CurrentPage), lvListe.Font, Brushes.Black, (e.PageBounds.Width - PageNumberWidth) / 2, e.PageBounds.Bottom - lvListe.Font.Height * 2)
    72. Exit Sub
    73. End If
    74. ImageWidth = 0
    75. If lvListe.SmallImageList IsNot Nothing Then
    76. If Not String.IsNullOrEmpty(.ImageKey) Then
    77. e.Graphics.DrawImage(lvListe.SmallImageList.Images(.ImageKey), X, Y)
    78. ElseIf .ImageIndex >= 0 Then
    79. e.Graphics.DrawImage(lvListe.SmallImageList.Images(.ImageIndex), X, Y)
    80. End If
    81. ImageWidth = lvListe.SmallImageList.ImageSize.Width
    82. End If
    83. For ColumnIndex As Integer = 0 To lvListe.Columns.Count - 1
    84. TextRect.X = X
    85. TextRect.Y = Y
    86. TextRect.Width = lvListe.Columns(ColumnIndex).Width
    87. TextRect.Height = .Bounds.Height
    88. If lvListe.GridLines Then
    89. e.Graphics.DrawRectangle(Pens.DarkGray, TextRect)
    90. End If
    91. If ColumnIndex = 0 Then TextRect.X += ImageWidth
    92. TextRect.X += TextLeftPad
    93. TextRect.Width -= TextLeftPad
    94. If ColumnIndex < .SubItems.Count Then
    95. e.Graphics.DrawString(.SubItems(ColumnIndex).Text, lvListe.Font, Brushes.Black, TextRect, StringFormat)
    96. End If
    97. X += TextRect.Width + TextLeftPad
    98. Next
    99. Y += .Bounds.Height
    100. End With
    101. Next
    102. e.Graphics.DrawString(CStr(CurrentPage), lvListe.Font, Brushes.Black, (e.PageBounds.Width - PageNumberWidth) / 2, e.PageBounds.Bottom - lvListe.Font.Height * 2)
    103. StringFormat.Dispose()
    104. LastIndex = 0
    105. CurrentPage = 0
    106. End Sub
    107. End Class


    Habt ihr vllt. auch einen einfachere Lösung zum drucken? Muss nicht so detailliert sein(mehrere Seiten, Zoom, Seitenauswahl). Soll nur im Querformat sein und eine Preview wäre zudem noch schön.

    Hab keine gute Anleitung im Internet gefunden, nur ellenlange Codes die irgendwie nicht funktioniert haben.