I am supporting CandidateX

CandidateX is a startup that focuses on creating inclusion-focused hiring solutions, designed to increase access to job opportunities for underestimated talent. Check them out if you have a few minutes to spare. They need visibility!

cDataRow is a row of cCell . The sid argument refers to the column either by column name or number. Where sid optional and omitted the complete row is operated on. Where sid is present the cCell it addresses in the cDataRow is operated on. 

For example

cDataRow.Refresh() will refresh the entire row and cDataRow.cell("London").Refresh() will refresh a specific cell. cDataRow.refresh() is equivalent to cDataSet.row("some rowid").refresh()

You can find the methods and properties documentation on github and the source colde below or on Github

'gistThat@mcpher.com :do not modify this line - see ramblings.mcpher.com for details: updated on 8/18/2014 4:47:43 PM : from manifest:3414394 gist https://gist.github.com/brucemcpherson/3414216/raw/cDataRow.cls
' a collection of data Cells representing one row of data
Option Explicit
'v 2.02
'for more about this
' https://ramblings.mcpher.com/classes/data-manipulation-classes
'to contact me
' http://groups.google.com/group/excel-ramblings
'reuse of code
' https://ramblings.mcpher.com/codeuse
Private pCollect As Collection                  ' a collection of data Cells - one for every column in this row
Private pWhere As Range
Private pParent As cDataSet
Private pRow As Long
Private pHidden As Boolean
Public Property Get hidden()
    hidden = pHidden
End Property
Public Property Get parent() As cDataSet
    Set parent = pParent
End Property
Public Property Get row() As Long
    row = pRow
End Property
Public Property Get columns() As Collection
    Set columns = pCollect
End Property
Public Property Get where() As Range
    Set where = pWhere
End Property

Public Property Get cell(sid As Variant, Optional complain As Boolean = False) As cCell
    Dim c As cCell
    Set c = exists(sid)
    If c Is Nothing And complain Then
        MsgBox (CStr(sid) & " is not a known column heading")
    End If
    Set cell = c

End Property
Public Property Get value(sid As Variant) As Variant
    Dim cc As cCell
    Set cc = cell(sid)
    If Not cc Is Nothing Then
        value = cc.value
    End If
End Property
Public Property Get values(Optional bIncludeKey = False) As Variant
    Dim cc As cCell
    ReDim a(1 To columns.count) As Variant
    For Each cc In columns
        If cc.column <> pParent.keyColumn Or bIncludeKey Then
            a(cc.column) = cc.value
        Else
            a(cc.column) = Empty
        End If
    Next cc
    values = a
End Property

Public Function find(v As Variant, Optional bIncludeKey = False) As cCell
    Dim cc As cCell
    For Each cc In columns
        If cc.column <> pParent.keyColumn Or bIncludeKey Then
            If makeKey(cc.value) = makeKey(v) Then
                Set find = cc
                Exit Function
            End If
        End If
    Next cc
End Function
Public Function max(Optional bIncludeKey = False) As Variant
    max = Application.WorksheetFunction.max(values(bIncludeKey))
End Function
Public Function min(Optional bIncludeKey = False) As Variant
    max = Application.WorksheetFunction.min(values(bIncludeKey))
End Function
Public Function refresh(Optional sid As Variant) As Variant
    Dim dt As cCell, v As Variant
    If IsMissing(sid) Then
        For Each dt In columns
            v = dt.refresh
        Next dt

    Else
        refresh = cell(sid).refresh
    End If
End Function

Public Sub Commit(Optional p As Variant, Optional sid As Variant)
    Dim dt As cCell
    If IsMissing(sid) Then
        For Each dt In columns
            dt.Commit p
        Next dt
    Else
      cell(sid).Commit p
    End If
   
End Sub
Public Property Get toString(sid As Variant, Optional sFormat As String = vbNullString) As String
    toString = cell(sid).toString(sFormat)
End Property
Public Function create(dset As cDataSet, rDataRow As Range, nRow As Long, _
                            rv As Variant) As cDataRow
                            
    Dim rCell As Range, dcell As cCell, hcell As cCell, hr As cHeadingRow, n As Long
    Dim r As Range, dc As cDataColumn

    Set pWhere = rDataRow
    Set pParent = dset
    pRow = nRow
    n = 0
    ' recordfilter
    pHidden = False
    If (pParent.recordFilter) Then
        pHidden = rDataRow.EntireRow.hidden
    End If
    
    If pRow = 0 Then        ' we are doing a headingrow
        For Each r In pWhere.Cells
            n = n + 1
            If IsEmpty(r) Then
                MsgBox ("unexpected blank heading cell at " & SAd(r))
                Exit Function
            End If
            Debug.Assert Not IsEmpty(r)
            Set dcell = New cCell
            With dcell
                pCollect.add .create(Me, n, r), makeKey(CStr(r.value))
            End With
        Next r
    Else
        Set hr = pParent.headingRow
        For Each hcell In hr.headings
            ' create a cell to hold it in
            Set rCell = rDataRow.Cells(1, hcell.column)
            Set dcell = New cCell
            dcell.create Me, hcell.column, rCell, rv(nRow - 1 + LBound(rv, 1), hcell.column - 1 + LBound(rv, 2))
            pCollect.add dcell

            ' set the type of column
            Set dc = pParent.columns(hcell.column)
            With dc
                If Not IsEmpty(rCell) Then
                    If .typeofColumn <> eTCmixed Then
                        If IsDate(rCell.value) Then
                            If .typeofColumn <> eTCdate Then
                                If .typeofColumn = eTCunknown Then
                                    .typeofColumn = eTCdate
                                Else
                                    .typeofColumn = eTCmixed
                                End If
                            End If
                            
                        ElseIf IsNumeric(rCell.value) Then
                            If .typeofColumn <> eTCnumeric Then
                                If .typeofColumn = eTCunknown Then
                                    .typeofColumn = eTCnumeric
                                Else
                                    .typeofColumn = eTCmixed
                                End If
                            End If
                        
                        Else
                            If .typeofColumn <> eTCtext Then
                                If .typeofColumn = eTCunknown Then
                                    .typeofColumn = eTCtext
                                Else
                                    .typeofColumn = eTCmixed
                                End If
                            End If
                        End If
                    End If
                End If
            End With
            
        Next hcell
    End If
    Set create = Me
End Function

Private Function exists(sid As Variant) As cCell
    On Error GoTo handle
    If VarType(sid) = vbLong Or VarType(sid) = vbInteger Then
        Set exists = pCollect(sid)
    Else
        Set exists = pCollect(pParent.headings(makeKey(CStr(sid))).column)
    End If
    Exit Function
handle:
    Set exists = Nothing
End Function
Public Sub tearDown()
    ' clean up
    Dim cc As cCell
    If Not pCollect Is Nothing Then
        For Each cc In columns
            cc.tearDown
        Next cc
        Set pCollect = Nothing
    End If
    
    Set pParent = Nothing
End Sub

Private Sub Class_Initialize()
    Set pCollect = New Collection
End Sub