To reproduce: populate RadGridView with data and use the following code snippet:
Me.RadGridView1.TableElement.TableHeaderHeight = 60
RadGridView1.PrintPreview()
Workaround:
Private Sub RadButton1_Click(sender As Object, e As EventArgs) Handles RadButton1.Click
Me.RadGridView1.TableElement.TableHeaderHeight = 60
Dim printStyle As GridPrintStyle = New GridPrintStyle(RadGridView1)
Dim renderer As CustomTableViewDefinitionPrintRenderer = New CustomTableViewDefinitionPrintRenderer(RadGridView1)
printStyle.PrintRenderer = renderer
RadGridView1.PrintStyle = printStyle
RadGridView1.PrintPreview()
End Sub
Public Class CustomTableViewDefinitionPrintRenderer
Inherits TableViewDefinitionPrintRenderer
Public Sub New(grid As RadGridView)
MyBase.New(grid)
End Sub
Private Function GetRowLayout(row As GridViewRowInfo, fitWidthMode As PrintFitWidthMode, _
hierarchyIndent As Integer, drawArea As Rectangle) As TableViewRowLayout
Dim hashKey As Integer = row.ViewTemplate.GetHashCode() + row.HierarchyLevel
Dim fi As FieldInfo = GetType(TableViewDefinitionPrintRenderer).GetField("rowLayouts", BindingFlags.NonPublic Or BindingFlags.Instance)
Dim rowLayouts As Dictionary(Of Integer, TableViewRowLayout) = fi.GetValue(Me)
If rowLayouts.ContainsKey(hashKey) Then
Return rowLayouts(hashKey)
End If
Dim table As GridTableElement = TryCast(row.ViewTemplate.ViewDefinition.CreateViewUIElement(row.ViewInfo), GridTableElement)
table.Initialize(Me.GridView.GridViewElement, row.ViewInfo)
table.RowHeight = Me.GridView.TableElement.RowHeight
table.TableHeaderHeight = Me.GridView.TableElement.TableHeaderHeight
Me.GridView.ElementTree.ApplyThemeToElement(table)
Dim rowLayout As New TableViewRowLayout()
rowLayout.Context = GridLayoutContext.Printer
rowLayout.Initialize(table)
Dim systemWidth As Integer = 0
For Each c As GridViewColumn In rowLayout.RenderColumns
If TypeOf c Is GridViewRowHeaderColumn OrElse TypeOf c Is GridViewIndentColumn Then
systemWidth += rowLayout.GetColumnWidth(c)
End If
Next
Me.GridView.BeginUpdate()
Dim mode As GridViewAutoSizeColumnsMode = rowLayout.ViewTemplate.AutoSizeColumnsMode
If fitWidthMode = PrintFitWidthMode.FitPageWidth Then
Dim state As ColumnsState = Me.SaveColumnsState(rowLayout.ViewTemplate)
rowLayout.ViewTemplate.AutoSizeColumnsMode = GridViewAutoSizeColumnsMode.Fill
Dim groupLevel As Integer = If(row.Group IsNot Nothing, row.Group.Level + 1, 0)
rowLayout.MeasureRow(New SizeF(drawArea.Width + systemWidth - ((row.HierarchyLevel - groupLevel) * hierarchyIndent), drawArea.Height))
Me.RestoreColumnsState(state)
Else
rowLayout.ViewTemplate.AutoSizeColumnsMode = GridViewAutoSizeColumnsMode.None
rowLayout.MeasureRow(New SizeF(Me.GridView.Width, Me.GridView.Height))
End If
rowLayout.ViewTemplate.AutoSizeColumnsMode = mode
Me.GridView.EndUpdate(False)
rowLayouts.Add(hashKey, rowLayout)
Return rowLayout
End Function
Public Overrides Sub DrawPage(traverser As PrintGridTraverser, drawArea As Rectangle, _
graphics As Graphics, settings As GridPrintSettings, pageNumber As Integer)
Dim fi As FieldInfo = GetType(TableViewDefinitionPrintRenderer).GetField("currentPage", BindingFlags.Instance Or BindingFlags.NonPublic)
Dim currentPage As Integer = fi.GetValue(Me)
Dim skipPage As Boolean = currentPage <> pageNumber
Dim drawAreaHeight As Integer = drawArea.Height
Dim currentX As Integer = drawArea.X
Dim currentY As Integer = drawArea.Y
Dim rowLayout As TableViewRowLayout = Me.GetRowLayout(Me.GridView.MasterView.TableHeaderRow, _
settings.FitWidthMode, settings.HierarchyIndent, drawArea)
rowLayout.IgnoreColumnVisibility = settings.PrintHiddenColumns
Dim systemWidth As Integer = 0
For Each c As GridViewColumn In rowLayout.RenderColumns
If TypeOf c Is GridViewRowHeaderColumn OrElse TypeOf c Is GridViewIndentColumn Then
systemWidth += rowLayout.GetColumnWidth(c)
End If
Next
Dim rowWidth As Integer = CInt(rowLayout.DesiredSize.Width) - systemWidth
If settings.FitWidthMode = PrintFitWidthMode.NoFitCentered Then
currentX += ((drawArea.Width - rowWidth) / 2)
End If
Dim fi2 As FieldInfo = GetType(TableViewDefinitionPrintRenderer).GetField("firstPage", _
BindingFlags.Instance Or BindingFlags.NonPublic)
Dim firstPage As Integer = fi2.GetValue(Me)
If ((Me.GridView.ShowColumnHeaders AndAlso (firstPage AndAlso pageNumber = 1)) OrElse settings.PrintHeaderOnEachPage) _
AndAlso Not settings.PrintHierarchy Then
Me.PrintRow(Me.GridView.MasterView.TableHeaderRow, rowLayout, settings, currentX, currentY, graphics, _
drawArea)
Dim rowHeight As Integer = Me.GetDataRowHeight(Me.GridView.MasterView.TableHeaderRow, rowLayout) + Me.GridView.TableElement.RowSpacing
currentY += rowHeight
drawAreaHeight -= rowHeight
End If
fi2.SetValue(Me, False)
Dim skipPageCurrentY As Integer = currentY
Dim row As GridViewRowInfo = Nothing
If Me.PrintPages.Count > 0 AndAlso Not settings.PrintHierarchy Then
row = traverser.Current
End If
Dim firstRow As Boolean = True
While traverser.MoveNext()
If Not (TypeOf traverser.Current Is GridViewDataRowInfo OrElse TypeOf traverser.Current Is GridViewGroupRowInfo OrElse _
TypeOf traverser.Current Is GridViewSummaryRowInfo OrElse (TypeOf traverser.Current Is GridViewTableHeaderRowInfo _
AndAlso settings.PrintHierarchy)) Then
Continue While
End If
Dim hierarchyRow As GridViewHierarchyRowInfo = TryCast(traverser.Current, GridViewHierarchyRowInfo)
If hierarchyRow IsNot Nothing AndAlso hierarchyRow.Views.Count > 0 Then
Select Case settings.ChildViewPrintMode
Case ChildViewPrintMode.PrintFirstView
hierarchyRow.ActiveView = hierarchyRow.Views(0)
Exit Select
Case ChildViewPrintMode.PrintCurrentlyActiveView
'Do nothing the view is already selected
Exit Select
Case ChildViewPrintMode.SelectViewToPrint
Dim e As New ChildViewPrintingEventArgs(hierarchyRow.Views.IndexOf(hierarchyRow.ActiveView), hierarchyRow)
Me.OnChildViewPrinting(e)
hierarchyRow.ActiveView = hierarchyRow.Views(e.ActiveViewIndex)
Exit Select
End Select
End If
rowLayout = Me.GetRowLayout(traverser.Current, settings.FitWidthMode, settings.HierarchyIndent, drawArea)
Dim rowHeight As Integer = 0
If TypeOf traverser.Current Is GridViewGroupRowInfo Then
rowHeight = Me.GetRowSize(traverser.Current, rowLayout).Height
Else
rowHeight = Me.GetDataRowHeight(traverser.Current, rowLayout)
End If
If (currentY + rowHeight >= drawArea.Bottom OrElse skipPageCurrentY + rowHeight >= drawArea.Bottom) AndAlso Not firstRow Then
traverser.MovePrevious()
skipPageCurrentY = currentY
skipPage = currentPage <> pageNumber
fi.SetValue(Me, currentPage + 1)
If skipPage Then
Continue While
Else
Exit While
End If
End If
If TypeOf traverser.Current Is GridViewGroupRowInfo Then
If settings.PrintGrouping Then
If currentPage = pageNumber Then
Me.PrintRowWideCell(traverser.Current, rowLayout, settings, currentX, currentY, graphics)
currentY += rowHeight + Me.GridView.TableElement.RowSpacing
Else
skipPageCurrentY += rowHeight + Me.GridView.TableElement.RowSpacing
End If
End If
Else
If TypeOf traverser.Current Is GridViewSummaryRowInfo AndAlso Not settings.PrintSummaries Then
Continue While
End If
If currentPage = pageNumber Then
Me.PrintRow(traverser.Current, rowLayout, settings, currentX, currentY, graphics, _
drawArea)
currentY += rowHeight + Me.GridView.TableElement.RowSpacing
Else
skipPageCurrentY += rowHeight + Me.GridView.TableElement.RowSpacing
End If
End If
If drawAreaHeight < rowHeight AndAlso firstRow Then
fi.SetValue(Me, currentPage + 1)
Exit While
End If
firstRow = False
End While
If Me.PrintPages.Count > 0 AndAlso Not settings.PrintHierarchy Then
If currentY + Me.GetDataRowHeight(traverser.Current, rowLayout) < drawArea.Bottom OrElse _
skipPageCurrentY + Me.GetDataRowHeight(traverser.Current, rowLayout) < drawArea.Bottom Then
fi.SetValue(Me, currentPage + 1)
End If
Me.CurrentPrintPage += 1
Me.CurrentPrintPage = Me.CurrentPrintPage Mod Me.PrintPages.Count
If Me.CurrentPrintPage > 0 Then
If row Is Nothing Then
traverser.Reset()
Else
traverser.GoToRow(row)
End If
End If
End If
End Sub
End Class
To reproduce:
1.Set the GridView template's ViewDefinition to ColumnGroups
2.Add a new column
3.Delete the column
4.Add another new column. The PropertyBuilder closes and it is not possible to open the Smart Tag of RadGridView anymore. Please refer to the attached gif file.
Workaround:
The issue is caused by a remaining reference to a deleted column. When using the RadGridView PropertyBuilder and a column is added to ColumnGroupsViewDefinition, once the column is deleted from RadGridView (via the Property Builder) the code for adding the column in the ColumnGroupsViewDefinition remains, and this causes further designer instability with the Property Builder.
To handle this scenario there are two options:
1. When a column is deleted via Property Builder, and this column was part of ColumnGroupsViewDefinition, open the Designer.cs/vb file, locate the line that adds this column to a ColumnNames collection and delete it. It should be something like:
gridViewColumnGroupRow3.ColumnNames.Add("column1"); - where "column1" is the name of the deleted column
2. Instead of using the Property Builder to build the ColumnGroupsViewDefinition, build it programmatically.
To reproduce:
public class CustomGridViewCheckBoxColumn : GridViewCheckBoxColumn
{
}
CustomGridViewCheckBoxColumn col = new CustomGridViewCheckBoxColumn();
this.radGridView1.Columns.Add(col);
this.radGridView1.EnableFiltering = true;
1. Click the filter button and select "Custom"
2. Close the dialog.
Workaround:
this.radGridView1.CreateCompositeFilterDialog += radGridView1_CreateCompositeFilterDialog;
private void radGridView1_CreateCompositeFilterDialog(object sender, GridViewCreateCompositeFilterDialogEventArgs e)
{
e.Dialog = new CustomCompositeFilterForm();
}
public class CustomCompositeFilterForm : CompositeFilterForm
{
public override void Initialize(GridViewDataColumn dataColumn, FilterDescriptor filterDescriptor, bool useTypedEditors)
{
base.Initialize(dataColumn, filterDescriptor, useTypedEditors);
if (dataColumn is GridViewCheckBoxColumn)
{
RadGroupBox groupBox = this.Controls[0] as RadGroupBox;
groupBox.Controls.Remove(this.RightEditor);
groupBox.Controls.Remove(this.LeftEditor);
MethodInfo mi = typeof(CompositeFilterForm).GetMethod("InitializeCheckBoxEditors", BindingFlags.Instance | BindingFlags.NonPublic);
mi.Invoke(this, null);
}
}
}
To reproduce: use the following code snippet and enter in the filter row one of the row values as it is shown in the screenshot:
this.radGridView1.EnableFiltering = true;
GridViewDateTimeColumn dateTimeColumn = new GridViewDateTimeColumn("DateTimeColumn");
dateTimeColumn.Format = DateTimePickerFormat.Custom;
dateTimeColumn.CustomFormat = "dd/MM/yyyy HH:mm:ss";
radGridView1.MasterTemplate.Columns.Add(dateTimeColumn);
this.radGridView1.AutoSizeColumnsMode = GridViewAutoSizeColumnsMode.Fill;
for (int i = 0; i < 10; i++)
{
this.radGridView1.Rows.Add(DateTime.Now.AddDays(i));
}
Workaround: custom filtering: http://docs.telerik.com/devtools/winforms/gridview/filtering/custom-filtering
To reproduce:
1. Run the attached application.
2. Click into the cell in Column One and expand the combo box
3. While the combo box is still expanded, right click on any header cell in the grid
Step 3 should result in a NullReferenceException
Workaround:
Friend Class MyGridHeaderCellElement
Inherits GridHeaderCellElement
Public Sub New(ByVal col As GridViewColumn, ByVal row As GridRowElement)
MyBase.New(col, row)
End Sub
Protected Overrides Sub ShowContextMenu()
If Me.ViewTemplate IsNot Nothing Then
MyBase.ShowContextMenu()
End If
End Sub
Protected Overrides ReadOnly Property ThemeEffectiveType() As Type
Get
Return GetType(GridHeaderCellElement)
End Get
End Property
End Class
Private Sub radGridView1_CreateCell(ByVal sender As Object, ByVal e As GridViewCreateCellEventArgs)
If Object.ReferenceEquals(e.CellType, GetType(GridHeaderCellElement)) Then
e.CellType = GetType(MyGridHeaderCellElement)
End If
End Sub
To reproduce:
public Form1()
{
InitializeComponent();
List<Item> items = new List<Item>();
for (int i = 1; i <= 10; i++)
{
items.Add(new Item(i, "Product" + i, 0.25m * i, i));
}
this.radGridView1.DataSource = items;
GridViewDecimalColumn col = new GridViewDecimalColumn("Calculated Column");
col.Expression = "Quantity*Price/100";
this.radGridView1.Columns.Add(col);
this.radGridView1.AutoSizeColumnsMode = Telerik.WinControls.UI.GridViewAutoSizeColumnsMode.Fill;
}
public class Item
{
public int Id { get; set; }
public string Name { get; set; }
public decimal Price { get; set; }
public int Quantity { get; set; }
public Item(int id, string name, decimal price, int quantity)
{
this.Id = id;
this.Name = name;
this.Price = price;
this.Quantity = quantity;
}
}
MemoryStream s = new MemoryStream();
private void radButton1_Click(object sender, EventArgs e)
{
s = new MemoryStream();
this.radGridView1.SaveLayout(s);
}
private void radButton2_Click(object sender, EventArgs e)
{
this.radGridView1.LoadLayout(s);
}
private void Form1_FormClosing(object sender, FormClosingEventArgs e)
{
s.Close();
}
Workaround: before loading the layout, clear the columns
To reproduce: run the attached sample project. Workaround: set the AutoSizeRows property to false before exporting and set it back to true after the export is completed.
To reproduce:
- Bind the grid and reset its data source in the CellValueChanged event handler.
- Start the application, click in a cell, delete the contents and right click a header cell.
- Exception is thrown.
Workaround:
class MyGridHeaderCellElement : GridHeaderCellElement
{
public MyGridHeaderCellElement(GridViewColumn col, GridRowElement row) : base(col, row)
{ }
protected override Type ThemeEffectiveType
{
get
{
return typeof(GridHeaderCellElement);
}
}
protected override void ShowContextMenu()
{
if (this.ViewTemplate != null)
{
base.ShowContextMenu();
}
}
}
private void RadGridView1_CreateCell(object sender, GridViewCreateCellEventArgs e)
{
if (e.CellType == typeof(GridHeaderCellElement))
{
e.CellType = typeof(MyGridHeaderCellElement);
}
}
To reproduce: setup the hierarchy at design time: http://docs.telerik.com/devtools/winforms/gridview/hierarchical-grid/tutorial-binding-to-hierarchical-data Please refer to the attached gif file illustrating the exact steps. NOTE: when the "Object does not match target type" error message is displayed, some of the properties are missing, e.g. MaxLength. Workaround: modify the columns' properties at run time.
To reproduce:
private void Form1_Load(object sender, EventArgs e)
{
this.productsTableAdapter.Fill(this.nwindDataSet.Products);
this.radGridView1.EnableFiltering = true;
this.radGridView1.ShowHeaderCellButtons = true;
this.radGridView1.ShowFilteringRow = false;
this.radGridView1.Columns["UnitPrice"].FormatString = "{0:$#,###0.00;-$#,###0.00;$0.00}";
}
Workaround: in order to format the cells, use the CellFormatting event. As to the filter popup, use the following approach:
this.radGridView1.FilterPopupInitialized += radGridView1_FilterPopupInitialized;
private void radGridView1_FilterPopupInitialized(object sender, Telerik.WinControls.UI.FilterPopupInitializedEventArgs e)
{
RadListFilterPopup popup = e.FilterPopup as RadListFilterPopup;
if (popup != null)
{
popup.MenuTreeElement.TreeView.NodeFormatting -= TreeView_NodeFormatting;
popup.MenuTreeElement.TreeView.NodeFormatting += TreeView_NodeFormatting;
}
}
private void TreeView_NodeFormatting(object sender, TreeNodeFormattingEventArgs e)
{
decimal price;
if (decimal.TryParse(e.Node.Text, out price))
{
e.NodeElement.ContentElement.Text = string.Format("{0:$#,###0.00;-$#,###0.00;$0.00}", price);
}
}
To reproduce:
Sub New()
InitializeComponent()
ThemeResolutionService.ApplicationThemeName = "Breeze"
Dim dt As New DataTable
dt.Columns.Add("Id", GetType(Integer))
dt.Columns.Add("ParentId", GetType(Integer))
dt.Columns.Add("Name", GetType(String))
For index = 1 To 5
dt.Rows.Add(index, 0, "Parent" & index)
Next
Dim rand As New Random
For index = 6 To 25
dt.Rows.Add(index, rand.Next(1, 6), "Parent" & index)
Next
Me.RadGridView1.Relations.AddSelfReference(Me.RadGridView1.MasterTemplate, "Id", "ParentId")
Me.RadGridView1.DataSource = dt
Me.RadGridView1.AutoSizeColumnsMode = Telerik.WinControls.UI.GridViewAutoSizeColumnsMode.Fill
Me.RadGridView1.AutoSizeRows = True
End Sub
Please refer to the attached project. Workakround: call the BeginEdit method in the RadGridView.Click event.
Add an ExportToXlsx option into the native RadGridView exporting. It has been done for WPF (http://docs.telerik.com/devtools/wpf/controls/radgridview/export/export-xlsx) - why not WinForms. This would avoid the pain of having to implement the export using RadSpreadProcessing.
To reproduce:
this.radGridView1.EnableFiltering = true;
this.radGridView1.Columns.Add("Test column");
this.radGridView1.AutoSizeColumnsMode = Telerik.WinControls.UI.GridViewAutoSizeColumnsMode.Fill;
this.radGridView1.Rows.Add("Test ");
Workaround: use custom filtering:
this.radGridView1.EnableCustomFiltering = true;
this.radGridView1.CustomFiltering += radGridView1_CustomFiltering;
private void radGridView1_CustomFiltering(object sender, GridViewCustomFilteringEventArgs e)
{
if (this.radGridView1.FilterDescriptors.Count > 0)
{
GridViewCellInfo cell = e.Row.Cells[this.radGridView1.FilterDescriptors[0].PropertyName];
e.Visible = cell.Value.ToString().StartsWith(this.radGridView1.FilterDescriptors[0].Value.ToString());
}
}
To reproduce: follow the steps defined in the following help article: http://docs.telerik.com/devtools/winforms/gridview/hierarchical-grid/tutorial-binding-to-hierarchical-data Then, add a nested template in the second level. After closing the GridViewTemplate Collection Editor, you will notice that the template is not saved. http://screencast.com/t/7VDYiopuUHn Workaround: setup the hierarchy programmatically : http://docs.telerik.com/devtools/winforms/gridview/hierarchical-grid/binding-to-hierarchical-data-programmatically
WORKAROUND:
1. Create a custom GridTableElement and override the ProcessColumnEvent method.
2. Create a custom TableViewDefinition and override the CreateViewUIElement to return the custom table element.
3. Assign the custom view definition to the grid's ViewDefinition property
public class CustomGridTableElement : GridTableElement
{
protected override GridViewEventResult ProcessColumnEvent(GridViewColumn column, GridViewEvent eventData)
{
if (eventData.Info.Id == KnownEvents.PropertyChanged)
{
RadPropertyChangedEventArgs args = eventData.Arguments[0] as RadPropertyChangedEventArgs;
if (args.Property == GridViewColumn.IsVisibleProperty)
{
ViewElement.UpdateRowsWhenColumnsChanged();
if (this.GridViewElement.AutoSizeRows)
{
foreach (GridViewRowInfo row in this.ViewTemplate.Rows)
{
row.Height = -1;
}
this.UpdateLayout();
this.RowScroller.UpdateScrollRange();
}
return null;
}
}
return base.ProcessColumnEvent(column, eventData);
}
protected override Type ThemeEffectiveType
{
get { return typeof(GridTableElement); }
}
}
public class CustomTableViewDefinition : TableViewDefinition
{
public override IRowView CreateViewUIElement(GridViewInfo viewInfo)
{
return new CustomGridTableElement();
}
}
this.radGridView1.ViewDefinition = new CustomTableViewDefinition();
One should be able to set the maximum row height when the rows are auto sized and the visual styles are exported.
To reproduce:
Open the attached project, select two rows and delete them.
Workaround:
private void RadGridView1_RowValidating(object sender, Telerik.WinControls.UI.RowValidatingEventArgs e)
{
if (e.RowIndex != -1)
{
}
}
To reproduce:
Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
Me.ProductsTableAdapter.Fill(Me.NwindDataSet.Products)
Me.CategoriesTableAdapter.Fill(Me.NwindDataSet.Categories)
RadGridView1.AutoGenerateHierarchy = True
RadGridView1.DataSource = Me.NwindDataSet
RadGridView1.DataMember = "Categories"
Me.RadGridView1.MasterTemplate.AutoSizeColumnsMode = Telerik.WinControls.UI.GridViewAutoSizeColumnsMode.Fill
Me.RadGridView1.MasterTemplate.Templates(0).AutoSizeColumnsMode = Telerik.WinControls.UI.GridViewAutoSizeColumnsMode.Fill
Me.RadGridView1.UseScrollbarsInHierarchy = True
End Sub
Private Sub RadGridView1_ViewCellFormatting(sender As Object, e As CellFormattingEventArgs) Handles RadGridView1.ViewCellFormatting
If e.Row.HierarchyLevel > 0 Then
e.CellElement.TableElement.RowHeaderColumnWidth = 100
End If
End Sub
To reproduce: make sure only the first row is selected then Shift select row 3.
DataTable dt = new DataTable();
dt.Columns.Add("Value", typeof(int));
dt.Columns.Add("Date", typeof(DateTime));
dt.Columns.Add("Description", typeof(string));
for (int index = 0; index < 15; index++)
{
dt.Rows.Add(new object[] { index % 5, DateTime.Now.AddSeconds(10), "Index = " + index });
}
radGridView1.DataSource = dt;
radGridView1.AutoSizeColumnsMode = GridViewAutoSizeColumnsMode.Fill;
radGridView1.MultiSelect = true;
foreach (GridViewColumn col in this.radGridView1.Columns)
{
ConditionalFormattingObject obj = new ConditionalFormattingObject("Value",
ConditionTypes.Equal,
col.Index.ToString(),
"",
true);
obj.RowBackColor = Color.SkyBlue;
obj.RowForeColor = Color.Red;
obj.TextAlignment = ContentAlignment.MiddleRight;
obj.ApplyOnSelectedRows = false;
this.radGridView1.Columns[0].ConditionalFormattingObjectList.Add(obj);
}
Workaround: use the CellFormatting event to apply the desired formatting by using the API for overriding theme settings:
http://docs.telerik.com/devtools/winforms/gridview/cells/formatting-cells
http://docs.telerik.com/devtools/winforms/telerik-presentation-framework/override-theme-settings-at-run-time