2015-09-02 2 views
0

У меня есть пользовательский элемент управления 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) 
+0

И NewTableCell (ATable) .Controls.Add (AControl); происходит в вашем новом классе? –

+0

Элемент управления Custom GridView не передан классу экспорта, эта строка кода находится в классе экспорта. –

+0

Я добавил пользовательский код GridView и немного объяснил код экспорта, дайте мне знать, если вы считаете, что требуется больше. –

ответ

0

Вы, наверное, на той же странице/или управления включены на странице кусок разметки, в котором вы делаете это:

<%= DateTime.Now %> 

DateTime.Now только для иллюстрации - дело <%= %>. Это винтовое дерево управления & делает динамическое добавление элементов управления (как вы делаете это невозможно). Обходной путь прост - приложите все <%= %> к runat="server" control - лучший контроль для этого является заполнителем.

Так <%= DateTime.Now %> становится

<asp:PlaceHolder runat="server"> 
    <%= DateTime.Now %> 
</asp:PlaceHolder> 

дерево управления последовательно и вы можете добавить элементы управления динамически коде еще раз.

+0

На этом веб-сайте есть разметка, и я мог бы изменить их все, но я все еще немного смущен, но почему это происходит, если я изменю ссылку в aspx обратно на стандартный GridView, это работает еще раз. В элементе управления нет таких блоков кода, как только они состоят из класса cs. –

Смежные вопросы