Hi Team,
I have a problem with Telerik RadGridView 2015.1.225.40 version on Windows 7 64 bits. In my application I show a virtualized grid with a large number of columns (up to 45 although the user can select the columns to see). Data types are showing dates, text, images, combos, etc. The number of rows can vary but usually not more than 40.
The columns are created dynamically in the ViewModel. Depending on the type of data to show, a different type of column is used. To show simple data is used GridViewDataColumn but to show more specific data (e.g. dates) types of custom columns are used. An example is:
var colduracion =
new
RadTimePickerColumn();
colduracion.Width = tamano;
colduracion.MinWidth = 40.0;
colduracion.UniqueName = col.Columna.Id.ToString();
colduracion.Header =
" "
+ col.Nombre +
" "
;
if
(binding.Path.Path !=
string
.Empty)
{
colduracion.DataMemberBinding = binding;
}
colduracion.IsFilterable =
true
;
colduracion.IsSortable =
true
;
colduracion.IsReadOnly = !col.Columna.Editable;
if
(col.Columna.Orden == 0)
{
colduracion.IsVisible =
false
;
}
this
.grid.Columns.Add(colduracion);
The RadTimePickerColumn type is declared as follows:
internal
class
RadTimePickerColumn : GridViewBoundColumnBase
{
#region Fields
/// <summary>
/// Campo que controla lo que se pinta.
/// </summary>
private
MediaTextBox mediaTextBox =
null
;
/// <summary>
/// Campo que controla lo que se pinta en modo de edición.
/// </summary>
private
MediaTextBox mediaTextBoxEdit =
null
;
#endregion
#region Methods
/// <summary>
/// Crea el cóntenido de la celda en modo solo lectura.
/// </summary>
/// <param name="cell">Celda de la que se crea el contentido.</param>
/// <param name="dataItem">Origen de datos.</param>
/// <returns>Contenido de la celda,</returns>
public
override
FrameworkElement CreateCellElement(GridViewCell cell,
object
dataItem)
{
this
.mediaTextBox =
this
.CreateElement(dataItem);
return
this
.mediaTextBox;
}
/// <summary>
/// Get New Value From Editor
/// </summary>
/// <param name="editor"> editor Element</param>
/// <returns>object Element re</returns>
public
override
object
GetNewValueFromEditor(
object
editor)
{
var mts = editor
as
MediaTextBox;
if
(mts !=
null
)
{
return
mts.Time;
}
else
{
return
null
;
}
}
/// <summary>
/// Update Source With Editor Value
/// </summary>
/// <param name="gridViewCell"> editor Element</param>
/// <returns>object Element re</returns>
public
override
IList<
string
> UpdateSourceWithEditorValue(GridViewCell gridViewCell)
{
List<
string
> errors =
new
List<
string
>();
var editor = gridViewCell.GetEditingElement()
as
MediaTextBox;
var bindingExpression = editor.ReadLocalValue(MediaTextBox.TimeProperty)
as
BindingExpressionBase;
if
(bindingExpression !=
null
)
{
bindingExpression.UpdateSource();
errors.AddRange(Validation.GetErrors(editor).Select(d => d.ErrorContent.ToString()).ToList());
}
return
errors;
}
/// <summary>
/// Create Cell Edit Element
/// </summary>
/// <param name="cell"> Cell Edit Element</param>
/// <param name="dataItem">data Item</param>
/// <returns>Framework Element</returns>
public
override
FrameworkElement CreateCellEditElement(GridViewCell cell,
object
dataItem)
{
this
.mediaTextBoxEdit =
this
.CreateElement(dataItem);
this
.mediaTextBoxEdit.IsReadOnly =
false
;
return
this
.mediaTextBoxEdit;
}
/// <summary>
/// Crea el control para pintar la celda.
/// </summary>
/// <param name="dataItem">Origen de datis.</param>
/// <returns>Control utilizado para pintar el valor.</returns>
private
MediaTextBox CreateElement(
object
dataItem)
{
var mediaTextBox =
new
MediaTextBox
{
AutoValidateTime =
true
,
FractionAdjust = FractionAdjust.Truncate,
FractionSeparator =
'.'
,
Fps = 25,
IsReadOnly =
true
,
Height = 20,
TimeFormat = MediaTimeSpanStringFormat.HHmmssff,
Width = 100
};
if
(dataItem
is
Dto.MediaUIDto)
{
mediaTextBox.SetBinding(MediaTextBox.FpsProperty,
"Fps"
);
}
var binding =
new
Binding(
this
.DataMemberBinding.Path.Path);
binding.Mode = BindingMode.TwoWay;
binding.UpdateSourceTrigger = UpdateSourceTrigger.Explicit;
mediaTextBox.SetBinding(MediaTextBox.TimeProperty, binding);
return
mediaTextBox;
}
// CreateElement
#endregion
}
RadGridView creation is performed as follows. Caliburn.Micro version 1.5.2 is used:
<
telerik:RadGridView
x:Name
=
"GridFilasGrid"
Margin
=
"-2,48,0,48"
AlternationCount
=
"2"
AutoGenerateColumns
=
"False"
CanUserDeleteRows
=
"False"
CanUserFreezeColumns
=
"True"
CanUserInsertRows
=
"False"
EnableColumnVirtualization
=
"True"
EnableRowVirtualization
=
"False"
FocusVisualStyle
=
"{x:Null}"
GridLinesVisibility
=
"Both"
IsReadOnly
=
"True"
ItemsSource="{Binding FilasGrid,
Mode
=
TwoWay
,
NotifyOnSourceUpdated
=
True
}"
ScrollMode
=
"Deferred"
RowIndicatorVisibility
=
"Collapsed"
SelectedItem="{Binding
Path
=
FilaSeleccionada
,
Mode
=
TwoWay
}"
SelectionMode
=
"Single"
ShowGroupPanel
=
"False"
Style
=
"{DynamicResource EstiloRejillaDatos}"
VirtualizingPanel.CacheLength
=
"5"
VirtualizingPanel.CacheLengthUnit
=
"Item"
VirtualizingPanel.ScrollUnit
=
"Item"
VirtualizingPanel.VirtualizationMode
=
"Recycling"
Visibility
=
"Visible"
cal:Action.TargetWithoutContext="{Binding DataContext,
ElementName
=
LayoutRoot
}"
cal:Message.Attach="[Event Loaded] = [Action GridResultadoLoaded ($source, $eventargs)];
[Event MouseRightButtonUp] = [Action OnMouseRightButtonUp ($source, $eventargs)];
[Event MouseDown] = [Action OnMouseDown ($source, $eventargs)];
[Event MouseUp] = [Action OnMouseUp ($source, $eventargs)];
[Event CellValidating] = [Action OnCellValidating ($source, $eventargs)];
[Event CellValidated] = [Action OnCellValidated ($source, $eventargs)];
[Event BeginningEdit] = [Action OnBeginningEdit ($source, $eventargs)];
[Event ColumnReordered] = [Action OnColumnReordered ($source, $eventargs)];
[Event SelectionChanged] = [Action OnSelectionChanged ($source, $eventargs)]">
<
telerik:RadRadialMenu.RadialContextMenu
>
<
telerik:RadRadialMenu
x:Name
=
"RadContextMenu"
ItemsSource
=
"{Binding RadialMenuItems}"
StaysOpenOnShow
=
"True"
PopupPlacement
=
"MousePoint"
IsOpen
=
"True"
OuterRadiusFactor
=
"1"
Height
=
"300"
Width
=
"300"
>
<
telerik:RadRadialMenu.Resources
>
<
Style
TargetType
=
"telerik:NavigationItemButton"
>
<
Setter
Property
=
"Foreground"
Value
=
"White"
/>
<
Setter
Property
=
"Background"
Value
=
"DarkOrange"
/>
</
Style
>
<
Style
TargetType
=
"telerik:VisualStatesItemPresenter"
>
<
Setter
Property
=
"Background"
Value
=
"DarkOrange"
/>
<
Setter
Property
=
"ThicknessFactor"
Value
=
"0.2"
/>
<
Setter
Property
=
"ArrowThicknessFactor"
Value
=
"0.3"
/>
</
Style
>
<
Style
TargetType
=
"telerik:RadRadialMenuItem"
>
<
Setter
Property
=
"FontSize"
Value
=
"10"
/>
<
Setter
Property
=
"FontFamily"
Value
=
"Tahoma"
/>
</
Style
>
</
telerik:RadRadialMenu.Resources
>
</
telerik:RadRadialMenu
>
</
telerik:RadRadialMenu.RadialContextMenu
>
</
telerik:RadGridView
>
The problem is when, in some cases seemingly random, moving the horizontal or vertical movement the application is apparently locked (frozen). But if not completely so that is almost unmanageable. CPU consumption of the process is triggered by 3% to 25% normal use. One solution is to close the tab where the grid is contained and reopen.
What could be happening?