RadListView Unbound CellFormatting

5 posts, 0 answers
  1. Brandon
    Brandon avatar
    21 posts
    Member since:
    Jan 2019

    Posted 22 Jan 2019 Link to this post

    You have an excellent example of how to do CellFormatting on a Details ListView for a Bound list.  My issue is trying to mimmic the same effect with an unbound list.

    Dim productRowView As DataRowView = TryCast(cell.Row.DataBoundItem, DataRowView)
    If productRowView IsNot Nothing AndAlso CBool(productRowView.Row("Discontinued")) = True Then
        e.CellElement.BackColor = Color.Yellow
        e.CellElement.ForeColor = Color.Red
        e.CellElement.GradientStyle = Telerik.WinControls.GradientStyles.Solid
        e.CellElement.Font = newFont
    Else
        e.CellElement.ResetValue(LightVisualElement.BackColorProperty, Telerik.WinControls.ValueResetFlags.Local)
        e.CellElement.ResetValue(LightVisualElement.ForeColorProperty, Telerik.WinControls.ValueResetFlags.Local)
        e.CellElement.ResetValue(LightVisualElement.GradientStyleProperty, Telerik.WinControls.ValueResetFlags.Local)
        e.CellElement.ResetValue(LightVisualElement.FontProperty, Telerik.WinControls.ValueResetFlags.Local)
    End If

     

    I don't know how to find if a row is "Discontinued" when the data isn't bound to the list.

    Right now my ListView is heavily lagged and I'm not sure if it's due to the fact that I'm not resetting the values or if it's due to the functions involved with formatting the cells.

  2. Dimitar
    Admin
    Dimitar avatar
    2918 posts

    Posted 23 Jan 2019 Link to this post

    Hi Brandon,

    You can acces a filed value by using the column name. Here is an example:
    Private Sub RadListView1_CellFormatting(ByVal sender As Object, ByVal e As Telerik.WinControls.UI.ListViewCellFormattingEventArgs)
        Dim cell As DetailListViewDataCellElement = TryCast(e.CellElement, DetailListViewDataCellElement)
        If cell IsNot Nothing Then
            Dim value = cell.Row("Column1").ToString()
            If value IsNot Nothing AndAlso value = "Test1" Then
                e.CellElement.BackColor = Color.Yellow
                e.CellElement.ForeColor = Color.Red
                e.CellElement.GradientStyle = Telerik.WinControls.GradientStyles.Solid
     
            Else
                e.CellElement.ResetValue(LightVisualElement.BackColorProperty, Telerik.WinControls.ValueResetFlags.Local)
                e.CellElement.ResetValue(LightVisualElement.ForeColorProperty, Telerik.WinControls.ValueResetFlags.Local)
                e.CellElement.ResetValue(LightVisualElement.GradientStyleProperty, Telerik.WinControls.ValueResetFlags.Local)
     
            End If
        End If
    End Sub

    I hope this will be useful. Let me know if you have additional questions.

    Regards,
    Dimitar
    Progress Telerik
    Get quickly onboard and successful with your Telerik and/or Kendo UI products with the Virtual Classroom free technical training, available to all active customers. Learn More.
  3. Brandon
    Brandon avatar
    21 posts
    Member since:
    Jan 2019

    Posted 23 Jan 2019 Link to this post

    My ListView is populated with data from a DataSet object.  The ListView isn't bound to the dataset. I loop through the dataset and create the items for the ListView.  Without cell formatting, the ListView is slightly laggy.  It doesn't scroll as smoothly as I think it should.  There's a small bit of hesitation that I can clearly see if I try to scroll quickly.

     

    The entire ListView takes a dump when I add the CellFormatting code below:

    Private Sub lvEquip_CellFormatting(sender As Object, e As ListViewCellFormattingEventArgs) 'Handles lvEquip.CellFormatting
        Dim cell As DetailListViewDataCellElement = TryCast(e.CellElement, DetailListViewDataCellElement)
        If cell IsNot Nothing Then
     
            If cell.Row("Col1").ToString() IsNot Nothing Then
                Dim DR As DataRow = cell.Row.Tag
                Dim C As Color
                Select Case e.CellElement.Data.Name
     
                    Case "Col4" 'Status
                        Select Case GetFromRow(DR, EquipmentCI.Status)
                            Case "Resolved"
                                C = Color.Green
                            Case "UnResolved"
                                C = Color.Red
                            Case "Temporary Resolution"
                                C = Color.Orange
                        End Select
                        e.CellElement.ForeColor = C
     
                    Case "Col5" 'Pump Stand Status
                        Dim ID As Integer = If(IsNumeric(GetFromRow(DR, EquipmentCI.PSStatus)), CInt(GetFromRow(DR, EquipmentCI.PSStatus)), 0)
                        Select Case DirectCast(ID, PSStatus)
                            Case PSStatus.PS
                                C = Color.Red
                            Case PSStatus.A
                                C = Color.Orange
                            Case PSStatus.R
                                C = Color.Green
                        End Select
                        e.CellElement.ForeColor = C
     
                    Case "Col18" 'Last PM
                        Dim LPM As String = GetFromRow(DR, EquipmentCI.LastPM)
                        Dim EH As String = GetFromRow(DR, EquipmentCI.EngineHours)
                        If LPM.Length < 1 Then LPM = 0
                        If EH.Length < 1 Then EH = 0
                        Dim Cnt As Integer = CInt(EH) - CInt(LPM)
                        If Cnt >= LastPM_High Then
                            C = Color.Red
                        ElseIf Cnt >= LastPM_Medium Then
                            C = Color.Orange
                        Else
                            C = Color.Green
                        End If
                        e.CellElement.ForeColor = C
     
                    Case "Col21" 'Sec Last PM
                        Dim LPM As String = GetFromRow(DR, EquipmentCI.SecLastPM)
                        Dim EH As String = GetFromRow(DR, EquipmentCI.SecEngineHours)
                        If LPM.Length < 1 Then LPM = 0
                        If EH.Length < 1 Then EH = 0
                        Dim Cnt As Integer = CInt(EH) - CInt(LPM)
                        If Cnt >= LastPM_High Then
                            C = Color.Red
                        ElseIf Cnt >= LastPM_Medium Then
                            C = Color.Orange
                        Else
                            C = Color.Green
                        End If
                        e.CellElement.ForeColor = C
     
                    Case "Col23" 'Fed Insp
                        If GetFromRow(DR, EquipmentCI.FedInsp).Length > 0 Then
                            Dim DT As DateTime = FMDB(GetFromRow(DR, EquipmentCI.FedInsp), False)
                            Dim Diff As Long = DateDiff(DateInterval.Month, DT, DateTime.Now)
                            If Diff >= 13 Then
                                C = Color.Red
                            ElseIf Diff >= 6 Then
                                C = Color.Orange
                            Else
                                C = Color.Green
                            End If
                        End If
                        e.CellElement.ForeColor = C
     
                    Case Else
                        e.CellElement.ResetValue(LightVisualElement.ForeColorProperty, ValueResetFlags.Local)
     
                End Select
            Else
                e.CellElement.ResetValue(LightVisualElement.ForeColorProperty, ValueResetFlags.Local)
            End If
        End If
    End Sub

     

    A few key ingredients here.

    GetFromRow: Just returns Trim(DataRowObject.Item(ColumnIndex))

    FMDB: Short for FormatDateBack converts a MySQL formatted DateTime string back to a DateTime object.  The boolean indicates whether I want to include the time.

     

    Anyway, am I doing something wrong in the CellFormatting?

  4. Brandon
    Brandon avatar
    21 posts
    Member since:
    Jan 2019

    Posted 23 Jan 2019 Link to this post

    Update: I thought that maybe the ListView was more efficient when used in Bound mode so I converted the ListView over to use a Bound collection.  I now get an even more laggy experience without the CellFormatting.
  5. Dimitar
    Admin
    Dimitar avatar
    2918 posts

    Posted 24 Jan 2019 Link to this post

    Hello Brandon,

    I noticed that you have opened a ticket for this. We can continue to discuss this there.

    Do not hesitate to contact us if you have other questions.
     
    Regards,
    Dimitar
    Progress Telerik
    Get quickly onboard and successful with your Telerik and/or Kendo UI products with the Virtual Classroom free technical training, available to all active customers. Learn More.
Back to Top