Unplanned
Last Updated: 05 Mar 2024 14:11 by Stenly

The FilterColumn method does not position the filtering popup on the passed column index when it is opened.

A workaround to this behavior would be to manually position the filtering popup using the following approach:

this.virtualGrid.FilterColumn(2);

var virtualizingCanvasBase = this.virtualGrid.ChildrenOfType<VirtualizingCanvasBase>().FirstOrDefault();

var columnsRenderInfoInfo = virtualizingCanvasBase.GetType().GetProperty("ColumnsRenderInfo", System.Reflection.BindingFlags.Instance | System.Reflection.BindingFlags.NonPublic);

var columnsRenderInfo = columnsRenderInfoInfo.GetValue(virtualizingCanvasBase);

var offsetMethodInfo = columnsRenderInfo.GetType().GetMethod("OffsetFromIndex");

var filteringPopupPropertyInfo = this.virtualGrid.GetType().GetProperty("FilteringPopup", System.Reflection.BindingFlags.Instance | System.Reflection.BindingFlags.NonPublic);

Popup filteringPopup = (Popup)filteringPopupPropertyInfo.GetValue(this.virtualGrid);

filteringPopup.HorizontalOffset = (double)offsetMethodInfo.Invoke(columnsRenderInfo, new object[1] { 2 });

The FilterColumn method should be called, in order for the filtering Popup to be created.

Declined
Last Updated: 19 Dec 2023 09:19 by ADMIN

HeaderSizeNeeded is fired twice with the same index and affects the header row width. 

Completed
Last Updated: 18 Dec 2023 06:53 by ADMIN
Release LIB 2023.3.1218 (18 Dec 2023)
When the TextAlignment is set to right the Filter Icon overlaps the text in the header. 
Unplanned
Last Updated: 05 Jun 2024 10:03 by ADMIN
Created by: Zach
Comments: 1
Category: VirtualGrid
Type: Feature Request
0
Add the Filter Row filter mode functionality to VirtualGrid similar to the GridView.
Unplanned
Last Updated: 14 Nov 2023 09:45 by Joe
Add a way to save the Filter/Sort/Group descriptors to a string or a file. 
Completed
Last Updated: 08 Nov 2017 13:48 by ADMIN
Available in LIB version 2017.3.1113, it will be also available in the R1 2018 Release.
Unplanned
Last Updated: 09 Oct 2024 10:00 by Martin Ivanov
The Multiple and Extended selection modes allow you to select and deselect multiple items. The deselection of items doesn't work.
Unplanned
Last Updated: 16 Oct 2024 13:24 by Martin Ivanov
Add an event (for example named QueryCursor) to the RadVirtualGrid control, that is invoked each time the control tries to replace the Mouse.OverrideCursor static property's value. The event should give information about the new cursor (also possibly for the old one) and it should allow the developer to replace the cursor with its own instance. 
Completed
Last Updated: 15 Aug 2023 13:06 by ADMIN
Release LIB 2023.2.821 (21 Aug 2023)

The CellDecorationsNeeded event isn't raised for pinned columns/rows

I would expect this event would be raised regardless of pinned state. Otherwise the UI would not be consistent when columns/rows are pinned.


// SomeVirtualGrid.xaml.cs
public SomeVirtualGrid()
{
    InitializeComponent();
    vg.PinColumnLeft(0);
    vg.PinColumnLeft(1);
    vg.PinColumnLeft(2);
}

 


Completed
Last Updated: 29 May 2023 08:48 by ADMIN
Release R2 2023
Having pinned columns result in an exception when changing the ColumnWidth property of RadVirtualGrid.
Completed
Last Updated: 27 Mar 2023 09:44 by ADMIN
Release LIB 2023.1.327 (27 Mar 2023)

Cell contents are missing when the header size is assigned through the e.Size property of the HeaderSizeEventArgs in the HeaderSizeNeeded event handler of RadVirtualGrid.

This happens only for some of the cells and when the viewport has many rows and columns.

To work this around, instead of setting the header size in the HeaderSizeNeeded event handler, use the ColumnWidth property of RadVirtualGrid.

