When the cells are measured a NullReferenceException is thrown:
Telerik.Maui.Controls.DataGrid.DataGridTextCellArranger.PrepareTextPaintable(GridCellModel model, TextPaintable textPaintable)Provide an option to set explicit style to the grouping panel, for example expose GroupingPanelStyle property.
Currently, the option is using an implicit style targeting the DataGridGroupingPanel
<Style TargetType="telerik:DataGridGroupingPanel">
<Setter Property="BackgroundColor" Value="Red"/>
<Setter Property="HeaderText" Value="Hello to group"/>
<Setter Property="CornerRadius" Value="10"/>
<Setter Property="BorderThickness" Value="2"/>
<Setter Property="BorderColor" Value="Blue"/>
</Style>
I received the following stack traces when using aggregates and
Exception Message:
Object reference not set to an instance of an object
Exception Stack:
at Telerik.Maui.Data.ParallelDataEngine.Telerik.Maui.Data.IDataEngine.RebuildAggregatesForItem(Object item, String propertyName)
at Telerik.Maui.Data.LocalDataSourceProvider.ProcessPropertyChangedOverride(Object sender, PropertyChangedEventArgs args)
at Telerik.Maui.Data.LocalDataSourceProvider.DataView_ItemPropertyChanged(Object sender, PropertyChangedEventArgs e)
at Telerik.Maui.Data.EnumerableDataSourceView.Telerik.Maui.IWeakEventListener.ReceiveEvent(Object sender, Object args)
at Fmr.Sirius.ComponentModel.ObservableObject.FirePropertyChanged(IEnumerable`1 propertyChanges)
at System.Reactive.AnonymousSafeObserver`1.OnNext(T value)
at System.Reactive.Concurrency.AsyncLock.Wait(Object state, Delegate delegate, Action`2 action)
at System.Threading.ExecutionContext.RunFromThreadPoolDispatchLoop(Thread threadPoolThread, ExecutionContext executionContext, ContextCallback callback, Object state)
--- End of stack trace from previous location ---
at System.Threading.ExecutionContext.RunFromThreadPoolDispatchLoop(Thread threadPoolThread, ExecutionContext executionContext, ContextCallback callback, Object state)
at System.Threading.TimerQueueTimer.System.Threading.IThreadPoolWorkItem.Execute()
at System.Threading.ThreadPoolWorkQueue.Dispatch()
at System.Threading.PortableThreadPool.WorkerThread.WorkerThreadStart()
at System.Threading.Thread.StartCallback()
Exception.Stack 2:
at Telerik.Maui.Data.ParallelDataEngine.Telerik.Maui.Data.IDataEngine.RebuildAggregatesForItem(Object item, String propertyName)
at Telerik.Maui.Data.LocalDataSourceProvider.ProcessPropertyChangedOverride(Object sender, PropertyChangedEventArgs args)
at Telerik.Maui.Data.LocalDataSourceProvider.DataView_ItemPropertyChanged(Object sender, PropertyChangedEventArgs e)
at Telerik.Maui.Data.EnumerableDataSourceView.Telerik.Maui.IWeakEventListener.ReceiveEvent(Object sender, Object args)
at Fmr.Sirius.ComponentModel.ObservableObject.FirePropertyChanged(IEnumerable`1 propertyChanges)
at System.Reactive.AnonymousSafeObserver`1.OnNext(T value)
at System.Reactive.Linq.ObservableImpl.Sample`1._.Tick()
at System.Reactive.Concurrency.DefaultScheduler.PeriodicallyScheduledWorkItem`1.<>c.<Tick>b__5_0(PeriodicallyScheduledWorkItem`1 closureWorkItem)
at System.Reactive.Concurrency.AsyncLock.Wait(Object state, Delegate delegate, Action`2 action)
at System.Threading.ExecutionContext.RunFromThreadPoolDispatchLoop(Thread threadPoolThread, ExecutionContext executionContext, ContextCallback callback, Object state)
--- End of stack trace from previous location ---
at System.Threading.ExecutionContext.RunFromThreadPoolDispatchLoop(Thread threadPoolThread, ExecutionContext executionContext, ContextCallback callback, Object state)
at System.Threading.TimerQueueTimer.System.Threading.IThreadPoolWorkItem.Execute()
at System.Threading.ThreadPoolWorkQueue.Dispatch()
at System.Threading.PortableThreadPool.WorkerThread.WorkerThreadStart()
at System.Threading.Thread.StartCallback()
Having this setup:
<telerikDataGrid:DataGridTemplateColumn HeaderText="Age"
CanUserSort="True">
<telerikDataGrid:DataGridTemplateColumn.CellContentTemplate>
<DataTemplate>
<Label Text="{Binding Age}" />
</DataTemplate>
</telerikDataGrid:DataGridTemplateColumn.CellContentTemplate>
<telerikDataGrid:DataGridTemplateColumn.SortDescriptor>
<telerikCommon:PropertySortDescriptor PropertyName="Age" SortOrder="Descending" />
</telerikDataGrid:DataGridTemplateColumn.SortDescriptor>
</telerikDataGrid:DataGridTemplateColumn>
When applying SortDescriptor to the Template column, the column is not initially sorted.
I have been trying to get the DataGrid to work with Maui.Markup and I'm not finding a way to add a DataGrid to my View.
I would have expected I could add a DataGrid to the Children of Grid...but I'm not finding the right cast to allow that to happen, Grid.Children is expecting an IView.
Is this possible and I'm just missing something simple? Thanks!
I am using NavigationPages and Dependency Injection (for the Pages and ViewModels) to navigate (not AppShell).
<Grid RowDefinitions="*,100">
<telerik:RadDataGrid x:Name="grdRegisters"
RowHeight="50"
Style="{StaticResource ReadOnlyGridStyle}"
ItemsSource="{Binding Registers}"
SelectionStyle="{StaticResource SelectedRowBackgroundStyle}"
RowBackgroundStyle="{StaticResource RowBackgroundStyle}"
AlternateRowBackgroundStyle="{StaticResource AltRowBackgroundStyle}"
SelectedItem="{Binding SelectedRegister, Mode=TwoWay}">
<telerik:RadDataGrid.Columns>
<telerik:DataGridTemplateColumn HeaderText=""
SizeMode="Fixed"
Width="50">
<telerik:DataGridTemplateColumn.CellContentTemplate>
<DataTemplate x:DataType="RegisterModel">
<Label FontFamily="FASolid"
HorizontalOptions="Center"
VerticalOptions="Center"
Text=""
IsVisible="{Binding IsCurrentRegister, Mode=OneTime}"/>
</DataTemplate>
</telerik:DataGridTemplateColumn.CellContentTemplate>
</telerik:DataGridTemplateColumn>
<telerik:DataGridTemplateColumn HeaderText="Shift Date">
<telerik:DataGridTemplateColumn.CellContentTemplate>
<DataTemplate x:DataType="RegisterModel">
<Label Style="{StaticResource GridCellLabelStyle}"
Text="{Binding Date, Converter={StaticResource ToLocalTimeConverter}, StringFormat='{}{0:d}'}"/>
</DataTemplate>
</telerik:DataGridTemplateColumn.CellContentTemplate>
</telerik:DataGridTemplateColumn>
<telerik:DataGridTemplateColumn HeaderText="Shift Name">
<telerik:DataGridTemplateColumn.CellContentTemplate>
<DataTemplate x:DataType="RegisterModel">
<Label Style="{StaticResource GridCellLabelStyle}"
Text="{Binding Shift.Name}"/>
</DataTemplate>
</telerik:DataGridTemplateColumn.CellContentTemplate>
</telerik:DataGridTemplateColumn>
<telerik:DataGridTemplateColumn HeaderText="Start Time">
<telerik:DataGridTemplateColumn.CellContentTemplate>
<DataTemplate x:DataType="RegisterModel">
<Label Style="{StaticResource GridCellLabelStyle}"
Text="{Binding StartTime, Converter={StaticResource ToLocalTimeConverter}, StringFormat='{}{0:t}'}"/>
</DataTemplate>
</telerik:DataGridTemplateColumn.CellContentTemplate>
</telerik:DataGridTemplateColumn>
<telerik:DataGridTemplateColumn HeaderText="End Time">
<telerik:DataGridTemplateColumn.CellContentTemplate>
<DataTemplate x:DataType="RegisterModel">
<Label Style="{StaticResource GridCellLabelStyle}"
Text="{Binding EndTime, Converter={StaticResource ToLocalTimeConverter}, StringFormat='{}{0:t}'}"/>
</DataTemplate>
</telerik:DataGridTemplateColumn.CellContentTemplate>
</telerik:DataGridTemplateColumn>
</telerik:RadDataGrid.Columns>
</telerik:RadDataGrid>
<HorizontalStackLayout Grid.Row="1">
<Button Text="Resume"
IsEnabled="{Binding SelectedRegister, Converter={StaticResource IsNotNullConverter}}"
Command="{Binding ResumeShiftCommand}"/>
<Button Text="Refresh"
Command="{Binding RefreshCommand}"/>
</HorizontalStackLayout>
</Grid>On initial Refresh, all items are visible in the DataGrid
I navigate forward and then back (PopToRoot), the DataGrid appears empty, although the vertical scroll appears like there are items.
If I tap Refresh, items become visible, but only above the first fold.
If i resize the window vertically, items will appear and disappear depending on the height of the window. (see attached video)
Header Text, group header text, do not display some languages characters like Chinese, Thai, etc.
The root reason for this is the fact that the Skia APIs used to draw the text does not support automatic character fallback.
Workaround:
for header text:
<telerik:DataGridTextColumn.HeaderContentTemplate>
<DataTemplate>
<Label Text="your text"></Label>
</DataTemplate>
</telerik:DataGridTextColumn.HeaderContentTemplate>group header text
<telerik:RadDataGrid.GroupHeaderTemplate>
<DataTemplate>
<Label Text="{Binding Group.Key}"/>
</DataTemplate>
</telerik:RadDataGrid.GroupHeaderTemplate>column:
<telerik:DataGridTextColumn HeaderText="Name" >
<telerik:DataGridTextColumn.CellContentTemplate>
<DataTemplate>
<Label Text="{Binding Name}"/>
</DataTemplate>
</telerik:DataGridTextColumn.CellContentTemplate>
</telerik:DataGridTextColumn>
When the selected item is set initially, the selected style is not applied to the row/cell.
Workaround: You can use a Dispatcher to workaround the issue, code looks as follows:
this.Dispatcher.StartTimer(TimeSpan.FromMilliseconds(200), () =>
{
if (dataGrid.SelectedItem == null)
{
dataGrid.SelectItem(viewModel.PersonCollection.First());
}
return false;
});
When a Picker is used in a CellEditTemplate, and when in edit mode, when I click on the arrow of the Picker - the picker does not open. It only opens of I click the text in the Picker.
<DataTemplate x:Key="template1">
<Picker ItemsSource="{Binding Item.Categories}" />
</DataTemplate>
<telerik:RadDataGrid x:Name="dataGrid"
AutoGenerateColumns="False">
<telerik:RadDataGrid.Columns>
<telerik:DataGridTextColumn PropertyName="Name" />
<telerik:DataGridTextColumn PropertyName="Category" CellEditTemplate="{StaticResource template1}" />
</telerik:RadDataGrid.Columns>
</telerik:RadDataGrid>
A work-around is to not use a Picker, but use a RadComboBox.
TapGestureRecognizer not working correctly when tapping inside the DataGrid control on iOS and MacCatalyst platforms.
Workaround:
You could use CellTap or CellDoubleTap commands of the DataGrid control. Here are the links to our documentation articles: DataGrid Commands and DataGrid CellTap Command.
Provide a style property for the text in grouping panel. Currently you can style the border, background color and change the header text of the panel. For example:
<Style TargetType="telerik:DataGridGroupingPanel">
<Setter Property="BackgroundColor" Value="Red"/>
<Setter Property="HeaderText" Value="Hello to group"/>
<Setter Property="CornerRadius" Value="10"/>
<Setter Property="BorderThickness" Value="2"/>
<Setter Property="BorderColor" Value="Blue"/>
</Style>