Datagridview Cellpainting Datagridview

  • VB.NET

Es gibt 6 Antworten in diesem Thema. Der letzte Beitrag () ist von menorca.

    Datagridview Cellpainting Datagridview

    Hallo zusammen,

    habe in eine Datagridview mit der Cellpaiting Methode eine Progressbar gezeichnet

    warum wird die links, bzw. kann man die wie nach ganz rechts bekommen

    meine Werte stehen in Spalte 6 (im Bild zu sehen) die Progressbar soll nach der ABC Spalte

    wer kann mir helfen?

    Quellcode

    1. ':::::Private Sub dgvABC_CellPainting(ByVal sender As Object, ByVal e As DataGridViewCellPaintingEventArgs) Handles dgvABC.CellPainting
    2. If e.ColumnIndex <> 0 OrElse e.RowIndex < 0 Then ReturnDim mask = DataGridViewPaintParts.All Xor DataGridViewPaintParts.ContentBackground _
    3. Or DataGridViewPaintParts.ContentForeground Or DataGridViewPaintParts.SelectionBackgrounde.Paint(e.CellBounds, e.PaintParts And mask)
    4. e.Handled = TrueDim rct = e.CellBounds
    5. rct.Inflate(-3, -3)rct.Width = rct.Width * CInt(dgvABC(6, e.RowIndex).Value) \ 100
    6. e.Graphics.FillRectangle(Brushes.SteelBlue, rct)End Sub
    Bilder
    • Progi.JPG

      34,53 kB, 829×210, 297 mal angesehen
    So vielleicht

    Quellcode

    1. Private Sub dgvABC_CellPainting(ByVal sender As Object, ByVal e As DataGridViewCellPaintingEventArgs) _
    2. Handles dgvABC.CellPainting
    3. If e.ColumnIndex <> 0 OrElse e.RowIndex < 0 Then Return
    4. Dim mask = DataGridViewPaintParts.All Xor DataGridViewPaintParts.ContentBackground _
    5. Or DataGridViewPaintParts.ContentForeground Or DataGridViewPaintParts.SelectionBackground
    6. e.Paint(e.CellBounds, e.PaintParts And mask)
    7. e.Handled = True
    8. Dim rct = e.CellBounds
    9. rct.Inflate(-3, -3)
    10. rct.Width = rct.Width * CInt(dgvABC(6, e.RowIndex).Value) \ 100
    11. e.Graphics.FillRectangle(Brushes.SteelBlue, rct)
    12. End Sub

    Mach mal ein separates neues Projekt, das Deinen Effekt reproduziert.
    • Wieviele und was für Spalten müssen vorhanden sein?
    • Wieviel Zeilen müssen vorhanden sein?
    • Welchen Inhalt müssen die Zellen haben?
    • Was passiert bzw. was passiert nicht?
    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 schrieb:

    Mach mal ein separates neues Projekt, das Deinen Effekt reproduziert.
    • Wieviele und was für Spalten müssen vorhanden sein?
    • Wieviel Zeilen müssen vorhanden sein?
    • Welchen Inhalt müssen die Zellen haben?
    • Was passiert bzw. was passiert nicht?

    aufgrund der größe der DB kann ich kein seperates Projekt anlegen.
    das Grid fuelle ich mit angehängtem Code (Spalte 6) hat die Werte für die Progressbar, sie wird ja auch mit CellPaiting gezeichnet doch zeichnet sie mir die Spalte 0 über.

    bitte Rod diesmal helfen, habe echt keine Ahnung wie ich das hinbekommen kann

    Spoiler anzeigen

    Brainfuck-Quellcode

    1. Try
    2. Dim ConnString As String = "Provider=Microsoft.Jet.OLEDB.4.0;" & _
    3. "Data Source=D:\ETMSW\ETM_Daten\ETM.mdb"
    4. Dim myConnection As OleDbConnection = New OleDbConnection
    5. myConnection.ConnectionString = ConnString
    6. myConnection.Open()
    7. 'Columns zuerst ablöschen und neu Zeichnen
    8. dgvABC.Columns.Clear()
    9. '---------------------------------
    10. '//Tab ABC
    11. '---------------------------------
    12. Dim da As OleDbDataAdapter = New OleDbDataAdapter("SELECT " & _
    13. "qry_Kummuliert_Prozent.AnfDatum, " & _
    14. "qry_Kummuliert_Prozent.ArtNummer, " & _
    15. "qry_Kummuliert_Prozent.LieLieferant AS Lieferant, " & _
    16. "qry_Kummuliert_Prozent.BestMenge, " & _
    17. "qry_Kummuliert_Prozent.StueckPreis, " & _
    18. "qry_Kummuliert_Prozent.Gesamt, " & _
    19. "Round([StueckPreis]/[Bestellwert],4)*100 AS [Anteilig%], " & _
    20. "Round([KumProz],3) AS [kummuliert%], " & _
    21. "IIf([KumProz]<18,'C', " & _
    22. "IIf([KumProz] Between 18 And 32,'B','A')) AS ABC " & _
    23. "FROM qry_Kummuliert_Prozent, qry_Bestellgesamt_Wert " & _
    24. "GROUP BY qry_Kummuliert_Prozent.AnfDatum, " & _
    25. "qry_Kummuliert_Prozent.ArtNummer, " & _
    26. "qry_Kummuliert_Prozent.LieLieferant, " & _
    27. "qry_Kummuliert_Prozent.BestMenge, " & _
    28. "qry_Kummuliert_Prozent.StueckPreis, " & _
    29. "qry_Kummuliert_Prozent.Gesamt, " & _
    30. "Round([StueckPreis]/[Bestellwert],4)*100," & _
    31. "Round([KumProz],3), IIf([KumProz]<18,'C'," & _
    32. "IIf([KumProz] Between 18 And 32,'B','A'))" & _
    33. "ORDER BY Round([KumProz],3); ", ConnString)
    34. dSS = New DataSet
    35. da.Fill(dSS, "tempABC")
    36. dBindabc.DataSource = dSS
    37. dgvABC.DataSource = dSS
    38. dBindabc.DataMember = dSS.Tables(0).ToString()
    39. dgvABC.DataSource = dBindabc
    40. '-----------
    41. dgvABC.Columns("AnfDatum").DefaultCellStyle.Format = "d"
    42. dgvABC.Columns("StueckPreis").DefaultCellStyle.Format = "c2"
    43. dgvABC.Columns("StueckPreis").DefaultCellStyle.Alignment = DataGridViewContentAlignment.TopRight
    44. dgvABC.Columns("Gesamt").DefaultCellStyle.Format = "c2"
    45. dgvABC.Columns("Gesamt").DefaultCellStyle.Alignment = DataGridViewContentAlignment.TopRight
    46. dgvABC.Columns("Anteilig%").DefaultCellStyle.Format = "0.00"
    47. dgvABC.Columns("Anteilig%").DefaultCellStyle.Alignment = DataGridViewContentAlignment.TopRight
    48. dgvABC.Columns("kummuliert%").DefaultCellStyle.Format = "0.00"
    49. dgvABC.Columns("kummuliert%").DefaultCellStyle.Alignment = DataGridViewContentAlignment.TopRight
    50. 'hier soll die Progress gezeichnet werden, nach der A,B,C Spalte
    51. Catch ex As Exception
    52. End Try

    menorca schrieb:

    bitte Rod diesmal helfen
    Sorry, von Datanbanken hab ich keine Ahnung. Ich versuche nur, Fehler zu finden. Und von ProgressBar like Zeugs sehe ich in Deinem Code nix.
    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!
    wer kann helfen? Datagridview Progressbar



    den Wert den ich benötige steht in der Abfrage (Spalte 6), wird errechnet

    Quellcode

    1. "Round([StueckPreis]/[Bestellwert],4)*100 AS [Anteilig%], "


    weiter kommt der Code nicht

    Quellcode

    1. Double.TryParse(Me.Value.ToString(), percentage)


    im Laod Ereignis

    Quellcode

    1. '//
    2. Dim col As New ProgressColumn
    3. col.HeaderText = "Auswertung"
    4. dgvABC.Columns.Add(col)
    5. Dim col1 As New DataGridViewTextBoxColumn
    6. col1.HeaderText = "Value"
    7. dgvABC.Columns.Add(col1)
    8. dgvABC.AllowUserToAddRows = False
    9. dgvABC.Rows.Add()
    10. For i As Integer = 0 To dgvbestellungen.Rows.Count - 1
    11. 'If dgvABC.Rows(i).Cells(6).Value IsNot DBNull.Value Then
    12. dgvABC.Rows(i).Cells(9).Value = dgvABC.Rows(i).Cells(6).Value / 100
    13. 'End If
    14. Next


    Progress Klasse

    Spoiler anzeigen

    Quellcode

    1. Class ProgressColumn
    2. Inherits DataGridViewColumn
    3. Public Sub New()
    4. MyBase.New(New ProgressCell())
    5. End Sub
    6. Public Overrides Property CellTemplate() As DataGridViewCell
    7. Get
    8. Return MyBase.CellTemplate
    9. End Get
    10. Set(ByVal Value As DataGridViewCell)
    11. If Value IsNot Nothing And Not TypeOf (Value) Is ProgressCell Then
    12. Throw New InvalidCastException("Must be a ProgressCell")
    13. End If
    14. MyBase.CellTemplate = Value
    15. End Set
    16. End Property
    17. End Class
    18. Public Class ProgressCell
    19. Inherits DataGridViewImageCell
    20. Protected Overrides Function GetFormattedValue(ByVal value As Object, ByVal rowIndex As Integer, ByRef cellStyle As System.Windows.Forms.DataGridViewCellStyle, ByVal valueTypeConverter As System.ComponentModel.TypeConverter, ByVal formattedValueTypeConverter As System.ComponentModel.TypeConverter, ByVal context As System.Windows.Forms.DataGridViewDataErrorContexts) As Object
    21. Dim bmp As Bitmap = New Bitmap(Me.Size.Width, Me.Size.Height)
    22. Using g As Graphics = Graphics.FromImage(bmp)
    23. Dim percentage As Double = 0
    24. Double.TryParse(Me.Value.ToString(), percentage)
    25. g.FillRectangle(New SolidBrush(Color.FromArgb(255, 255, 69, 0)), 3, 3, CInt((Me.Size.Width - 6) * percentage / 100), CInt(Me.Size.Height - 7))
    26. End Using
    27. Return bmp
    28. End Function
    29. End Class
    Bilder
    • ABC_Progress.JPG

      21,21 kB, 880×214, 267 mal angesehen