<telerik:RadVirtualGrid ColumnWidth="50" />

Completed
Last Updated: 31 Oct 2022 12:02 by ADMIN
Release LIB 2022.3.1031(31 Oct 2022)

An ArgumentOutOfRangeException is thrown if you try to copy a pinned cell using Ctrl+C while there is a selected cell. This is reproduced by selecting an unpinned cell, then click a pinned cell to set is a current, and then press Ctrl+C to copy the pinned cell.

To work this around, override the RadVirtualGridCommands.Copy command behavior and implement the copy action from scratch.

static MainWindow()
{   
	CommandManager.RegisterClassCommandBinding(typeof(RadVirtualGrid), new CommandBinding(RadVirtualGridCommands.Copy, OnVirtualGridCopyExecuted, OnVirtualGridCopyCanExecute));
}

private static void OnVirtualGridCopyCanExecute(object sender, CanExecuteRoutedEventArgs e)
{
	e.Handled = true;
	e.CanExecute = true;
}

private static void OnVirtualGridCopyExecuted(object sender, ExecutedRoutedEventArgs e)
{
	var virtualGrid = (RadVirtualGrid)sender;
	var strBuilder = new StringBuilder();
	// DataView is a custom property in MyDataProvider (deriving from DataProvider) and it just returns this.Source (which is a protected property).
	var items = ((MyDataProvider)virtualGrid.DataProvider).DataView; 
	int pinnedColumnsCount = (int)virtualGrid.Tag;
	
	foreach (VirtualGridCellInfo cell in virtualGrid.SelectedCells)
	{
		int columnIndex = cell.ColumnIndex + pinnedColumnsCount;
		ItemPropertyInfo propertyInfo = virtualGrid.DataProvider.ItemProperties[columnIndex];
		var descriptor = (PropertyDescriptor)propertyInfo.Descriptor;
		object rowData = items.GetItemAt(cell.RowIndex);
		object cellValue = descriptor.GetValue(rowData);

		strBuilder.Append(cellValue + " ");
	}

	Clipboard.SetText(strBuilder.ToString());
}

Unplanned
Last Updated: 07 Mar 2022 11:59 by Martin Ivanov
Created by: Martin Ivanov
Comments: 0
Category: VirtualGrid
Type: Feature Request
0
Usually, you can set the AutomationId of a FrameworkElement using the AutomationProperties.AutomationId attached property. However, because of the specific implementation of RadVirtualGrid, there are no separate visual elements per row or cell, so you cannot use the approach with the attached property. But, there are custom automation peers for the cells which can be customized. Add an API that allows you to set the AutomationId of the cells when the peer (VirtualGridCellInfoAutomationPeer) or the cell info is created.
Completed
Last Updated: 13 Dec 2021 07:59 by ADMIN
Release LIB 2021.3.1213 (13 Dec 2021)

I have an application that uses docking. Each pane contain a virtual grid.

If the user toggles between panes, any future font size changes are not reflected by the virtual grid

I have attached a demo project that shows the problem.

 

After launching the application:

1) click the Increase/Decrease Font buttons to see the font size change.

2) click tab2 then go back to tab1

3) click the Increase/Decrease Font buttons to see the Virtual Grids font size no longer updates.

 

(I have a third virtual grid outside of the Docking that shows that the font does change if not used inside of a docking control)

Completed
Last Updated: 12 Apr 2021 10:50 by ADMIN
Release LIB 2021.1.412
When the user clicks on a cell, the whole row will be selected. However, if we clear the selected items by calling the UnselectAll method, clicking again on the same cell does not select the row.
Completed
Last Updated: 12 Apr 2021 10:50 by ADMIN
Release LIB 2021.1.412
In this case, when we call PushCellValue on a VirtualGrid that is still not loaded a NullReferenceException is thrown.
Completed
Last Updated: 14 Oct 2019 13:23 by ADMIN
Release R3 2019 SP1
Background and Foreground properties of HeaderCellDecorationsNeeded event args are not respected
Completed
Last Updated: 11 Oct 2019 10:07 by ADMIN
Release LIB 2019.3.1007

