У меня есть пользовательский элемент управления GridView в моем сайте, в основном просто класс расширения GridView вДобавление пользовательских GridView для контроля за сбором
ITCSGridView : GridView
Это вызвало ошибку в экспорте, чтобы преуспеть функцию, которая добавляет элемент управления ячейку таблицы и затем экспортировать ее. Линия ошибка происходит на это:
NewTableCell(ATable).Controls.Add(AControl);
И исключение брошено является:
The Controls collection cannot be modified because the control contains code blocks (i.e. <% ... %>).
До меня расширения GridView управления, функция экспорта работала. Единственный способ, с помощью которого я смог заставить его работать, - передать первый дочерний элемент управления настраиваемого GridView (который имеет тип System.Web.UI.WebControl.ChildTable), но затем я теряю требуемый стиль.
Любая помощь была бы принята с благодарностью.
Edit: добавлен дополнительный код ниже
Обычай GridView класса
public class ITCSGridView : GridView
{
private const string ControlHeaderBackColor = "#B0E0E6";
private const string ControlHeaderForeColor = "#000000";
private const string ControlSelectedRowStyleForeColor = "#335555";
public ITCSGridView() : base()
{
ControlProperties();
HeaderProperties();
PagerProperties();
RowProperties();
}
private void ControlProperties()
{
EnableTheming = true;
Width = new Unit("100%");
SkinID = "ITCSGridView";
CellPadding = 2;
BorderStyle = BorderStyle.None;
HorizontalAlign = HorizontalAlign.Center;
AllowSorting = true;
}
private void HeaderProperties()
{
HeaderStyle.HorizontalAlign = HorizontalAlign.Left;
HeaderStyle.BackColor = ColorTranslator.FromHtml(ControlHeaderBackColor);
HeaderStyle.ForeColor = ColorTranslator.FromHtml(ControlHeaderForeColor);
HeaderStyle.Font.Bold = false;
}
private void PagerProperties()
{
AllowPaging = true;
PageSize = SASMisc.DDLGridViewPageSize;
PagerSettings.Position = PagerPosition.TopAndBottom;
PagerSettings.Mode = PagerButtons.NumericFirstLast;
PagerSettings.FirstPageText = "First";
PagerSettings.LastPageText = "Last";
}
private void RowProperties()
{
RowStyle.Wrap = false;
SelectedRowStyle.ForeColor = ColorTranslator.FromHtml(ControlSelectedRowStyleForeColor);
SelectedRowStyle.Font.Bold = false;
}
В классе, который обрабатывает экспортирующей элемент управления в Excel, управление System.Web.UI.WebControls.Table создается и элемент управления GridView добавляется в TableCell в Table Control, вызов NewTableCell (ATable) - это метод, который возвращает System.Web.UI.WebControls.TableCell. Это в основном только:
// The GridView control is passed directly to this method from the aspx.cs
private void AddControlToTable(System.Web.UI.WebControls.Table ATable, Control AControl){
var Table = new System.Web.UI.WebControls.Table();
// Excpetion thrown on line below (this works when using standard GridView instead of custom extended)
NewTableCell(ATable).Controls.Add(AControl);
}
private TableCell NewTableCell(System.Web.UI.WebControls.Table ATable)
{
TableCell Lcell = new TableCell();
TableRow LRow = new TableRow();
LRow.Cells.Add(Lcell);
ATable.Rows.Add(LRow);
return Lcell;
} // private TableCell AddToTable(Table ATable)
И NewTableCell (ATable) .Controls.Add (AControl); происходит в вашем новом классе? –
Элемент управления Custom GridView не передан классу экспорта, эта строка кода находится в классе экспорта. –
Я добавил пользовательский код GridView и немного объяснил код экспорта, дайте мне знать, если вы считаете, что требуется больше. –