Dear Telerik Support Team,
I am encountering an issue with the RadGridView control in my application, which is impacting the usability for users relying on screen readers. Below, I have outlined the details of my development environment, the problem, and attached a sample project demonstrating the issue.
Issue Description:
In the attached sample project, I have implemented a simple RadGridView without any custom styling and populated it with sample data. I have observed that the focus behavior is inconsistent, particularly with the first cell in the RadGridView. When attempting to focus the first cell, only the cell itself receives focus, unlike subsequent cells where both the cell and the entire row are focused. This inconsistency results in screen readers failing to read out the content of the first cell, while they correctly read the contents of all other cells.
Upon further investigation using the Snoop utility to explore the visual tree, I noticed that the GotFocused event for the initially focused cell identifies it as being of type RadGridView, whereas, for other cells, the type is GridViewCell. This discrepancy seems to be at the root of the issue.
Attachments:
I have included a simplified, runnable standalone application that reproduces this behavior. Please find the sample project attached to this ticket.
I believe this might be a bug affecting the accessibility of the application, and I would greatly appreciate your guidance on whether this is a known issue with a workaround or if there's a fix available.
Thank you for your assistance.
Best regards,
Christian
First Tab:
Second Tab:
When selecting a Cell using the Mouse, the BorderColor is different to when navigating via ArrowKeys.
Also it seems that the Property IsSynchronizedWithCurrentItem does not work correctly when using ArrowKeys.
The issue with the Color can be observed in the Demo
Hello,
I believe that I have found a bug with the delete keyboard functionality using the delete key. Below are the steps to reproduce:
Note that if the user selects a new row and then selects the previous row the delete works.
Demo to illustrate is in SDK sample browser.
Grid View Examples - Custom Keyboard Command Provider
Please let me know if you need any additional information.
Thank you.
I am using a RadGridView to display appointments. I am adding paging to the control with RadDataPager. I am setting the ItemSource property for the RadGridView to {Binding Path=PagedSource, ElementName=unscheduledWorkOrdersRadDataPager }. I am then overriding the ConvertDraggedData(object data) method and using the DataObjectHelper class in order to obtain data from the object data parameter and then setting the returned IEnumerable<IOccurence> accordingly.
The problem is that whenever I added paging to the RadGridView. The DataObjectHelper is not able to properly retrieve the dragged data from the object data parameter.
Hi guys,
we have a messaging service that broadcasts a couple of messages every 1-5 seconds.
When our client module receives those messages, we want to append them at the bottom of a grid (RadGridView).
After appending them, we also want to scroll to the very bottom of that grid, so that the newest and therefore bottommost items come into view.
Documentation and forums suggest we go the AttachedBahaviour and ScrollIntoViewAsync way.
Our behaviour looks like this:
public class ScrollToNewItemBehavior : Behavior<RadGridView>
{
public static bool GetIsEnabled(DependencyObject obj) => (bool)obj.GetValue(IsEnabledProperty);
public static void SetIsEnabled(DependencyObject obj, bool value) => obj.SetValue(IsEnabledProperty, value);
public static readonly DependencyProperty IsEnabledProperty = DependencyProperty.RegisterAttached("IsEnabled", typeof(bool), typeof(ScrollToNewItemBehavior), new PropertyMetadata(false, OnIsEnabledChanged));
private static void OnIsEnabledChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)
{
if (d is RadGridView gridView)
gridView.Items.CollectionChanged += (s, args) =>
{
if (args.Action == NotifyCollectionChangedAction.Add)
{
gridView.ScrollIntoViewAsync(args.NewItems[0], gridView.Columns[0], null);
// exchanging args.NewItems[0] for gridView.Items[gridView.Items.Count-1] yields same result
//gridView.ScrollIntoViewAsync(gridView.Items[gridView.Items.Count-1], gridView.Columns[0], null);
}
};
}
}
Our Message class:
public class Message : ModelBase<Message>
{
public string Text { get; set; }
}
Our Messages collection in the ViewModel:
private RadObservableCollection<Message> _messages;
public RadObservableCollection<Message> Messages
{
get => _messages;
set
{
_messages = value;
NotifyPropertyChanged(m => m.Messages);
}
}
The collection is updated (in the ViewModel) like this:
Task.Run(async () =>
{
for (int i = 0; ; i++)
{
await Task.Delay(1000);
Messages.Add(new Message { Text = $"{i} - sftrvwj,erhvtwejhrfvtjlwehftrwejh" });
}
});
The grid is defined like this:
<telerik:RadGridView
x:Name="gridView"
ItemsSource="{Binding Messages, Mode=OneWay}"
IsSynchronizedWithCurrentItem="False"
IsPropertyChangedAggregationEnabled="True"
AutoGenerateColumns="False"
SelectionMode="Single"
CanUserFreezeColumns="False"
EnableColumnVirtualization="True"
EnableRowVirtualization="True"
CanUserDeleteRows="False"
CanUserInsertRows="False"
behaviours:ScrollToNewItemBehavior.IsEnabled="True"
CanUserGroupColumns="False"
IsReadOnly="True"
IsManipulationEnabled="False"
CanUserReorderColumns="False"
CanUserSearch="False"
ShowGroupPanel="False">
<telerik:RadGridView.Columns>
<telerik:GridViewDataColumn
DataMemberBinding="{Binding Text}"
Header="Text"
ShowDistinctFilters="False"
IsSortable="False"/>
</telerik:RadGridView.Columns>
</telerik:RadGridView>
Nothing too fancy.
What we observe:
When a message is added, the view and the scroll indicator randomly jump to the top or the bottom of the grid and stay there until the next message is added.
We tried AddRange, Suspend-/ResumeNotifications, ObservableCollection instead of RadObservableCollection.
We disabled many grid features.
We tried .NetCore
,
we tried .net Framework
To no avail.
This seems to be a bug.
Do you know any workarounds or a completely different approach to achieve the desired behaviour?
Side note:
When we set GroupRenderingMode to Flat,
GroupRenderMode="Flat"
the view stays at the bottom. The scroll indicator stays at the bottom as well, but once in a while jumps a little bit up, as if by one row, and down to the bottom again without the view changing.
At one time disabling filtering on all columns seemd to work... but later didn't.
Thanks in advance
Thorsten
The search box TextBox element used with the search-as-you-type feature is not focused when you press the Tab key. This happens because the search box is excluded from the tab order (IsTabStop=False).
Use the ChildrenOfType extension method to get the TextBox element and set its IsTabStop to True.
private void gridView_Loaded(object sender, RoutedEventArgs e)
{
var searchBox = this.gridView.ChildrenOfType<TextBox>().FirstOrDefault(x => x.Name == "PART_SearchAsYouTypeTextBox");
searchBox.IsTabStop = true;
}
Hi Telerik-Team,
When creating a new item in the GridView by either mouse or insert button the row is not selected or highlighted.
I guess this is a bug, since a cell in the new row has focus but not the row.
Best regards,
Mats
The performance of the RadGridView scrolling diminishes significantly when the grid has thousands of rows and alternating row styles are used. This causes scrolling to be virtually unusable. I note this is a known limitation of the RadGridView from information from https://docs.telerik.com/devtools/wpf/controls/radgridview/troubleshooting/performance We have had to remove the alternating row styles from our current product while porting to the RadGridView. I am requesting if this issue is going to be fixed in the future anytime soon.
When RadGridView is bound to a ListCollectionView and the SortDescriptions are set, columns with a SortMemberPath different from the DataMemberBinding don't display the sort indicator in the column header. In the attached example the "Status" and "ETA" columns are sorted. "Status" header does not display the indicator due to the SortMemberPath being different from the DataMemberBinding.
The reason for declining the item is that a possible fix for this behavior would practically interfere with the virtualization mechanism of the control. Shortly said, when the columns have their width initially set, RadGridView is aware of the column with the biggest size and performs its calculations based on it. When their size is changed on loading, the control cannot be aware of the size of a column that is not present in the viewport thus, the reported issue is observed. In order this behavior to be modified so, the engine needs to measure an element that is not yet loaded. We cannot commit ourselves to implementing this, as this would affect the virtualization of RadGridView. A possible workaround would be to avoid setting the Width of the columns initially in XAML.
Edit: We are declining this bug as originally the export options were not meant to respect group properties but only some global GridView properties. However we will add such option in GridViewDocumentExportOptions class. You can follow this feature request => https://feedback.telerik.com/Project/143/Feedback/Details/229211-gridview-add-option-in-gridviewdocumentexportoptions-to-include-exclude-grouph
I have a RadGridView and bind its ItemsSource and its SelectedItem to properties of the ViewModel (DataContext). When the ViewModel is created, the property bound to ItemsSource is filled and the property bound to SelectedItem is set to one of the items in the collection. However, when the GridView is displayed, the property is first set to null and then set to the first item in the collection. I assume that the binding of the SelectedItem is evaluated before the binding of the ItemsSource, so the grid is empty and the desired item can't be selected. Is there any way to influence the order, in which the binding are evaluated? Or is there any other way to avoid that the SelectedItem is changed? A similar issue is described here: http://www.telerik.com/forums/selecteditem-binding-issue Unfortunately, I couldn't to find the support ticket mentioned in this thread.
When we make frozen column width bigger than the window will hide other columns. Scrolling is applied only to not frozen columns. So we can't scroll to see other columns. A possible workaround is to set MaxWidth property of the column.
Add a TextAlignment property to the GridView's AggregateFunctions to set the alignment of the resulting text. Apply to both Caption and FormattedValue simultaneously. This way we won't have to make custom ItemTemplates for the AggregateResultsList in each footer, when using AggregateFunctions out-of-the-box.