I thought I would contribute this proof of concept code I had to work out. A single cell in a grid needed to update data via a call to a remote system. However, if the grid had thousands of records, I did not want it to make thousands of remote calls on load. So, I looked at the ViewCellFormatting event which allows me to retrieve the data only when the cell is visible.
I also "cached" the data in the cell by setting its flag to "UPDATED". The "Refresh Data" function actually loops through all rows, clears the cells' tags, and sets the value to zero. When the visible cell's value is changed, the ViewCellFormatting event is fired and the remote call is made again.
In this proof of concept code, I am simply just updating the row to the current time's Second. The first button refreshes the data and makes the other non-visible cell's stale by removing the tag.
The second button will show the "i" count to prove the "remote" call is called only on the visible cells.
I tip my hat to Telerik for this pretty powerful and useful functionality!
I also "cached" the data in the cell by setting its flag to "UPDATED". The "Refresh Data" function actually loops through all rows, clears the cells' tags, and sets the value to zero. When the visible cell's value is changed, the ViewCellFormatting event is fired and the remote call is made again.
In this proof of concept code, I am simply just updating the row to the current time's Second. The first button refreshes the data and makes the other non-visible cell's stale by removing the tag.
The second button will show the "i" count to prove the "remote" call is called only on the visible cells.
I tip my hat to Telerik for this pretty powerful and useful functionality!
Imports Telerik.WinControls.UIPublic Class Form1 Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click i = 0 For Each oRow As GridViewDataRowInfo In RadGridView1.Rows() oRow.Cells(0).Tag = "" oRow.Cells(0).Value = 0 Next End Sub Private Sub Form1_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load CreateFormControls() Dim list As New ArrayList() Dim i As Integer = 0 While i < 55 list.Add(New ValueType(Of Integer)((i + 1))) ' System.Math.Max(System.Threading.Interlocked.Increment(i), i - 1) i += 1 End While Me.RadGridView1.DataSource = list End Sub Private Sub CreateFormControls() Me.RadGridView1 = New Telerik.WinControls.UI.RadGridView() Me.Button1 = New System.Windows.Forms.Button() Me.Button2 = New System.Windows.Forms.Button() ' 'RadGridView1 ' Me.RadGridView1.Location = New System.Drawing.Point(13, 13) Me.RadGridView1.Name = "RadGridView1" Me.RadGridView1.Size = New System.Drawing.Size(267, 194) Me.RadGridView1.TabIndex = 0 Me.RadGridView1.Text = "RadGridView1" ' 'Button1 ' Me.Button1.Location = New System.Drawing.Point(13, 213) Me.Button1.Name = "Button1" Me.Button1.Size = New System.Drawing.Size(252, 23) Me.Button1.TabIndex = 1 Me.Button1.Text = "Refresh Viewable Cells...Make other cell stale" Me.Button1.UseVisualStyleBackColor = True ' 'Button2 ' Me.Button2.Location = New System.Drawing.Point(12, 242) Me.Button2.Name = "Button2" Me.Button2.Size = New System.Drawing.Size(136, 23) Me.Button2.TabIndex = 1 Me.Button2.Text = "Total Data Updates" Me.Button2.UseVisualStyleBackColor = True ' 'Form1 ' Me.Controls.Add(Me.Button2) Me.Controls.Add(Me.Button1) Me.Controls.Add(Me.RadGridView1) End Sub Public Class ValueType(Of T) Private item As T Public Sub New() End Sub Public Sub New(ByVal item As T) Me.item = item End Sub Public Property ItemProperty() As T Get Return Me.item End Get Set(ByVal value As T) Me.item = value End Set End Property End Class Private Sub RadGridView1_ViewCellFormatting(sender As Object, e As Telerik.WinControls.UI.CellFormattingEventArgs) Handles RadGridView1.ViewCellFormatting If e.ColumnIndex = 0 Then If e.Row.Cells(0).Tag <> "UPDATED" Then e.CellElement.Value = Now.Second e.Row.Cells(0).Tag = "UPDATED" i += 1 End If End If End Sub Dim i As Integer Private Sub Button2_Click(sender As Object, e As System.EventArgs) Handles Button2.Click MsgBox("Date Update Called " & i & " times") End SubEnd Class