How to reproduce: check also the attached video
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
this.radGridView1.DataSource = this.GetData();
this.radGridView1.AutoSizeColumnsMode = GridViewAutoSizeColumnsMode.Fill;
GroupDescriptor descriptor = new GroupDescriptor();
descriptor.GroupNames.Add("Name", ListSortDirection.Ascending);
this.radGridView1.GroupDescriptors.Add(descriptor);
}
private DataTable GetData()
{
DataTable dt = new DataTable();
dt.Columns.Add("Name", typeof(string));
dt.Columns.Add("Age", typeof(int));
dt.Columns.Add("Date", typeof(DateTime));
dt.Columns.Add("Bool", typeof(bool));
for (int i = 0; i < 3; i++)
{
for (int j = 0; j < 60; j++)
{
dt.Rows.Add("Name " + i, i, DateTime.Now.AddDays(i), i % 2 == 0);
}
}
return dt;
}
private void radButton1_Click(object sender, EventArgs e)
{
GridPrintStyle style = new GridPrintStyle();
style.FitWidthMode = PrintFitWidthMode.FitPageWidth;
this.radGridView1.PrintStyle = style;
RadPrintDocument doc = new RadPrintDocument();
doc.HeaderHeight = 30;
doc.HeaderFont = new Font("Arial", 12);
doc.LeftHeader = "Left Header";
doc.MiddleHeader = "Middle header";
doc.RightHeader = "Right header";
doc.AssociatedObject = this.radGridView1;
RadPrintPreviewDialog dialog = new RadPrintPreviewDialog(doc);
dialog.Show();
}
}
Workaround: create a custom GridPrintStyle class
public class MyGridPrintStyle : GridPrintStyle
{
protected override BaseGridPrintRenderer InitializePrintRenderer(RadGridView grid)
{
BaseGridPrintRenderer rend = base.InitializePrintRenderer(grid);
if (rend is TableViewDefinitionPrintRenderer)
{
return new MyTableViewDefinitionPrintRenderer(grid);
}
return rend;
}
}
public class MyTableViewDefinitionPrintRenderer : TableViewDefinitionPrintRenderer
{
public MyTableViewDefinitionPrintRenderer(RadGridView grid)
: base(grid)
{
}
protected override void PrintRowWideCell(GridViewRowInfo row, TableViewRowLayout rowLayout, GridPrintSettings settings, int currentX, int currentY, Graphics graphics)
{
int groupLevel = row.Group != null ? row.Group.Level + 1 : 0;
int indentLevel = row.HierarchyLevel + 1 - groupLevel;
Size cellSize = this.GetRowSize(row, rowLayout);
int cellX = currentX + indentLevel * settings.HierarchyIndent + rowLayout.Owner.CellSpacing;
Rectangle cellRect = new Rectangle(cellX, currentY, cellSize.Width - indentLevel * settings.HierarchyIndent, cellSize.Height);
CellPrintElement printCell = new CellPrintElement();
if (row is GridViewGroupRowInfo)
{
if (this.PrintPages.Count > 0 && !settings.PrintHierarchy)
{
cellRect.Width -= this.PrintPages[this.CurrentPrintPage].Count - 1;
}
printCell = this.CreateGroupCellPrintElement(row as GridViewGroupRowInfo);
if (printCell.Font != settings.GroupRowFont)
{
if (settings.GroupRowFont != null)
{
printCell.Font = settings.GroupRowFont;
}
else
{
settings.GroupRowFont = printCell.Font;
}
}
}
printCell.TextPadding = this.GridView.PrintStyle.CellPadding;
printCell.RightToLeft = this.GridView.RightToLeft == RightToLeft.Yes;
PrintCellFormattingEventArgs formattEventArgs = new PrintCellFormattingEventArgs(row, null, printCell);
this.OnPrintCellFormatting(formattEventArgs);
PrintCellPaintEventArgs paintEventArgs = new PrintCellPaintEventArgs(graphics, row, null, cellRect);
this.OnPrintCellPaint(paintEventArgs);
formattEventArgs.PrintCell.Paint(graphics, paintEventArgs.CellRect);
}
}
Currently the time for opening the popup for a column with 100 000 unique items including blank items is about 8s, this can be optimized.
How to reproduce:
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
this.radGridView1.EnableFiltering = true;
this.radGridView1.ShowHeaderCellButtons = true;
this.radGridView1.DataSource = this.GetData();
this.radGridView1.AutoSizeColumnsMode = GridViewAutoSizeColumnsMode.Fill;
this.radGridView1.MouseDown += RadGridView1_MouseDown;
this.radGridView1.FilterPopupInitialized += RadGridView1_FilterPopupInitialized;
}
Stopwatch sw = new Stopwatch();
private void RadGridView1_MouseDown(object sender, MouseEventArgs e)
{
GridFilterButtonElement btn = this.radGridView1.ElementTree.GetElementAtPoint(e.Location) as GridFilterButtonElement;
if (btn != null)
{
sw.Start();
}
}
private void RadGridView1_FilterPopupInitialized(object sender, FilterPopupInitializedEventArgs e)
{
((RadListFilterPopup)e.FilterPopup).PopupOpened += Form1_PopupOpened;
}
private void Form1_PopupOpened(object sender, EventArgs args)
{
sw.Stop();
Console.WriteLine("Total: " + sw.ElapsedMilliseconds);
}
private DataTable GetData()
{
DataTable dt = new DataTable();
dt.Columns.Add("Id", typeof(int));
dt.Columns.Add("Name", typeof(string));
dt.Columns.Add("Date", typeof(DateTime));
dt.Columns.Add("Bool", typeof(bool));
for (int i = 0; i < 100000; i++)
{
dt.Rows.Add(i, "Name " + i, DateTime.Now.AddDays(i), i % 2 == 0);
}
dt.Rows.Add(1, null, DateTime.Now.AddDays(1), false);
return dt;
}
}
To reproduce: run the attached project and toggle the checkbox in the header cell of the child template.
Workaround: use a custom GridCheckBoxHeaderCellElement
public partial class RadForm1 : Telerik.WinControls.UI.RadForm
{
public RadForm1()
{
InitializeComponent();
this.radGridView1.CreateCell += radGridView1_CreateCell;
DataTable dt = new DataTable();
dt.Columns.Add("CategoryId", typeof(int));
dt.Columns.Add("CategoryName", typeof(string));
dt.Columns.Add("ParentCategoryId", typeof(int));
dt.Rows.Add(1, "Category1", 0);
dt.Rows.Add(2, "Category2", 0);
dt.Rows.Add(3, "Category3", 0);
Random rand = new Random();
for (int i = 4; i < 20; i++)
{
dt.Rows.Add(i, "Category" + i, rand.Next(1, 4));
}
this.radGridView1.Relations.AddSelfReference(this.radGridView1.MasterTemplate, "CategoryId", "ParentCategoryId");
this.radGridView1.DataSource = dt;
this.radGridView1.AutoSizeColumnsMode = Telerik.WinControls.UI.GridViewAutoSizeColumnsMode.Fill;
GridViewTemplate childTemplate = CreateChildTemplate();
GridViewRelation relation = new GridViewRelation(
this.radGridView1.MasterTemplate,
childTemplate);
relation.ChildColumnNames.Add("CategoryId");
relation.ParentColumnNames.Add("CategoryId");
this.radGridView1.Relations.Add(relation);
}
private void radGridView1_CreateCell(object sender, GridViewCreateCellEventArgs e)
{
if (e.CellType == typeof(GridCheckBoxHeaderCellElement))
{
e.CellElement = new CustomGridCheckBoxHeaderCellElement(e.Column, e.Row);
}
}
private GridViewTemplate CreateChildTemplate()
{
GridViewTemplate childTemplate = new GridViewTemplate();
childTemplate.AutoGenerateColumns = false;
this.radGridView1.Templates.Add(childTemplate);
GridViewDecimalColumn decColumn = new GridViewDecimalColumn
{
Name = "CategoryId",
HeaderText = "CategoryId Id",
FieldName = "CategoryId",
IsVisible = false,
MinWidth = 100
};
childTemplate.Columns.Add(decColumn);
GridViewTextBoxColumn tbxColumn = new GridViewTextBoxColumn
{
Name = "RightName",
HeaderText = "Right Name",
FieldName = "RGT_NAME",
ReadOnly = true,
MinWidth = 100
};
childTemplate.Columns.Add(tbxColumn);
GridViewCheckBoxColumn chkxColumn = new GridViewCheckBoxColumn
{
Name = "Checkbox",
EnableHeaderCheckBox = true,
FieldName = "HasAccess",
};
childTemplate.Columns.Add(chkxColumn);
childTemplate.AutoSizeColumnsMode = GridViewAutoSizeColumnsMode.Fill;
return childTemplate;
}
public class CustomGridCheckBoxHeaderCellElement : GridCheckBoxHeaderCellElement
{
public CustomGridCheckBoxHeaderCellElement(GridViewColumn column, GridRowElement row) : base(column, row)
{
}
public bool SuspendProcessingToggleStateChanged
{
get
{
FieldInfo fi = typeof(GridCheckBoxHeaderCellElement).GetField("suspendProcessingToggleStateChanged", BindingFlags.NonPublic | BindingFlags.Instance);
return (bool)fi.GetValue(this);
}
set
{
FieldInfo fi = typeof(GridCheckBoxHeaderCellElement).GetField("suspendProcessingToggleStateChanged", BindingFlags.NonPublic | BindingFlags.Instance);
fi.SetValue(this, value);
}
}
public bool ShouldCheckDataRows
{
get
{
FieldInfo fi = typeof(GridCheckBoxHeaderCellElement).GetField("shouldCheckDataRows", BindingFlags.NonPublic | BindingFlags.Instance);
return (bool)fi.GetValue(this);
}
set
{
FieldInfo fi = typeof(GridCheckBoxHeaderCellElement).GetField("shouldCheckDataRows", BindingFlags.NonPublic | BindingFlags.Instance);
fi.SetValue(this, value);
}
}
protected override void checkbox_ToggleStateChanged(object sender, StateChangedEventArgs args)
{
if (SuspendProcessingToggleStateChanged)
{
return;
}
if (this.ViewTemplate != null && !this.ViewTemplate.IsSelfReference && !this.MasterTemplate.IsSelfReference)
{
this.MasterTemplate.BeginUpdate();
}
else
{
this.TableElement.BeginUpdate();
}
object valueState = DBNull.Value;
if (args.ToggleState == ToggleState.On)
{
valueState = true;
}
else if (args.ToggleState == ToggleState.Off)
{
valueState = false;
}
else if (args.ToggleState == ToggleState.Indeterminate)
{
valueState = null;
}
RaiseToggleStateEvent();
if (!ShouldCheckDataRows)
{
if (this.ViewTemplate != null && !this.ViewTemplate.IsSelfReference && !this.MasterTemplate.IsSelfReference)
{
this.MasterTemplate.EndUpdate(true, new DataViewChangedEventArgs(ViewChangedAction.DataChanged));
}
return;
}
this.GridViewElement.EditorManager.EndEdit();
this.TableElement.BeginUpdate();
this.MasterTemplate.MasterViewInfo.TableSearchRow.SuspendSearch();
List<GridViewRowInfo> list = GetRowsToIterateOver();
foreach (GridViewRowInfo rowInfo in list)
{
GridViewGroupRowInfo groupRow = rowInfo as GridViewGroupRowInfo;
if (groupRow != null)
{
this.CheckAllCheckBoxInChildRows(groupRow, valueState);
}
else
{
rowInfo.Cells[this.ColumnIndex].Value = valueState;
}
}
this.MasterTemplate.MasterViewInfo.TableSearchRow.ResumeSearch();
this.TableElement.EndUpdate(false);
if (this.ViewTemplate != null && !this.ViewTemplate.IsSelfReference && !this.MasterTemplate.IsSelfReference)
{
this.MasterTemplate.EndUpdate(true, new DataViewChangedEventArgs(ViewChangedAction.DataChanged));
}
else
{
this.TableElement.EndUpdate(false);
}
this.TableElement.Update(GridUINotifyAction.DataChanged);
}
private void CheckAllCheckBoxInChildRows(GridViewGroupRowInfo row, object state)
{
List<GridViewRowInfo> list = new List<GridViewRowInfo>();
foreach (GridViewRowInfo rowInfo in row.ChildRows)
{
list.Add(rowInfo);
}
foreach (GridViewRowInfo rowInfo in list)
{
GridViewGroupRowInfo groupInfo = rowInfo as GridViewGroupRowInfo;
if (groupInfo != null)
{
this.CheckAllCheckBoxInChildRows(groupInfo, state);
}
else
{
rowInfo.Cells[this.ColumnIndex].Value = state;
}
}
}
private List<GridViewRowInfo> GetRowsToIterateOver()
{
if (this.ViewTemplate != null && this.ViewTemplate.IsSelfReference)
{
PrintGridTraverser traverser = new PrintGridTraverser(this.ViewInfo);
List<GridViewRowInfo> result = new List<GridViewRowInfo>();
while (traverser.MoveNext())
{
if (traverser.Current is GridViewDataRowInfo)
{
result.Add(traverser.Current);
}
}
return result;
}
return new List<GridViewRowInfo>(this.ViewInfo.Rows);
}
}
}
Bind the grid to the following DataTable:
DataTable dt = new DataTable();
dt.Columns.Add("X.Y");
dt.Columns.Add("X");
dt.Rows.Add("Data X.Y", "Data X");
this.radGridView1.DataSource = dt;
You will notice that the second column "X" is missing.
Note: if you change the order of adding the columns, both columns will be added.
Excel does not support dates prior to 1/1/1900, however, we could export such dates as simple strings: https://support.office.com/en-us/article/excel-specifications-and-limits-1672b34d-7043-467e-8e27-269d656771c3
How to reproduce:
public partial class Form1 : RadForm
{
public Form1()
{
InitializeComponent();
this.radGridView1.DataSource = this.GetData();
this.radGridView1.AutoSizeColumnsMode = Telerik.WinControls.UI.GridViewAutoSizeColumnsMode.Fill;
}
private object GetData()
{
DataTable dt = new DataTable();
dt.Columns.Add("Id", typeof(int));
dt.Columns.Add("Name", typeof(string));
dt.Columns.Add("Bool", typeof(bool));
dt.Columns.Add("Date", typeof(DateTime));
DateTime date = new DateTime(1850, 1, 1);
for (int i = 0; i < 100; i++)
{
dt.Rows.Add(i, "Name " + i, i % 2 == 0, date.AddYears(i));
}
return dt;
}
FieldInfo fi;
private void radButton1_Click(object sender, EventArgs e)
{
//Old Export using the ExcelML format
this.fi = typeof(Telerik.WinControls.UI.Export.ExcelML.CellElement).GetField("_dataElement", System.Reflection.BindingFlags.Instance | System.Reflection.BindingFlags.NonPublic);
ExportToExcelML exporter = new ExportToExcelML(this.radGridView1);
string fileName = @"..\..\data.xls";
exporter.RunExport(fileName);
//New export utilizing the SpreadProcessing libraries
GridViewSpreadExport spreadExporter = new GridViewSpreadExport(this.radGridView1);
SpreadExportRenderer exportRenderer = new SpreadExportRenderer();
spreadExporter.RunExport(@"..\..\data.xlsx", exportRenderer);
}
}
Workaround: handle the CellFormatting event
public partial class Form1 : RadForm
{
public Form1()
{
InitializeComponent();
this.radGridView1.DataSource = this.GetData();
this.radGridView1.AutoSizeColumnsMode = Telerik.WinControls.UI.GridViewAutoSizeColumnsMode.Fill;
}
private object GetData()
{
DataTable dt = new DataTable();
dt.Columns.Add("Id", typeof(int));
dt.Columns.Add("Name", typeof(string));
dt.Columns.Add("Bool", typeof(bool));
dt.Columns.Add("Date", typeof(DateTime));
DateTime date = new DateTime(1850, 1, 1);
for (int i = 0; i < 100; i++)
{
dt.Rows.Add(i, "Name " + i, i % 2 == 0, date.AddYears(i));
}
return dt;
}
FieldInfo fi;
private void radButton1_Click(object sender, EventArgs e)
{
//Old Export using the ExcelML format
this.fi = typeof(Telerik.WinControls.UI.Export.ExcelML.CellElement).GetField("_dataElement", System.Reflection.BindingFlags.Instance | System.Reflection.BindingFlags.NonPublic);
ExportToExcelML exporter = new ExportToExcelML(this.radGridView1);
exporter.ExcelCellFormatting += Exporter_ExcelCellFormatting;
string fileName = @"..\..\data.xls";
exporter.RunExport(fileName);
//New export utilizing the SpreadProcessing libraries
GridViewSpreadExport spreadExporter = new GridViewSpreadExport(this.radGridView1);
spreadExporter.CellFormatting += SpreadExporter_CellFormatting;
SpreadExportRenderer exportRenderer = new SpreadExportRenderer();
spreadExporter.RunExport(@"..\..\data.xlsx", exportRenderer);
}
private void SpreadExporter_CellFormatting(object sender, Telerik.WinControls.Export.CellFormattingEventArgs e)
{
if (e.GridRowIndex >= 1 && e.GridCellInfo.ColumnInfo is GridViewDateTimeColumn && ((DateTime)e.GridCellInfo.Value).Year < 1900)
{
Telerik.Windows.Documents.Spreadsheet.Model.CellSelection cell = e.CellSelection as Telerik.Windows.Documents.Spreadsheet.Model.CellSelection;
cell.SetValue(e.GridCellInfo.Value.ToString());
}
}
private void Exporter_ExcelCellFormatting(object sender, Telerik.WinControls.UI.Export.ExcelML.ExcelCellFormattingEventArgs e)
{
if (e.GridRowIndex > -1 && e.GridCellInfo.ColumnInfo is GridViewDateTimeColumn && ((DateTime)e.GridCellInfo.Value).Year < 1900)
{
DataElement data = new DataElement();
data.DataItem = e.GridCellInfo.Value.ToString();
this.fi.SetValue(e.ExcelCellElement, data);
}
}
}
To reproduce: please refer to the attached screenshot. Workaround: add the FilterDescriptor programmatically: https://docs.telerik.com/devtools/winforms/gridview/filtering/setting-filters-programmatically-(simple-descriptors)
Please refer to the attached sample project. The ResizeColumnsProportionally.gif illustrates the correct behavior of columns resizing. However, if you make a certain column with fixed size, the columns resizing is not proportional any more. The ColumnsWidthNOTAdjustedProportionally.gif demonstrates better the wrong behavior. Workaround: handle the SizeChanged event and adjust the columns' width property programmatically in order to obtain the desired widths.
Workaround:
private void radGridView1_CellFormatting(object sender, Telerik.WinControls.UI.CellFormattingEventArgs e)
{
GridDataCellElement cell = e.CellElement as GridDataCellElement ;
if (cell!=null && cell.SelfReferenceLayout!=null)
{
foreach (RadElement item in cell.SelfReferenceLayout.StackLayoutElement.Children)
{
if (!(item is GridTreeExpanderItem))
{
item.Visibility = ElementVisibility.Collapsed;
}
else
{
item.Visibility = ElementVisibility.Visible;
}
}
}
}
To reproduce: run the attached sample project and press the "stream export" button.
Workaround: use the GridViewSpreadExport https://docs.telerik.com/devtools/winforms/gridview/exporting-data/spread-export
Dim spreadExporter As GridViewSpreadExport = New GridViewSpreadExport(RadGridView1)
Dim exportRenderer As New SpreadExportRenderer()
Dim fileName As String = "..\..\Export" & DateTime.Now.ToLongTimeString().Replace(":", "_") + ".xlsx"
spreadExporter.RunExport(fileName, exportRenderer)
Workaround: adjust the cell/row spacing
this.radGridView1.TableElement.CellSpacing = -2;
this.radGridView1.TableElement.RowSpacing = -2;
To reproduce:
DataTable dt = new DataTable();
dt.Columns.Add("Id", typeof(int));
dt.Columns.Add("Name", typeof(string));
dt.Columns.Add("NumberAsShort", typeof(ushort));
for (int i = 0; i < 100; i++)
{
dt.Rows.Add(i, "Row" + i, i );
}
this.radGridView1.DataSource = dt;
Workaround: use the CellFormatting event https://docs.telerik.com/devtools/winforms/gridview/cells/formatting-cells
To reproduce: run the attached sample project and click the 'export' button. The exported file fill be automatically opened. If you select several cells from the UnitPrice column you will see at the bottom that the cell values ' total is displayed. However, if you include the summary item's value in the selection its value is not taken into consideration. If you pay attention to the cell's format, it will be General instead of custom numeric one.
Workaround:
Private Sub spreadExporter_CellFormatting(sender As Object, e As Telerik.WinControls.Export.CellFormattingEventArgs)
If e.GridRowInfoType = GetType(GridViewSummaryRowInfo) AndAlso e.GridCellInfo.ColumnInfo.Name = "DecimalColumn" Then
Dim cellSelection As CellSelection = TryCast(e.CellSelection, CellSelection)
Dim cellFormat As New CellValueFormat("### ### ###.00")
If cellFormat IsNot Nothing Then
cellSelection.SetValue(Decimal.Parse(cellSelection.GetValue().Value.RawValue.Replace(" ", "")))
cellSelection.SetFormat(cellFormat)
End If
End If
End Sub
How to reproduce:
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
ThemeResolutionService.AllowAnimations = false;
this.radGridView1.DataSource = this.GetData();
}
private DataTable GetData()
{
DataTable dt = new DataTable();
dt.Columns.Add("Id", typeof(int));
dt.Columns.Add("Name", typeof(string));
dt.Rows.Add(1, "\u0002x09");
for (int i = 1; i < 10; i++)
{
dt.Rows.Add(i, "name");
}
return dt;
}
private void radButton1_Click(object sender, EventArgs e)
{
GridViewSpreadExport spreadExporter = new GridViewSpreadExport(this.radGridView1);
spreadExporter.FileExportMode = FileExportMode.CreateOrOverrideFile;
SpreadExportRenderer exportRenderer = new SpreadExportRenderer();
spreadExporter.RunExport(@"..\..\exported-file.xlsx", exportRenderer);
}
}
ArgumentException with clarification similar to "'\u001f', hexadecimal value 0x1F, is an invalid character." is thrown when trying to export document containing characters which are not supported in XML document - such as some control characters like 0x00, 0x1F, 0x1B, etc. Such characters are described in the XML specification here: https://www.w3.org/TR/xml/#charsets.
Although the escaped strings are not supported (see https://feedback.telerik.com/Project/184/Feedback/Details/190228 ), the library could prevent the exception and export the document successfully by skipping such characters.
Workaround: remove such characters before the export. Check the following StackOverflow answer for some ideas on code for replacing the characters: http://stackoverflow.com/a/14323524/259206
To reproduce:
- Filter a self-referencing grouped grid.
Workaround:
private void _rgvFreeCodeValues_FilterChanged(object sender, GridViewCollectionChangedEventArgs e)
{
foreach (var row in RgvFreeCodeValues.Rows)
row.IsExpanded = false;
}
private void _rgvFreeCodeValues_FilterChanging(object sender, GridViewCollectionChangingEventArgs e)
{
foreach (var row in RgvFreeCodeValues.Rows)
row.IsExpanded = true;
}
To reproduce:
- Create a self reference grid and set the columns width so the horizontal scrollbar is visible.
- Scroll to the right and filter by the last column,
- Type a single character, the the edited cell is now changed.
Workaround:
class MyFilterCell : GridFilterCellElement
{
protected override Type ThemeEffectiveType
{
get
{
return typeof(GridFilterCellElement);
}
}
public MyFilterCell(GridViewDataColumn column, GridRowElement row) : base(column, row)
{
}
public override bool IsCompatible(GridViewColumn data, object context)
{
return false;
}
}
To reproduce: add a grid and a button and use the following code snippet:
[WORKAROUND: call Application.DoEvent at the beginning of the BindGrid method before rebinding]
public partial class Form1 : Form
{
DataTable dtLeg;
DataTable dtComp;
DataTable dtClass;
Int32 intClickCount = 0;
public Form1()
{
InitializeComponent();
}
private void Form1_Load(object sender, EventArgs e)
{
try
{
BindTables();
}
catch(Exception)
{
throw;
}
}
private void BindTables()
{
try
{
dtLeg = new DataTable();
dtComp = new DataTable();
dtClass = new DataTable();
Random rand1 = new Random();
Random rand2 = new Random();
Random rand3 = new Random();
Random rand4 = new Random();
int cNo = rand1.Next(2000, 10000);
int dID = rand2.Next(2000, 10000);
int dDetID = rand3.Next(2000, 10000);
int depCode = rand4.Next(1000, 8000);
string cCls = "Leg MIAGCM " + depCode.ToString();
dtLeg.Columns.Add("Case_Number"); dtLeg.Columns.Add("Departure_Detail_Id"); dtLeg.Columns.Add("Departure_Id"); dtLeg.Columns.Add("Cabin_Class"); dtLeg.Columns.Add("Leg_Segment_type"); dtLeg.Columns.Add("Departure_Detail_Capture_Id");
dtLeg.Columns.Add("DDC_Compartment_Id"); dtLeg.Columns.Add("Compartment_Structure_Id"); dtLeg.Columns.Add("Compartment_Name"); dtLeg.Columns.Add("Compartment_id"); dtLeg.Columns.Add("DDC_Class_Id"); dtLeg.Columns.Add("Class_Structure_Id");
dtLeg.Columns.Add("Class_Name"); dtLeg.Columns.Add("Class_id"); dtLeg.Columns.Add("DDC_Subclass_Id"); dtLeg.Columns.Add("Subclass_Structure_Id"); dtLeg.Columns.Add("Subclass_Name"); dtLeg.Columns.Add("Subclass_id");
dtLeg.Columns.Add("Adjusted_Authorizations"); dtLeg.Columns.Add("Adjusted_Availability"); dtLeg.Columns.Add("Adjusted_Bid_Price"); dtLeg.Columns.Add("Adjusted_Boardings"); dtLeg.Columns.Add("Adjusted_Bookings"); dtLeg.Columns.Add("Adjusted_Load_Factor");
dtLeg.Columns.Add("Adjusted_Physical_Load_Factor"); dtLeg.Columns.Add("Adjusted_Revenue_Gain"); dtLeg.Columns.Add("Adjusted_SCI"); dtLeg.Columns.Add("Authorized_Capacity"); dtLeg.Columns.Add("Average_Fare_Value"); dtLeg.Columns.Add("Booked_Costs");
dtLeg.Columns.Add("Booked_Revenue"); dtLeg.Columns.Add("Class_Usage_Ratio"); dtLeg.Columns.Add("Confidence"); dtLeg.Columns.Add("Current_Authorizations"); dtLeg.Columns.Add("Current_Availability"); dtLeg.Columns.Add("Current_Bookings");
dtLeg.Columns.Add("Current_SCI"); dtLeg.Columns.Add("Go_Shows"); dtLeg.Columns.Add("Group_Bookings"); dtLeg.Columns.Add("Group_No_Show_Percentage"); dtLeg.Columns.Add("Limit_Compartment"); dtLeg.Columns.Add("Max_Constraint_Type");
dtLeg.Columns.Add("Maximum_Authorizations_Constraint"); dtLeg.Columns.Add("Maximum_Leg_Authorization"); dtLeg.Columns.Add("Min_Constraint_Type"); dtLeg.Columns.Add("Minimum_Authorizations_Constraint"); dtLeg.Columns.Add("No_Show_Percentage"); dtLeg.Columns.Add("No_Shows");
dtLeg.Columns.Add("Overbooking_Amount"); dtLeg.Columns.Add("Overbooking_Cost"); dtLeg.Columns.Add("Physical_Capacity"); dtLeg.Columns.Add("Projected_Authorized_Load_Factor"); dtLeg.Columns.Add("Projected_Boardings"); dtLeg.Columns.Add("Projected_Bookings");
dtLeg.Columns.Add("Projected_Physical_Load_Factor"); dtLeg.Columns.Add("Projected_Revenue"); dtLeg.Columns.Add("Recommended_Authorized_Load_Factor"); dtLeg.Columns.Add("Recommended_Authorizations"); dtLeg.Columns.Add("Recommended_Availability"); dtLeg.Columns.Add("Recommended_Bid_Price");
dtLeg.Columns.Add("Recommended_Boardings"); dtLeg.Columns.Add("Recommended_Bookings"); dtLeg.Columns.Add("Recommended_Physical_Load_Factor"); dtLeg.Columns.Add("Recommended_Revenue"); dtLeg.Columns.Add("Recommended_Revenue_Gain"); dtLeg.Columns.Add("Recommended_SCI");
dtLeg.Columns.Add("Remaining_Cancellations"); dtLeg.Columns.Add("Original_Demand"); dtLeg.Columns.Add("Remaining_Demand"); dtLeg.Columns.Add("Revenue_Target"); dtLeg.Columns.Add("Standard_Deviation"); dtLeg.Columns.Add("Theoretical_Capacity");
dtLeg.Columns.Add("Total_Booked_Costs"); dtLeg.Columns.Add("Total_Booked_Revenue"); dtLeg.Columns.Add("Total_Group_Bookings"); dtLeg.Columns.Add("Total_Projected_Demand"); dtLeg.Columns.Add("Total_Waitlist"); dtLeg.Columns.Add("Unit_Target");
dtLeg.Columns.Add("Upsell_Adjusted_Demand"); dtLeg.Columns.Add("Upsell_Authorizations"); dtLeg.Columns.Add("Upsell_Availability"); dtLeg.Columns.Add("Upsell_Boardings"); dtLeg.Columns.Add("Upsell_Bookings"); dtLeg.Columns.Add("Upsell_Probability");
dtLeg.Columns.Add("Upsell_Revenue"); dtLeg.Columns.Add("Upsell_Revenue_Gain"); dtLeg.Columns.Add("Upsell_SCI"); dtLeg.Columns.Add("Upsell_Remaining_Demand"); dtLeg.Columns.Add("Usage_Ratio"); dtLeg.Columns.Add("Waitlist");
dtLeg.Columns.Add("Limit_Class"); dtLeg.Columns.Add("rec_limit"); dtLeg.Columns.Add("curr_limit"); dtLeg.Columns.Add("App_Capacity"); dtLeg.Columns.Add("Rec_Capacity"); dtLeg.Columns.Add("Is_Summary");
dtLeg.Columns.Add("Current_Resource_Limit1"); dtLeg.Columns.Add("Recommand_Resource_Limit1"); dtLeg.Columns.Add("Upsell_Resource_limit1"); dtLeg.Columns.Add("Adjusted_Resource_limit1"); dtLeg.Columns.Add("Current_Resource_Limit2"); dtLeg.Columns.Add("Recommand_Resource_Limit2");
dtLeg.Columns.Add("Upsell_Resource_limit2"); dtLeg.Columns.Add("Adjusted_Resource_limit2"); dtLeg.Columns.Add("Include_In_Total_Flag"); dtLeg.Columns.Add("Keep_Curr_Auth"); dtLeg.Columns.Add("Discrete_Recomended_Authorization"); dtLeg.Columns.Add("Discrete_Upsell_Authorization");
dtLeg.Columns.Add("Nesting_Type"); dtLeg.Columns.Add("BookingPickup_DaysPrior_i"); dtLeg.Columns.Add("BookingPickup_Per_DaysPrior_i"); dtLeg.Columns.Add("BookingPickup_DaysPrior_j"); dtLeg.Columns.Add("BookingPickup_Per_DaysPrior_j"); dtLeg.Columns.Add("BookingPickup_DaysPrior_k");
dtLeg.Columns.Add("BookingPickup_Per_DaysPrior_k"); dtLeg.Columns.Add("SDL_Booked"); dtLeg.Columns.Add("SDL_Booked_Percentage"); dtLeg.Columns.Add("Travelled_Bookings"); dtLeg.Columns.Add("Travelled_Bookings_Percentage"); dtLeg.Columns.Add("PE_Authorization");
dtLeg.Columns.Add("PE_Availability"); dtLeg.Columns.Add("PE_Booking"); dtLeg.Columns.Add("PE_Boarding"); dtLeg.Columns.Add("PE_Revenue"); dtLeg.Columns.Add("PE_Revenue_Gain"); dtLeg.Columns.Add("Marginal_Fare");
dtLeg.Columns.Add("Marginal_Demand"); dtLeg.Columns.Add("Price_Elasticity"); dtLeg.Columns.Add("PE_Group_ID"); dtLeg.Columns.Add("PE_Demand"); dtLeg.Columns.Add("Max_Alloc_Hus"); dtLeg.Columns.Add("PAX_Buffer_Hus");
dtLeg.Columns.Add("PAX_Buffer_Hus_Type"); dtLeg.Columns.Add("Max_Alloc_Berths"); dtLeg.Columns.Add("PAX_Buffer_Berths"); dtLeg.Columns.Add("PAX_Buffer_Berths_Type"); dtLeg.Columns.Add("IS_Sent"); dtLeg.Columns.Add("StepType");
dtLeg.Columns.Add("Adjusted_Authorizations_Calc"); dtLeg.Columns.Add("SDL_BP_DP_i"); dtLeg.Columns.Add("SDL_BP_DP_j"); dtLeg.Columns.Add("SDL_BP_DP_k"); dtLeg.Columns.Add("current_revenue"); dtLeg.Columns.Add("revenue_SDL");
dtLeg.Columns.Add("Diff_Bkd_LY"); dtLeg.Columns.Add("Diff_Bkd_SDL"); dtLeg.Columns.Add("Diff_Revenue"); dtLeg.Columns.Add("Max_Booked");
DataRow drLeg = dtLeg.NewRow();
drLeg["Case_Number"] = cNo; drLeg["Departure_Detail_Id"] = dDetID; drLeg["Departure_Id"] = dID; drLeg["Cabin_Class"] = cCls; drLeg["Leg_Segment_type"] = "Leg"; drLeg["Departure_Detail_Capture_Id"] = "43824017"; drLeg["DDC_Compartment_Id"] = System.DBNull.Value;
drLeg["Compartment_Structure_Id"] = System.DBNull.Value; drLeg["Compartment_Name"] = System.DBNull.Value;
dtLeg.Rows.Add(drLeg);
dtComp.Columns.Add("Case_Number"); dtComp.Columns.Add("Departure_Detail_Id"); dtComp.Columns.Add("Departure_Id"); dtComp.Columns.Add("Cabin_Class"); dtComp.Columns.Add("Leg_Segment_type"); dtComp.Columns.Add("Departure_Detail_Capture_Id");
dtComp.Columns.Add("DDC_Compartment_Id"); dtComp.Columns.Add("Compartment_Structure_Id"); dtComp.Columns.Add("Compartment_Name"); dtComp.Columns.Add("Compartment_id"); dtComp.Columns.Add("DDC_Class_Id"); dtComp.Columns.Add("Class_Structure_Id");
dtComp.Columns.Add("Class_Name"); dtComp.Columns.Add("Class_id"); dtComp.Columns.Add("DDC_Subclass_Id"); dtComp.Columns.Add("Subclass_Structure_Id"); dtComp.Columns.Add("Subclass_Name"); dtComp.Columns.Add("Subclass_id");
dtComp.Columns.Add("Adjusted_Authorizations"); dtComp.Columns.Add("Adjusted_Availability"); dtComp.Columns.Add("Adjusted_Bid_Price"); dtComp.Columns.Add("Adjusted_Boardings"); dtComp.Columns.Add("Adjusted_Bookings"); dtComp.Columns.Add("Adjusted_Load_Factor");
dtComp.Columns.Add("Adjusted_Physical_Load_Factor"); dtComp.Columns.Add("Adjusted_Revenue"); dtComp.Columns.Add("Adjusted_Revenue_Gain"); dtComp.Columns.Add("Adjusted_SCI"); dtComp.Columns.Add("Authorized_Capacity"); dtComp.Columns.Add("Average_Fare_Value"); dtComp.Columns.Add("Booked_Costs");
dtComp.Columns.Add("Booked_Revenue"); dtComp.Columns.Add("Class_Usage_Ratio"); dtComp.Columns.Add("Confidence"); dtComp.Columns.Add("Current_Authorizations"); dtComp.Columns.Add("Current_Availability"); dtComp.Columns.Add("Current_Bookings");
dtComp.Columns.Add("Current_SCI"); dtComp.Columns.Add("Go_Shows"); dtComp.Columns.Add("Group_Bookings"); dtComp.Columns.Add("Group_No_Show_Percentage"); dtComp.Columns.Add("Limit_Compartment"); dtComp.Columns.Add("Max_Constraint_Type");
dtComp.Columns.Add("Maximum_Authorizations_Constraint"); dtComp.Columns.Add("Maximum_Leg_Authorization"); dtComp.Columns.Add("Min_Constraint_Type"); dtComp.Columns.Add("Minimum_Authorizations_Constraint"); dtComp.Columns.Add("No_Show_Percentage"); dtComp.Columns.Add("No_Shows");
dtComp.Columns.Add("Overbooking_Amount"); dtComp.Columns.Add("Overbooking_Cost"); dtComp.Columns.Add("Physical_Capacity"); dtComp.Columns.Add("Projected_Authorized_Load_Factor"); dtComp.Columns.Add("Projected_Boardings"); dtComp.Columns.Add("Projected_Bookings");
dtComp.Columns.Add("Projected_Physical_Load_Factor"); dtComp.Columns.Add("Projected_Revenue"); dtComp.Columns.Add("Recommended_Authorized_Load_Factor"); dtComp.Columns.Add("Recommended_Authorizations"); dtComp.Columns.Add("Recommended_Availability"); dtComp.Columns.Add("Recommended_Bid_Price");
dtComp.Columns.Add("Recommended_Boardings"); dtComp.Columns.Add("Recommended_Bookings"); dtComp.Columns.Add("Recommended_Physical_Load_Factor"); dtComp.Columns.Add("Recommended_Revenue"); dtComp.Columns.Add("Recommended_Revenue_Gain"); dtComp.Columns.Add("Recommended_SCI");
dtComp.Columns.Add("Remaining_Cancellations"); dtComp.Columns.Add("Original_Demand"); dtComp.Columns.Add("Remaining_Demand"); dtComp.Columns.Add("Revenue_Target"); dtComp.Columns.Add("Standard_Deviation"); dtComp.Columns.Add("Theoretical_Capacity");
dtComp.Columns.Add("Total_Booked_Costs"); dtComp.Columns.Add("Total_Booked_Revenue"); dtComp.Columns.Add("Total_Group_Bookings"); dtComp.Columns.Add("Total_Projected_Demand"); dtComp.Columns.Add("Total_Waitlist"); dtComp.Columns.Add("Unit_Target");
dtComp.Columns.Add("Upsell_Adjusted_Demand"); dtComp.Columns.Add("Upsell_Authorizations"); dtComp.Columns.Add("Upsell_Availability"); dtComp.Columns.Add("Upsell_Boardings"); dtComp.Columns.Add("Upsell_Bookings"); dtComp.Columns.Add("Upsell_Probability");
dtComp.Columns.Add("Upsell_Revenue"); dtComp.Columns.Add("Upsell_Revenue_Gain"); dtComp.Columns.Add("Upsell_SCI"); dtComp.Columns.Add("Upsell_Remaining_Demand"); dtComp.Columns.Add("Usage_Ratio"); dtComp.Columns.Add("Waitlist");
dtComp.Columns.Add("Limit_Class"); dtComp.Columns.Add("rec_limit"); dtComp.Columns.Add("curr_limit"); dtComp.Columns.Add("App_Capacity"); dtComp.Columns.Add("Rec_Capacity"); dtComp.Columns.Add("Is_Summary");
dtComp.Columns.Add("Current_Resource_Limit1"); dtComp.Columns.Add("Recommand_Resource_Limit1"); dtComp.Columns.Add("Upsell_Resource_limit1"); dtComp.Columns.Add("Adjusted_Resource_limit1"); dtComp.Columns.Add("Current_Resource_Limit2"); dtComp.Columns.Add("Recommand_Resource_Limit2");
dtComp.Columns.Add("Upsell_Resource_limit2"); dtComp.Columns.Add("Adjusted_Resource_limit2"); dtComp.Columns.Add("Include_In_Total_Flag"); dtComp.Columns.Add("Keep_Curr_Auth"); dtComp.Columns.Add("Discrete_Recomended_Authorization"); dtComp.Columns.Add("Discrete_Upsell_Authorization");
dtComp.Columns.Add("Nesting_Type"); dtComp.Columns.Add("BookingPickup_DaysPrior_i"); dtComp.Columns.Add("BookingPickup_Per_DaysPrior_i"); dtComp.Columns.Add("BookingPickup_DaysPrior_j"); dtComp.Columns.Add("BookingPickup_Per_DaysPrior_j"); dtComp.Columns.Add("BookingPickup_DaysPrior_k");
dtComp.Columns.Add("BookingPickup_Per_DaysPrior_k"); dtComp.Columns.Add("SDL_Booked"); dtComp.Columns.Add("SDL_Booked_Percentage"); dtComp.Columns.Add("Travelled_Bookings"); dtComp.Columns.Add("Travelled_Bookings_Percentage"); dtComp.Columns.Add("PE_Authorization");
dtComp.Columns.Add("PE_Availability"); dtComp.Columns.Add("PE_Booking"); dtComp.Columns.Add("PE_Boarding"); dtComp.Columns.Add("PE_Revenue"); dtComp.Columns.Add("PE_Revenue_Gain"); dtComp.Columns.Add("Marginal_Fare");
dtComp.Columns.Add("Marginal_Demand"); dtComp.Columns.Add("Price_Elasticity"); dtComp.Columns.Add("PE_Group_ID"); dtComp.Columns.Add("PE_Demand"); dtComp.Columns.Add("Max_Alloc_Hus"); dtComp.Columns.Add("PAX_Buffer_Hus");
dtComp.Columns.Add("PAX_Buffer_Hus_Type"); dtComp.Columns.Add("Max_Alloc_Berths"); dtComp.Columns.Add("PAX_Buffer_Berths"); dtComp.Columns.Add("PAX_Buffer_Berths_Type"); dtComp.Columns.Add("IS_Sent"); dtComp.Columns.Add("StepType");
dtComp.Columns.Add("Adjusted_Authorizations_Calc"); dtComp.Columns.Add("SDL_BP_DP_i"); dtComp.Columns.Add("SDL_BP_DP_j"); dtComp.Columns.Add("SDL_BP_DP_k"); dtComp.Columns.Add("current_revenue"); dtComp.Columns.Add("revenue_SDL");
dtComp.Columns.Add("Diff_Bkd_LY"); dtComp.Columns.Add("Diff_Bkd_SDL"); dtComp.Columns.Add("Diff_Revenue"); dtComp.Columns.Add("Max_Booked"); dtComp.Columns.Add("COMPARTMENT_STRUCTURE_COMPARTMENT_ORDER");
DataRow drComp = dtComp.NewRow();
drComp["Case_Number"] = cNo; drComp["Departure_Detail_Id"] = dDetID; drComp["Departure_Id"] = dID; drComp["Cabin_Class"] = cCls; drComp["Leg_Segment_type"] = "Leg"; drComp["Departure_Detail_Capture_Id"] = "43824017"; drComp["DDC_Compartment_Id"] = "60513359";
drComp["Compartment_Structure_Id"] = 4; drComp["Compartment_Name"] = "J"; drComp["Compartment_id"] = 1; drComp["Adjusted_Authorizations"] = 8; drComp["Adjusted_Availability"] = 7; drComp["Adjusted_Boardings"] = 1; drComp["Adjusted_Bookings"] = 1;
drComp["Adjusted_Load_Factor"] = 0; drComp["Adjusted_Revenue"] = 349; drComp["Current_Authorizations"] = 8; drComp["Current_Availability"] = 7;
dtComp.Rows.Add(drComp);
DataRow drComp1 = dtComp.NewRow();
drComp1["Case_Number"] = cNo; drComp1["Departure_Detail_Id"] = dDetID; drComp1["Departure_Id"] = dID; drComp1["Cabin_Class"] = cCls; drComp1["Leg_Segment_type"] = "Leg"; drComp1["Departure_Detail_Capture_Id"] = "43824017"; drComp1["DDC_Compartment_Id"] = "60513360";
drComp1["Compartment_Structure_Id"] = 5; drComp1["Compartment_Name"] = "Y"; drComp1["Compartment_id"] = 2; drComp1["Adjusted_Authorizations"] = 114; drComp1["Adjusted_Availability"] = 97; drComp1["Adjusted_Boardings"] = 39; drComp1["Adjusted_Bookings"] = 39;
drComp1["Adjusted_Load_Factor"] = 0; drComp1["Adjusted_Revenue"] = 350; drComp1["Current_Authorizations"] = 10; drComp1["Current_Availability"] = 10;
dtComp.Rows.Add(drComp1);
dtClass.Columns.Add("Case_Number"); dtClass.Columns.Add("Departure_Detail_Id"); dtClass.Columns.Add("Departure_Id"); dtClass.Columns.Add("Cabin_Class"); dtClass.Columns.Add("Leg_Segment_type"); dtClass.Columns.Add("Departure_Detail_Capture_Id");
dtClass.Columns.Add("DDC_Compartment_Id"); dtClass.Columns.Add("Compartment_Structure_Id"); dtClass.Columns.Add("Compartment_Name"); dtClass.Columns.Add("Compartment_id"); dtClass.Columns.Add("DDC_Class_Id"); dtClass.Columns.Add("Class_Structure_Id");
dtClass.Columns.Add("Class_Name"); dtClass.Columns.Add("Class_id"); dtClass.Columns.Add("DDC_Subclass_Id"); dtClass.Columns.Add("Subclass_Structure_Id"); dtClass.Columns.Add("Subclass_Name"); dtClass.Columns.Add("Subclass_id");
dtClass.Columns.Add("Adjusted_Authorizations"); dtClass.Columns.Add("Adjusted_Availability"); dtClass.Columns.Add("Adjusted_Bid_Price"); dtClass.Columns.Add("Adjusted_Boardings"); dtClass.Columns.Add("Adjusted_Bookings"); dtClass.Columns.Add("Adjusted_Load_Factor");
dtClass.Columns.Add("Adjusted_Physical_Load_Factor"); dtClass.Columns.Add("Adjusted_Revenue"); dtClass.Columns.Add("Adjusted_Revenue_Gain"); dtClass.Columns.Add("Adjusted_SCI"); dtClass.Columns.Add("Authorized_Capacity"); dtClass.Columns.Add("Average_Fare_Value"); dtClass.Columns.Add("Booked_Costs");
dtClass.Columns.Add("Booked_Revenue"); dtClass.Columns.Add("Class_Usage_Ratio"); dtClass.Columns.Add("Confidence"); dtClass.Columns.Add("Current_Authorizations"); dtClass.Columns.Add("Current_Availability"); dtClass.Columns.Add("Current_Bookings");
dtClass.Columns.Add("Current_SCI"); dtClass.Columns.Add("Go_Shows"); dtClass.Columns.Add("Group_Bookings"); dtClass.Columns.Add("Group_No_Show_Percentage"); dtClass.Columns.Add("Limit_Compartment"); dtClass.Columns.Add("Max_Constraint_Type");
dtClass.Columns.Add("Maximum_Authorizations_Constraint"); dtClass.Columns.Add("Maximum_Leg_Authorization"); dtClass.Columns.Add("Min_Constraint_Type"); dtClass.Columns.Add("Minimum_Authorizations_Constraint"); dtClass.Columns.Add("No_Show_Percentage"); dtClass.Columns.Add("No_Shows");
dtClass.Columns.Add("Overbooking_Amount"); dtClass.Columns.Add("Overbooking_Cost"); dtClass.Columns.Add("Physical_Capacity"); dtClass.Columns.Add("Projected_Authorized_Load_Factor"); dtClass.Columns.Add("Projected_Boardings"); dtClass.Columns.Add("Projected_Bookings");
dtClass.Columns.Add("Projected_Physical_Load_Factor"); dtClass.Columns.Add("Projected_Revenue"); dtClass.Columns.Add("Recommended_Authorized_Load_Factor"); dtClass.Columns.Add("Recommended_Authorizations"); dtClass.Columns.Add("Recommended_Availability"); dtClass.Columns.Add("Recommended_Bid_Price");
dtClass.Columns.Add("Recommended_Boardings"); dtClass.Columns.Add("Recommended_Bookings"); dtClass.Columns.Add("Recommended_Physical_Load_Factor"); dtClass.Columns.Add("Recommended_Revenue"); dtClass.Columns.Add("Recommended_Revenue_Gain"); dtClass.Columns.Add("Recommended_SCI");
dtClass.Columns.Add("Remaining_Cancellations"); dtClass.Columns.Add("Original_Demand"); dtClass.Columns.Add("Remaining_Demand"); dtClass.Columns.Add("Revenue_Target"); dtClass.Columns.Add("Standard_Deviation"); dtClass.Columns.Add("Theoretical_Capacity");
dtClass.Columns.Add("Total_Booked_Costs"); dtClass.Columns.Add("Total_Booked_Revenue"); dtClass.Columns.Add("Total_Group_Bookings"); dtClass.Columns.Add("Total_Projected_Demand"); dtClass.Columns.Add("Total_Waitlist"); dtClass.Columns.Add("Unit_Target");
dtClass.Columns.Add("Upsell_Adjusted_Demand"); dtClass.Columns.Add("Upsell_Authorizations"); dtClass.Columns.Add("Upsell_Availability"); dtClass.Columns.Add("Upsell_Boardings"); dtClass.Columns.Add("Upsell_Bookings"); dtClass.Columns.Add("Upsell_Probability");
dtClass.Columns.Add("Upsell_Revenue"); dtClass.Columns.Add("Upsell_Revenue_Gain"); dtClass.Columns.Add("Upsell_SCI"); dtClass.Columns.Add("Upsell_Remaining_Demand"); dtClass.Columns.Add("Usage_Ratio"); dtClass.Columns.Add("Waitlist");
dtClass.Columns.Add("Limit_Class"); dtClass.Columns.Add("rec_limit"); dtClass.Columns.Add("curr_limit"); dtClass.Columns.Add("App_Capacity"); dtClass.Columns.Add("Rec_Capacity"); dtClass.Columns.Add("Is_Summary");
dtClass.Columns.Add("Current_Resource_Limit1"); dtClass.Columns.Add("Recommand_Resource_Limit1"); dtClass.Columns.Add("Upsell_Resource_limit1"); dtClass.Columns.Add("Adjusted_Resource_limit1"); dtClass.Columns.Add("Current_Resource_Limit2"); dtClass.Columns.Add("Recommand_Resource_Limit2");
dtClass.Columns.Add("Upsell_Resource_limit2"); dtClass.Columns.Add("Adjusted_Resource_limit2"); dtClass.Columns.Add("Include_In_Total_Flag"); dtClass.Columns.Add("Keep_Curr_Auth"); dtClass.Columns.Add("Discrete_Recomended_Authorization"); dtClass.Columns.Add("Discrete_Upsell_Authorization");
dtClass.Columns.Add("Nesting_Type"); dtClass.Columns.Add("BookingPickup_DaysPrior_i"); dtClass.Columns.Add("BookingPickup_Per_DaysPrior_i"); dtClass.Columns.Add("BookingPickup_DaysPrior_j"); dtClass.Columns.Add("BookingPickup_Per_DaysPrior_j"); dtClass.Columns.Add("BookingPickup_DaysPrior_k");
dtClass.Columns.Add("BookingPickup_Per_DaysPrior_k"); dtClass.Columns.Add("SDL_Booked"); dtClass.Columns.Add("SDL_Booked_Percentage"); dtClass.Columns.Add("Travelled_Bookings"); dtClass.Columns.Add("Travelled_Bookings_Percentage"); dtClass.Columns.Add("PE_Authorization");
dtClass.Columns.Add("PE_Availability"); dtClass.Columns.Add("PE_Booking"); dtClass.Columns.Add("PE_Boarding"); dtClass.Columns.Add("PE_Revenue"); dtClass.Columns.Add("PE_Revenue_Gain"); dtClass.Columns.Add("Marginal_Fare");
dtClass.Columns.Add("Marginal_Demand"); dtClass.Columns.Add("Price_Elasticity"); dtClass.Columns.Add("PE_Group_ID"); dtClass.Columns.Add("PE_Demand"); dtClass.Columns.Add("Max_Alloc_Hus"); dtClass.Columns.Add("PAX_Buffer_Hus");
dtClass.Columns.Add("PAX_Buffer_Hus_Type"); dtClass.Columns.Add("Max_Alloc_Berths"); dtClass.Columns.Add("PAX_Buffer_Berths"); dtClass.Columns.Add("PAX_Buffer_Berths_Type"); dtClass.Columns.Add("IS_Sent"); dtClass.Columns.Add("StepType");
dtClass.Columns.Add("Adjusted_Authorizations_Calc"); dtClass.Columns.Add("SDL_BP_DP_i"); dtClass.Columns.Add("SDL_BP_DP_j"); dtClass.Columns.Add("SDL_BP_DP_k"); dtClass.Columns.Add("current_revenue"); dtClass.Columns.Add("revenue_SDL");
dtClass.Columns.Add("Diff_Bkd_LY"); dtClass.Columns.Add("Diff_Bkd_SDL"); dtClass.Columns.Add("Diff_Revenue"); dtClass.Columns.Add("Max_Booked"); dtClass.Columns.Add("COMPARTMENT_STRUCTURE_COMPARTMENT_ORDER");
DataRow drClass = dtClass.NewRow();
drClass["Case_Number"] = cNo; drClass["Departure_Detail_Id"] = dDetID; drClass["Departure_Id"] = dID; drClass["Cabin_Class"] = cCls; drClass["Leg_Segment_type"] = "Leg"; drClass["Departure_Detail_Capture_Id"] = "43824017"; drClass["DDC_Compartment_Id"] = "60513360";
drClass["Compartment_Structure_Id"] = 5; drClass["Compartment_Name"] = "Y"; drClass["Compartment_id"] = 2; drClass["DDC_Class_Id"] = "6022025"; drClass["Class_Structure_Id"] = 4;
drClass["Class_Name"] = "Y"; drClass["Class_id"] = 4; drClass["Adjusted_Authorizations"] = 8; drClass["Adjusted_Availability"] = 7; drClass["Adjusted_Boardings"] = 1; drClass["Adjusted_Bookings"] = 1;
drClass["Adjusted_Load_Factor"] = 0; drClass["Adjusted_Revenue"] = 349; drClass["Current_Authorizations"] = 8; drClass["Current_Availability"] = 7;
dtClass.Rows.Add(drClass);
DataRow drClass1 = dtClass.NewRow();
drClass1["Case_Number"] = cNo; drClass1["Departure_Detail_Id"] = dDetID; drClass1["Departure_Id"] = dID; drClass1["Cabin_Class"] = cCls; drClass1["Leg_Segment_type"] = "Leg"; drClass1["Departure_Detail_Capture_Id"] = "43824017"; drClass1["DDC_Compartment_Id"] = "60513359";
drClass1["Compartment_Structure_Id"] = 4; drClass1["Compartment_Name"] = "J"; drClass1["Compartment_id"] = 1; drClass1["DDC_Class_Id"] = "6022020"; drClass1["Class_Structure_Id"] = 1;
drClass1["Class_Name"] = "J"; drClass1["Class_id"] = 1; drClass1["Adjusted_Authorizations"] = 8; drClass1["Adjusted_Availability"] = 7; drClass1["Adjusted_Boardings"] = 1; drClass1["Adjusted_Bookings"] = 1;
drClass1["Adjusted_Load_Factor"] = 0; drClass1["Adjusted_Revenue"] = 349; drClass1["Current_Authorizations"] = 8; drClass1["Current_Availability"] = 7;
dtClass.Rows.Add(drClass1);
DataRow drClass2 = dtClass.NewRow();
drClass2["Case_Number"] = cNo; drClass2["Departure_Detail_Id"] = dDetID; drClass2["Departure_Id"] = dID; drClass2["Cabin_Class"] = cCls; drClass2["Leg_Segment_type"] = "Leg"; drClass2["Departure_Detail_Capture_Id"] = "43824017"; drClass2["DDC_Compartment_Id"] = "60513359";
drClass2["Compartment_Structure_Id"] = 4; drClass2["Compartment_Name"] = "J"; drClass2["Compartment_id"] = 1; drClass2["DDC_Class_Id"] = "6022020"; drClass2["Class_Structure_Id"] = 17;
drClass2["Class_Name"] = "C"; drClass2["Class_id"] = 17; drClass2["Adjusted_Authorizations"] = 8; drClass2["Adjusted_Availability"] = 7; drClass2["Adjusted_Boardings"] = 1; drClass2["Adjusted_Bookings"] = 1;
drClass2["Adjusted_Load_Factor"] = 0; drClass2["Adjusted_Revenue"] = 349; drClass2["Current_Authorizations"] = 8; drClass2["Current_Availability"] = 7;
dtClass.Rows.Add(drClass2);
BindGrid();
}
catch(Exception)
{
throw;
}
}
private void BindGrid()
{
try
{
radGridWorksheet.MasterTemplate.Templates.Clear();
radGridWorksheet.Relations.Clear();
radGridWorksheet.DataSource = dtLeg;
radGridWorksheet.AllowAddNewRow = false;
radGridWorksheet.AllowDeleteRow = false;
radGridWorksheet.AllowEditRow = true;
radGridWorksheet.AutoGenerateColumns = true;
radGridWorksheet.BestFitColumns();
radGridWorksheet.GridViewElement.DrawBorder = false;
radGridWorksheet.GridViewElement.GroupPanelElement.DrawBorder = false;
GridViewTemplate childDetailCaptureDate = new GridViewTemplate();
childDetailCaptureDate.Caption = "Leg";
childDetailCaptureDate.Columns.Clear();
childDetailCaptureDate.AllowAddNewRow = false;
childDetailCaptureDate.AllowDeleteRow = false;
childDetailCaptureDate.AllowEditRow = true;
childDetailCaptureDate.AutoGenerateColumns = true;
childDetailCaptureDate.BestFitColumns();
childDetailCaptureDate.DataSource = dtComp;
radGridWorksheet.MasterTemplate.Templates.Add(childDetailCaptureDate);
GridViewRelation relationCaptureDate = new GridViewRelation(radGridWorksheet.MasterTemplate);
relationCaptureDate.ChildTemplate = childDetailCaptureDate;
relationCaptureDate.RelationName = "Capture";
relationCaptureDate.ParentColumnNames.Add("Departure_Detail_Capture_Id");
relationCaptureDate.ChildColumnNames.Add("Departure_Detail_Capture_Id");
radGridWorksheet.Relations.Add(relationCaptureDate);
GridViewTemplate childDetailCaptureDateComp = new GridViewTemplate();
childDetailCaptureDateComp.Caption = "Comp";
childDetailCaptureDateComp.Columns.Clear();
childDetailCaptureDateComp.AllowAddNewRow = false;
childDetailCaptureDateComp.AllowDeleteRow = false;
childDetailCaptureDateComp.AllowEditRow = true;
childDetailCaptureDateComp.AutoGenerateColumns = true;
childDetailCaptureDateComp.BestFitColumns();
childDetailCaptureDateComp.DataSource = dtClass;
childDetailCaptureDate.Templates.Add(childDetailCaptureDateComp);
GridViewRelation relationCaptureDateCompatment = new GridViewRelation(childDetailCaptureDate);
relationCaptureDateCompatment.ChildTemplate = childDetailCaptureDateComp;
relationCaptureDateCompatment.RelationName = "Compartment";
relationCaptureDateCompatment.ParentColumnNames.Add("DDC_Compartment_Id");
relationCaptureDateCompatment.ChildColumnNames.Add("DDC_Compartment_Id");
radGridWorksheet.Relations.Add(relationCaptureDateCompatment);
radGridWorksheet.MasterTemplate.ExpandAll();
}
catch(Exception e0)
{
MessageBox.Show(String.Format("{0}\n{1}", e0.Message, e0.StackTrace));
throw;
}
}
private void radButton1_Click(object sender, EventArgs e)
{
try
{
intClickCount = intClickCount + 1;
//Thread.Sleep(1000);
radButton1.Text = "Next Click " + intClickCount;
BindTables();
}
catch(Exception e0)
{
MessageBox.Show(String.Format("{0}\n{1}", e0.Message, e0.StackTrace));
throw;
}
}
}
To reproduce: please refer to the attached sample project and gif file
Workaround:
GridViewSpreadExport spreadExporter = new GridViewSpreadExport(this.radGridView1);
spreadExporter.ExportFormat = SpreadExportFormat.Pdf;
spreadExporter.ExportVisualSettings = true;
SpreadExportRenderer exportRenderer = new SpreadExportRenderer();
spreadExporter.RunExport(exportFile, exportRenderer);
Process.Start(exportFile);
To reproduce: set Excel-like filter according to the online documentation: https://docs.telerik.com/devtools/winforms/gridview/filtering/setting-filters-programmatically-(composite-descriptors)
this.radGridView1.DataSource = this.productsBindingSource;
this.productsTableAdapter.Fill(this.nwindDataSet.Products);
this.radGridView1.EnableFiltering = true;
this.radGridView1.ShowHeaderCellButtons = true;
var filterDescriptor = new FilterDescriptor();
filterDescriptor.PropertyName = "UnitsInStock";
filterDescriptor.Value = 101;
filterDescriptor.Operator = FilterOperator.IsEqualTo;
var filterDescriptor2 = new FilterDescriptor();
filterDescriptor2.PropertyName = "UnitsInStock";
filterDescriptor2.Value = 104;
filterDescriptor2.Operator = FilterOperator.IsEqualTo;
var cfd = new CompositeFilterDescriptor();
cfd.LogicalOperator = FilterLogicalOperator.Or;
cfd.FilterDescriptors.Add(filterDescriptor);
cfd.FilterDescriptors.Add(filterDescriptor2);
cfd.IsFilterEditor = true;
this.radGridView1.FilterDescriptors.Add(cfd);
this.radGridView1.MasterTemplate.ExcelFilteredColumns.Add(this.radGridView1.Columns["UnitsInStock"]);
You will notice that the filter popup contains all possible values for this column which is OK, but none of the nodes is checked. It is necessary the visible rows to be checked.
Workaround: check the nodes programmatically when the popup is shown:
private void radGridView1_FilterPopupInitialized(object sender, Telerik.WinControls.UI.FilterPopupInitializedEventArgs e)
{
RadListFilterPopup popup = e.FilterPopup as RadListFilterPopup;
if (popup!=null)
{
popup.Tag = e.Column.Name;
popup.PopupOpened-=popup_PopupOpened;
popup.PopupOpened+=popup_PopupOpened;
}
}
private void popup_PopupOpened(object sender, EventArgs args)
{
RadListFilterPopup popup = sender as RadListFilterPopup;
foreach (GridViewRowInfo row in this.radGridView1.ChildRows)
{
RadTreeNode node= popup.MenuTreeElement.TreeView.FindNodes(row.Cells[popup.Tag+""].Value.ToString()).FirstOrDefault();
if (node!=null)
{
node.Checked = true;
}
}
}
How to reproduce:
public partial class RadForm1 : Telerik.WinControls.UI.RadForm
{
public RadForm1()
{
InitializeComponent();
this.radGridView1.DataSource = this.GetData();
this.radGridView1.AutoSizeColumnsMode = Telerik.WinControls.UI.GridViewAutoSizeColumnsMode.Fill;
GridViewDecimalColumn decimalColumn = this.radGridView1.Columns[0] as GridViewDecimalColumn;
decimalColumn.DecimalPlaces = 2;
decimalColumn.FormatString = "{0:N2}";
decimalColumn.ExcelExportType = DisplayFormatType.Custom;
decimalColumn.ExcelExportFormatString = "0.000";
}
public object GridViewSpreaExport { get; private set; }
private object GetData()
{
DataTable dt = new DataTable();
dt.Columns.Add("Id", typeof(double));
dt.Columns.Add("Name", typeof(string));
dt.Columns.Add("Bool", typeof(bool));
dt.Columns.Add("Date", typeof(DateTime));
for (int i = 0; i < 100; i++)
{
dt.Rows.Add(1.10 + i, "Name " + i, i % 2 == 0, DateTime.Now.AddDays(i));
}
return dt;
}
private void radButton1_Click(object sender, EventArgs e)
{
GridViewSpreadStreamExport spreadExporter = new GridViewSpreadStreamExport(this.radGridView1);
spreadExporter.FileExportMode = FileExportMode.CreateOrOverrideFile;
SpreadStreamExportRenderer renderer1 = new SpreadStreamExportRenderer();
spreadExporter.RunExportAsync(@"..\..\exported-stream.xlsx", renderer1);
}
}
Workaround: Create a custom SpreadStreamExportRenderer
public class CustomSpreadStreamExportRenderer : SpreadStreamExportRenderer
{
public override void SetCellValue(DataType dataType, object value)
{
switch (dataType)
{
case DataType.Number:
this.SetNumberValue(value);
break;
case DataType.DateTime:
this.SetDateTimeValue(value);
break;
case DataType.Boolean:
this.SetBooleanValue(value);
break;
case DataType.Other:
if (this.SetNumberValue(value))
{
break;
}
if (this.SetDateTimeValue(value))
{
break;
}
if (this.SetBooleanValue(value))
{
break;
}
this.SetStringValue(value);
break;
case DataType.String:
default:
this.SetStringValue(value);
break;
}
}
}