I believe this is caused a bug in Telerik.Windows.Controls.VirtualGrid.Selection.CellSelectionHandler.ToggleSingleSelect() method:

    internal void ToggleSingleSelect()
    {
      if (this.owner.SelectionUnit != VirtualGridSelectionUnit.Cell && this.SelectedCells.Count <= 1)
        return;
      this.BeginSelection();
      VirtualGridCellInfo selectedCell = this.SelectedCells[0];
      this.DeselectAll();
      this.Select(selectedCell);
      this.EndSelection();
    }

If SelectionUnit = Cell but no cells are selected, the code still attempts to retrieve the first selected cell what causes an exception. 

 

Stack trace:

System.ArgumentOutOfRangeException: Specified argument was out of the range of valid values.

Parameter name: index
   at Telerik.Windows.Controls.VirtualGrid.CellInfoCollection.get_Item(Int32 index)
   at Telerik.Windows.Controls.VirtualGrid.Selection.CellSelectionHandler.ToggleSingleSelect()
   at Telerik.Windows.Controls.RadVirtualGrid.OnSelectionModeChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)
   at System.Windows.DependencyObject.OnPropertyChanged(DependencyPropertyChangedEventArgs e)
   at System.Windows.FrameworkElement.OnPropertyChanged(DependencyPropertyChangedEventArgs e)
   at System.Windows.DependencyObject.NotifyPropertyChange(DependencyPropertyChangedEventArgs args)
   at System.Windows.DependencyObject.UpdateEffectiveValue(EntryIndex entryIndex, DependencyProperty dp, PropertyMetadata metadata, EffectiveValueEntry oldEntry, EffectiveValueEntry& newEntry, Boolean coerceWithDeferredReference, Boolean coerceWithCurrentValue, OperationType operationType)
   at System.Windows.DependencyObject.InvalidateProperty(DependencyProperty dp, Boolean preserveCurrentValue)
   at System.Windows.StyleHelper.InvalidateContainerDependents(DependencyObject container, FrugalStructList`1& exclusionContainerDependents, FrugalStructList`1& oldContainerDependents, FrugalStructList`1& newContainerDependents)
   at System.Windows.StyleHelper.DoStyleInvalidations(FrameworkElement fe, FrameworkContentElement fce, Style oldStyle, Style newStyle)
   at System.Windows.StyleHelper.UpdateStyleCache(FrameworkElement fe, FrameworkContentElement fce, Style oldStyle, Style newStyle, Style& styleCache)
   at System.Windows.FrameworkElement.OnStyleChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)
   at System.Windows.DependencyObject.OnPropertyChanged(DependencyPropertyChangedEventArgs e)
   at System.Windows.FrameworkElement.OnPropertyChanged(DependencyPropertyChangedEventArgs e)
   at System.Windows.DependencyObject.NotifyPropertyChange(DependencyPropertyChangedEventArgs args)
   at System.Windows.DependencyObject.UpdateEffectiveValue(EntryIndex entryIndex, DependencyProperty dp, PropertyMetadata metadata, EffectiveValueEntry oldEntry, EffectiveValueEntry& newEntry, Boolean coerceWithDeferredReference, Boolean coerceWithCurrentValue, OperationType operationType)
   at System.Windows.DependencyObject.InvalidateProperty(DependencyProperty dp, Boolean preserveCurrentValue)
   at System.Windows.FrameworkElement.UpdateStyleProperty()
   at System.Windows.TreeWalkHelper.InvalidateOnTreeChange(FrameworkElement fe, FrameworkContentElement fce, DependencyObject parent, Boolean isAddOperation)
   at System.Windows.FrameworkElement.ChangeLogicalParent(DependencyObject newParent)
   at System.Windows.FrameworkElement.RemoveLogicalChild(Object child)
   at System.Windows.Controls.ContentControl.OnContentChanged(Object oldContent, Object newContent)
   at System.Windows.Controls.ContentControl.OnContentChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)
   at System.Windows.DependencyObject.OnPropertyChanged(DependencyPropertyChangedEventArgs e)
   at System.Windows.FrameworkElement.OnPropertyChanged(DependencyPropertyChangedEventArgs e)
   at System.Windows.DependencyObject.NotifyPropertyChange(DependencyPropertyChangedEventArgs args)
   at System.Windows.DependencyObject.UpdateEffectiveValue(EntryIndex entryIndex, DependencyProperty dp, PropertyMetadata metadata, EffectiveValueEntry oldEntry, EffectiveValueEntry& newEntry, Boolean coerceWithDeferredReference, Boolean coerceWithCurrentValue, OperationType operationType)
   at System.Windows.DependencyObject.InvalidateProperty(DependencyProperty dp, Boolean preserveCurrentValue)
   at System.Windows.StyleHelper.ClearTemplateChain(HybridDictionary[] instanceData, FrameworkElement feContainer, FrameworkContentElement fceContainer, List`1 templateChain, FrameworkTemplate oldFrameworkTemplate)
   at System.Windows.StyleHelper.ClearGeneratedSubTree(HybridDictionary[] instanceData, FrameworkElement feContainer, FrameworkContentElement fceContainer, FrameworkTemplate oldFrameworkTemplate)
   at System.Windows.StyleHelper.DoTemplateInvalidations(FrameworkElement feContainer, FrameworkTemplate oldFrameworkTemplate)
   at System.Windows.StyleHelper.UpdateTemplateCache(FrameworkElement fe, FrameworkTemplate oldTemplate, FrameworkTemplate newTemplate, DependencyProperty templateProperty)
   at System.Windows.Controls.ContentPresenter.OnTemplateChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)
   at System.Windows.DependencyObject.OnPropertyChanged(DependencyPropertyChangedEventArgs e)
   at System.Windows.FrameworkElement.OnPropertyChanged(DependencyPropertyChangedEventArgs e)
   at System.Windows.DependencyObject.NotifyPropertyChange(DependencyPropertyChangedEventArgs args)
   at System.Windows.DependencyObject.UpdateEffectiveValue(EntryIndex entryIndex, DependencyProperty dp, PropertyMetadata metadata, EffectiveValueEntry oldEntry, EffectiveValueEntry& newEntry, Boolean coerceWithDeferredReference, Boolean coerceWithCurrentValue, OperationType operationType)
   at System.Windows.DependencyObject.SetValueCommon(DependencyProperty dp, Object value, PropertyMetadata metadata, Boolean coerceWithDeferredReference, Boolean coerceWithCurrentValue, OperationType operationType, Boolean isInternal)
   at System.Windows.Controls.ContentPresenter.EnsureTemplate()
   at System.Windows.Controls.ContentPresenter.OnPreApplyTemplate()
   at System.Windows.FrameworkElement.ApplyTemplate()
   at System.Windows.FrameworkElement.MeasureCore(Size availableSize)
   at System.Windows.UIElement.Measure(Size availableSize)
   at System.Windows.ContextLayoutManager.UpdateLayout()
   at System.Windows.ContextLayoutManager.UpdateLayoutCallback(Object arg)
   at System.Windows.Media.MediaContext.FireInvokeOnRenderCallbacks()
   at System.Windows.Media.MediaContext.RenderMessageHandlerCore(Object resizedCompositionTarget)
   at System.Windows.Media.MediaContext.RenderMessageHandler(Object resizedCompositionTarget)
   at System.Windows.Threading.ExceptionWrapper.InternalRealCall(Delegate callback, Object args, Int32 numArgs)
   at System.Windows.Threading.ExceptionWrapper.TryCatchWhen(Object source, Delegate callback, Object args, Int32 numArgs, Delegate catchHandler)
Completed
Last Updated: 10 Oct 2019 18:57 by ADMIN
Release LIB 2019.3.1007
Setting the SizeUnit to Star in the HeaderSizeNeeded leads to shrinking the columns when the window resize
Completed
Last Updated: 02 Jan 2019 11:42 by ADMIN
Scheduled for:
The fix for this issue will be available with LIB (version 2018.3.1302) scheduled for publishing on Wednesday, 2nd January 2019.