I am posting this in case it is helpful to anyone. It solves the following cases:
- Renamed/removed/added properties in your Classes
- Removed unused columns from the Layout
Your user will just need to save the Layout once.
private
void
RadGridViewReportData_DataBindingComplete(
object
sender, GridViewBindingCompleteEventArgs e)
{
if
(File.Exists(_layout))
{
radGridViewReportData.LoadLayout(_layout);
// A System.Type
var reportProperties = _report.GetDataSourceType().GetProperties().ToArray();
foreach
(var prop
in
reportProperties)
{
if
(!radGridViewReportData.Columns.Contains(prop.Name))
{
// Add columns to the Grid
GridViewDataColumn dataColumn = GridViewHelper.AutoGenerateGridColumn(prop.PropertyType,
null
);
dataColumn.Name = prop.Name;
dataColumn.FieldName = prop.Name;
dataColumn.HeaderText = ToCamelCaseWithSpaces(prop.Name);
radGridViewReportData.Columns.Add(dataColumn);
}
}
foreach
(var col
in
radGridViewReportData.Columns.ToArray())
{
if
(reportProperties.Single(x => x.Name == col.FieldName) ==
null
)
{
// Remove columns from the Grid
radGridViewReportData.Columns.Remove(col);
}
}
}
else
{
foreach
(GridViewDataColumn i
in
radGridViewReportData.Columns)
{
i.HeaderText = ToCamelCaseWithSpaces(i.HeaderText);
}
radGridViewReportData.BestFitColumns();
}
}