To reproduce: 1. Select multiple cells in RadVirtualGrid 2. Right-click one of the selected cells. The expected behavior is to open the context menu in order to allow copy operation and keep the selected cells. However, the obtained result is that the selected cells are cleared. Workaround: Me.RadVirtualGrid1.VirtualGridElement.InputBehavior = New CustoVirtualGridInputBehavior(Me.RadVirtualGrid1.VirtualGridElement) AddHandler Me.RadVirtualGrid1.SelectionChanging, AddressOf SelectionChanging Private Sub SelectionChanging(sender As Object, e As Telerik.WinControls.UI.VirtualGridSelectionChangingEventArgs) If Me.RadVirtualGrid1.VirtualGridElement.Tag = "CancelSelectionChange" Then e.Cancel = True Me.RadVirtualGrid1.VirtualGridElement.Tag = Nothing End If End Sub Public Class CustoVirtualGridInputBehavior Inherits VirtualGridInputBehavior Public Sub New(gridElement As RadVirtualGridElement) MyBase.New(gridElement) End Sub Public Overrides Function HandleMouseDown(args As MouseEventArgs) As Boolean If args.Button = MouseButtons.Right Then Dim cell As VirtualGridCellElement = TryCast(Me.GridElement.ElementTree.GetElementAtPoint(args.Location), VirtualGridCellElement) If cell IsNot Nothing AndAlso cell.IsSelected Then Me.GridElement.Tag = "CancelSelectionChange" End If End If Return MyBase.HandleMouseDown(args) End Function End Class
To reproduce: Public Class Form1 Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load Me.RadVirtualGrid1.SelectionMode = Telerik.WinControls.UI.VirtualGridSelectionMode.CellSelect Me.RadVirtualGrid1.MultiSelect = True Me.RadVirtualGrid1.RowCount = 10 Me.RadVirtualGrid1.ColumnCount = 5 Me.RadVirtualGrid1.SelectAll() Debug.Assert(Me.RadVirtualGrid1.Selection.MaxColumnIndex = Me.RadVirtualGrid1.ColumnCount - 1) Debug.Assert(Me.RadVirtualGrid1.Selection.MaxRowIndex = Me.RadVirtualGrid1.RowCount - 1) End Sub End Class Workaround: Private Sub RadVirtualGrid1_SelectionChanging(ByVal sender As Object, ByVal e As VirtualGridSelectionChangingEventArgs) If e.SelectionAction = VirtualGridSelectionAction.SelectAll Then e.Cancel = True radVirtualGrid1.VirtualGridElement.Selection.BeginSelection(0,0, radVirtualGrid1.MasterViewInfo, False) radVirtualGrid1.VirtualGridElement.Selection.ExtendCurrentRegion(radVirtualGrid1.RowCount-1,radVirtualGrid1.ColumnCount -1) End If End Sub
Description When the RowCount/ColumnCount amount is decreased, and there are resized rows/column, the scrollable area get invalid. Steps to reproduce: RadVirtualGrid radVirtualGrid1 = new RadVirtualGrid(); public Form1() { InitializeComponent(); radVirtualGrid1.Parent = this; radVirtualGrid1.Dock = DockStyle.Fill; this.Controls.SetChildIndex(radVirtualGrid1, 0); button1.BringToFront(); radVirtualGrid1.RowCount = 1000; radVirtualGrid1.ColumnCount = 50; radVirtualGrid1.CellValueNeeded += radVirtualGrid1_CellValueNeeded; for (int i = 0; i < 50; i++) { radVirtualGrid1.MasterViewInfo.SetRowHeight(i, 30); radVirtualGrid1.MasterViewInfo.SetColumnWidth(i, 60); } } void radVirtualGrid1_CellValueNeeded(object sender, VirtualGridCellValueNeededEventArgs e) { e.Value = e.RowIndex + " " + e.ColumnIndex; } private void button1_Click(object sender, EventArgs e) { radVirtualGrid1.RowCount = 20; radVirtualGrid1.ColumnCount = 20; }
A newly created grid has its CurrentCell property initialized to Nothing. Pressing [PageDown] or any other key that causes scrolling will crash. Steps to Reproduce: 1. Launch application 2. Press [PageDown] Sub New() InitializeComponent() Me.RadVirtualGrid1.ColumnCount = 50 Me.RadVirtualGrid1.RowCount = 100 AddHandler Me.RadVirtualGrid1.CellValueNeeded, AddressOf RadVirtualGrid1_CellValueNeeded End Sub Private Sub RadVirtualGrid1_CellValueNeeded(sender As Object, e As Telerik.WinControls.UI.VirtualGridCellValueNeededEventArgs) e.Value = e.ColumnIndex End Sub Workaround: Me.RadVirtualGrid1.CurrentCell = New Telerik.WinControls.UI.VirtualGridCellInfo(0, 0, Me.RadVirtualGrid1.MasterViewInfo)
To reproduce: public RadForm1() { InitializeComponent(); radVirtualGrid1.CellValueNeeded += RadVirtualGrid1_CellValueNeeded; radVirtualGrid1.ColumnCount = 100; radVirtualGrid1.RowCount = 50; radVirtualGrid1.AutoSizeColumnsMode = Telerik.WinControls.UI.VirtualGridAutoSizeColumnsMode.Fill; radVirtualGrid1.SelectionMode = Telerik.WinControls.UI.VirtualGridSelectionMode.CellSelect; } private void RadVirtualGrid1_CellValueNeeded(object sender, Telerik.WinControls.UI.VirtualGridCellValueNeededEventArgs e) { e.Value = string.Format("Col {0} Row{1}", e.ColumnIndex, e.RowIndex); }
Please refer to the attached gif file demonstrating how to reproduce the issue with the Demo application. Workaround: Public Class Form1 Sub New() InitializeComponent() Me.RadVirtualGrid1.AllowAddNewRow = False Me.RadVirtualGrid1.AllowFiltering = False Me.RadVirtualGrid1.ColumnCount = 5 Me.RadVirtualGrid1.MasterViewInfo.RegisterCustomColumn(3) Me.RadVirtualGrid1.RowCount = 1 End Sub Private Sub RadVirtualGrid1_CreateCellElement(sender As Object, e As VirtualGridCreateCellEventArgs) Handles RadVirtualGrid1.CreateCellElement Dim columnIndex As Integer = e.ColumnIndex If e.ViewInfo.ColumnsViewState.TopPinnedItems.Count > 0 AndAlso e.ColumnIndex - 1 < e.ViewInfo.ColumnsViewState.TopPinnedItems.Count Then columnIndex = e.ViewInfo.ColumnsViewState.TopPinnedItems(e.ColumnIndex - 1) End If If columnIndex = 3 AndAlso e.RowIndex >= 0 Then e.CellElement = New RedCellElement() End If End Sub Private Sub RadVirtualGrid1_CellValueNeeded(sender As Object, e As VirtualGridCellValueNeededEventArgs) Handles RadVirtualGrid1.CellValueNeeded e.Value = String.Format("{0}x{1}", e.RowIndex, e.ColumnIndex) End Sub End Class Class RedCellElement Inherits VirtualGridCellElement Sub New() MyBase.New() End Sub Private checkBox As RadCheckBoxElement Protected Overrides Sub CreateChildElements() MyBase.CreateChildElements() Me.checkBox = New RadCheckBoxElement() Me.Children.Add(Me.checkBox) End Sub Protected Overrides ReadOnly Property ThemeEffectiveType() As Type Get Return GetType(VirtualGridCellElement) End Get End Property Public Overrides Function IsCompatible(data As Integer, context As Object) As Boolean Dim headerRow As VirtualGridHeaderRowElement = TryCast(context, VirtualGridHeaderRowElement) If data >= 3 AndAlso headerRow Is Nothing Then Return True Else Return False End If End Function Protected Overrides Sub UpdateInfo(args As VirtualGridCellValueNeededEventArgs) MyBase.UpdateInfo(args) Me.NumberOfColors = 1 Me.DrawFill = True Me.BackColor = Color.Red End Sub End Class
To reproduce: - Subscribe to the SelectionChanged event. - Move the mouse while holding the left button. - The event is fire multiple times. Workaround: VirtualGridCellInfo prevCell = null; private void OnGridSelectionChanged(object sender, EventArgs e) { if (prevCell != gvItems.CurrentCell) { _selectionChangedCount++; tbLog.AppendText("Selection changed " + _selectionChangedCount + "\r\n"); } prevCell = gvItems.CurrentCell; }
Please refer to the attached sample project.
Using RadVirtualGrid, I have a requirement for showing hierarchical levels of data. The parent level and child levels share the SAME column headers. I am utilizing the QueryHasChildRows event of the grid to set the number of rows for each hierarchical level. In that event I set a few properties to control how a child view is rendered as below: else if (e.ViewInfo.HierarchyLevel > 0) { var items = ((IList<AllocStructNode>)e.ViewInfo.ParentViewInfo.Tag)[e.ViewInfo.ParentRowIndex]; if (items.Children != null && items.Children.Count > 0) { e.ViewInfo.Tag = items.Children; e.ViewInfo.RowCount = items.Children.Count; e.ViewInfo.HeaderRowHeight = 0; e.ViewInfo.ShowHeaderRow = false; e.ViewInfo.FilterRowHeight = 0; e.ViewInfo.ShowFilterRow = false; e.ViewInfo.Padding = new Padding(0); e.ViewInfo.HorizontalScrollState = ScrollState.AlwaysHide; } } When a new level is rendered, a new demarcated section of child table element with its own horizontal scrolling displayed. When the parent is horizontally scrolled, the child level doesn't scroll (not synchronized). Similarly, when the child is horizontally scrolled, the parent does not scroll as well. Workaround: See attached project.
Use attached to reproduce (just start it and press enter). Workaround: class MyBehavior : VirtualGridInputBehavior { public MyBehavior(RadVirtualGridElement element) : base(element) { } protected override bool HandleEnterKey(KeyEventArgs keys) { if (this.GridElement.CurrentCell != null) { return base.HandleEnterKey(keys); } return false; } } radVirtualGrid1.VirtualGridElement.InputBehavior = new MyBehavior(radVirtualGrid1.VirtualGridElement);
To reproduce: if you set the TableElement.RowHeight property, it affects the header row as well, but not all cells. As a result the header row overlaps the new row. Workaround: set the TableElement.HeaderRowHeight as well. this.radVirtualGrid1.TableElement.HeaderRowHeight = 50;
When you setup a hierarchical RadVirtualGrid and set the UseScrollbarsInHierarchy property to false and use VirtualGridAutoSizeColumnsMode.Fill for the child template, you expect that the column's width is calculated according to the total width of the respective template. Hence, if you shrink or enlarge the grid, the columns will shrink/enlarge respectively. However, if you double click the resize cursor between the column headers you will notice that the best-fit action is performed over the column and its width is adjusted. However, the VirtualGridAutoSizeColumnsMode.Fill setting is not respected and you either can't see all the columns, or you obtain some empty space if the column doesn't need much space.
To reproduce:
Set the RowSpacing to 10. Press down until the last cell is selected. The view is not scrolled down.
Please use the following code snippet and click the filter button for the first column in the virtual grid. You will notice that the default menu is shown:
RadContextMenu menu = new RadContextMenu();
public RadForm1()
{
InitializeComponent();
RadDateTimePicker aDateTimePicker = new RadDateTimePicker();
RadMenuItem theMenuItem = new RadMenuItem();
theMenuItem.MinSize = new Size(200, 30);
RadHostItem theHostItem = new RadHostItem(aDateTimePicker);
theMenuItem.Children.Add(theHostItem);
menu.Items.Add(theMenuItem);
this.radVirtualGrid1.RowCount = 50;
this.radVirtualGrid1.ColumnCount = 5;
this.radVirtualGrid1.CellValueNeeded+=radVirtualGrid1_CellValueNeeded;
this.radVirtualGrid1.AllowFiltering = true;
this.radVirtualGrid1.ContextMenuOpening+=radVirtualGrid1_ContextMenuOpening;
}
private void radVirtualGrid1_ContextMenuOpening(object sender, VirtualGridContextMenuOpeningEventArgs e)
{
int i;
string theMenuItemText;
if (e.RowIndex == -3 && e.ColumnIndex < 1)
{
e.ContextMenu = menu.DropDown;
}
}
private void radVirtualGrid1_CellValueNeeded(object sender, VirtualGridCellValueNeededEventArgs e)
{
e.Value = Guid.NewGuid().ToString();
}
dear sir ,
i have a problem keydown event does not fire in add new row ?
i want to move to the next cell when i hit Enter key after entering new value and when i reach the last cell of the add new row and type enter the new row will automatically added to the grid....
what's i have to do.....
please any suggest ? thx
Hi,
I have a RadVirtualGrid. I add a filter descriptor and then fetch the filtered data from the data store. I then clear the filters and perform a different fetch from the store. However, when I click in the filter value textbox the text from the previous filter operation is still there even though I purposely call radVirtualGrid.FilterDescriptors.Clear() prior to fetching the data from the store.
The filter text doesn't display in the filter row for the column where the filter was entered until I click in the text edit area.
How do I get rid of the text from the previous filter?
thanks,
Mike