To reproduce:
public Form1()
{
InitializeComponent();
this.radVirtualGrid1.ColumnCount = 5;
this.radVirtualGrid1.RowCount = 20;
this.radVirtualGrid1.CellValueNeeded += radVirtualGrid1_CellValueNeeded;
}
private void radVirtualGrid1_CellValueNeeded(object sender, Telerik.WinControls.UI.VirtualGridCellValueNeededEventArgs e)
{
e.Value = "Data" + e.RowIndex + "." + e.ColumnIndex;
}
Workaround: use a custom ScrollableVirtualCellsContainer:
public Form1()
{
InitializeComponent();
this.radVirtualGrid1.CreateRowElement += radVirtualGrid1_CreateRowElement;
this.radVirtualGrid1.ColumnCount = 5;
this.radVirtualGrid1.RowCount = 20;
this.radVirtualGrid1.CellValueNeeded += radVirtualGrid1_CellValueNeeded;
}
private void radVirtualGrid1_CreateRowElement(object sender, VirtualGridCreateRowEventArgs e)
{
e.RowElement = new CustomVirtualGridRowElement();
}
private void radVirtualGrid1_CellValueNeeded(object sender, Telerik.WinControls.UI.VirtualGridCellValueNeededEventArgs e)
{
e.Value = "Data" + e.RowIndex + "." + e.ColumnIndex;
}
public class CustomVirtualGridRowElement : VirtualGridRowElement
{
public CustomVirtualGridRowElement()
: base()
{
FieldInfo fi = typeof(VirtualGridRowElement).GetField("scrollableColumns", BindingFlags.NonPublic | BindingFlags.Instance);
ScrollableVirtualCellsContainer scrollableColumns = fi.GetValue(this) as ScrollableVirtualCellsContainer;
CustomScrollableVirtualCellsContainer newScrollableColumns = new CustomScrollableVirtualCellsContainer();
FieldInfo fi2 = typeof(ScrollableVirtualCellsContainer).GetField("rowElement", BindingFlags.NonPublic | BindingFlags.Instance);
fi2.SetValue(newScrollableColumns, this);
this.Children.Remove(scrollableColumns);
this.Children.Insert(1, newScrollableColumns);
}
}
public class CustomScrollableVirtualCellsContainer : ScrollableVirtualCellsContainer
{
protected override SizeF MeasureElementCore(RadElement element, SizeF availableSize)
{
int scrollOffset = 0;
if (this.RowElement.TableElement.ColumnScroller.ScrollMode == ItemScrollerScrollModes.Discrete)
{
for (int i = 0; i < this.RowElement.TableElement.ColumnScroller.Scrollbar.Value; i++)
{
scrollOffset += this.RowElement.TableElement.ColumnScroller.GetScrollHeight(
this.RowElement.TableElement.ViewInfo.ColumnsViewState.GetItemSize(i));
}
}
else
{
scrollOffset = this.RowElement.TableElement.HScrollBar.Value;
}
VirtualGridCellElement cellElement = element as VirtualGridCellElement;
int itemOffset = this.RowElement.ViewInfo.ColumnsViewState.GetItemOffset(cellElement.Data);
int itemWidth = this.RowElement.ViewInfo.ColumnsViewState.GetItemSize(cellElement.Data);
element.Measure(availableSize);
if (itemOffset + itemWidth > scrollOffset && itemOffset < scrollOffset)
{
return new SizeF((itemOffset + itemWidth) - scrollOffset, element.DesiredSize.Height);
}
return element.DesiredSize;
}
}