When using Infragistics WebHierarchicalDataGrid often there’s a need to detect grid’s async callback (for example we need to rebind the grid if it performs AJAX paging or expanding children). For flat WebDataGrid it was suggested to use grid’s RunBot.IsCallback
property:
If xMyGrid.RunBot.IsCallback Then 'Perform some operations for grid's async callback End If
Now, WHDG also has RunBot.IsCallback
property, but the above code always returns False
for it. I know I’ve seen this before – a situation where a property doesn’t work on WHDG control itself, but works on the WHDG’s GridView
object. Sensing a pattern I modified the code above for WHDG:
If xMyGrid.GridView.RunBot.IsCallback Then 'Perform some operations for grid's async callback End If
And bingo! Now Async callback is detected correctly.
UPDATE 4/27/2012: Turned out the above method doesn’t always work either. (To Infragistics stuff, if anybody happened to read this: The scenario above happens with WHDG in manual load on demand mode when grid’s RowIslandPopulating
event is handled and ContainerGrid
is created on demand and bound to data retrieved from the Database). The above method works when rows of the top level expanded (xMyGrid.GridView.RunBot.IsCallback is True
) but fails if child rows are expanded to show grandchildren (in that case xMyGrid.GridView.RunBot.IsCallback is False
).
We need another more reliable way to detect callback, no matter what caused it. And we can do that by checking HTTP Request. If it’s an Infragistics callback it will have a Form parameter with key like "__IGCallback************"
. So the code to always detect the callback correctly is:
If Request.Form.AllKeys.Any(Function(S As String) S IsNot Nothing AndAlso S.StartsWith("__IGCallback")) Then 'Perform some operations for grid's async callback End If