Adicionar linha à tabela em tempo de execução
-
03-07-2019 - |
Pergunta
Em uma de nossas páginas, temos uma tabela que tem linhas geradas em tempo de execução. Eu quero mover o conteúdo dessas linhas para fora em suas próprias propriedades de controle e definir sobre ele em tempo de execução, a fim de separar a apresentação do código-behind. Mas ele não está funcionando da maneira que eu estou esperando.
Se eu tiver a minha linha-like herdar o controle de UserControl, então eu posso fazer isso para criar o controle em tempo de execução:
MyControl row = (MyControl)LoadControl("~/controls/MyControl.ascx");
Então, eu queria acrescentar que a minha mesa:
MyTable.Rows.Add(row);
Mas fileira não herda de System.Web.UI.HtmlControls.HtmlTableRow ou System.Web.UI.WebControls.TableRow, então você não pode fazer isso. No entanto, se eu faço o meu herdar o controle de um dos dois, então a chamada LoadControl acima reclama que o controle não herda de UserControl.
Qual é a solução feliz aqui? Se é necessária informação adicional, por favor, pergunte.
Solução
Eu acho que o que você está procurando fazer é esta:
MyControl row = (MyControl)LoadControl("~/controls/MyControl.ascx");
TableCell newCell = new TableCell();
newCell.Controls.Add(row);
TableRow newRow = new TableRow();
newRow.Cells.Add(newCell);
MyTable.Rows.Add(newRow);
O problema como você disse é que seu controle não pode herdar de várias classes de base e você não pode adicionar seu controle diretamente para a coleção de linhas. Você precisa primeiro envolvê-la. Pode haver soluções mais limpas, mas este não funciona.