telerik reporting: variable column width in programatically created table
I'm dynamically creating the columns of a table in a telerik report. This is the code:
//create two HtmlTextBox items (one for header and one for data) which would be added to the items collection of the table
Telerik.Reporting.HtmlTextBox textboxGroup;
Telerik.Reporting.HtmlTextBox textBoxTable;
//we do not clear the Rows collection, since we have a details row group and need to create columns only
this.table1.ColumnGroups.Clear();
this.table1.Body.Columns.Clear();
this.table1.Body.Rows.Clear();
int i = 0;
this.table1.ColumnHeadersPrintOnEveryPage = true;
var attributes = _objectInstances.First().ObjectType.Attributes;
foreach (var attribute in attributes)
{
if (str开发者_C百科ing.IsNullOrWhiteSpace(attribute.ColumnName) || !_objectInstances.First().Dictionary.ContainsKey(attribute.ColumnName)) continue;
var tableGroupColumn = new Telerik.Reporting.TableGroup();
this.table1.ColumnGroups.Add(tableGroupColumn);
this.table1.Body.Columns.Add(new Telerik.Reporting.TableBodyColumn(Unit.Inch(1)));
textboxGroup = new Telerik.Reporting.HtmlTextBox();
textboxGroup.Style.BorderColor.Default = Color.Black;
textboxGroup.Style.BorderStyle.Default = BorderType.Solid;
textboxGroup.Value = attribute.ColumnName;
textboxGroup.Size = new SizeU(Unit.Inch(1.1), Unit.Inch(0.3));
tableGroupColumn.ReportItem = textboxGroup;
textBoxTable = new Telerik.Reporting.HtmlTextBox();
textBoxTable.Style.BorderColor.Default = Color.Black;
textBoxTable.Style.BorderStyle.Default = BorderType.Solid;
textBoxTable.Value = "=Fields." + attribute.ColumnName;
textBoxTable.Size = new SizeU(Unit.Inch(1.1), Unit.Inch(0.3));
this.table1.Body.SetCellContent(0, i++, textBoxTable);
this.table1.Items.AddRange(new ReportItemBase[] {textBoxTable, textboxGroup});
}
The problem with this is that the column width is fixed. If I try to use textbox.Dock = DockStyle.Fill; I get an object reference error. Is there a way to automatically adjust the column width according to the content ?
if (dt.Columns[i].ColumnName == "Employee Number")
{
textBoxTable.Size = new SizeU(Unit.Inch(.5), Unit.Inch(0.3));
}
if (dt.Columns[i].ColumnName == "Employee Name")
{
textboxGroup.Size = new SizeU(Unit.Inch(2.1), Unit.Inch(0.3));
}
else
{
textBoxTable.Size = new SizeU(Unit.Inch(.90), Unit.Inch(0.3));
}
if (dt.Columns[i].ColumnName.ToLower().Contains("share"))
{
textBoxTable.Style.Color = Color.Chocolate;
textboxGroup.Size = new SizeU(Unit.Inch(0.9), Unit.Inch(0.3));
}
精彩评论