Question

Sur l'une de nos pages, nous avons une table dans laquelle les lignes sont générées au moment de l'exécution. Je souhaite déplacer le contenu de ces lignes dans leur propre contrôle et y définir des propriétés lors de l'exécution, afin de séparer la présentation du code-behind. Mais cela ne fonctionne pas comme prévu.

Si mon contrôle de type ligne hérite de UserControl, je peux le faire pour créer le contrôle au moment de l'exécution:

MyControl row = (MyControl)LoadControl("~/controls/MyControl.ascx");

Ensuite, je voulais ajouter cela à mon tableau:

MyTable.Rows.Add(row);

Mais la ligne n'hérite pas de System.Web.UI.HtmlControls.HtmlTableRow ou System.Web.UI.WebControls.TableRow, vous ne pouvez donc pas le faire. Toutefois, si je fais hériter mon contrôle de l’un des deux, l’appel LoadControl ci-dessus se plaint que le contrôle n’hérite pas de UserControl.

Quelle est la solution heureuse ici? Si des informations supplémentaires sont nécessaires, veuillez demander.

Était-ce utile?

La solution

Je pense que ce que vous cherchez à faire est le suivant:

    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);

Le problème, comme vous l'avez indiqué, est que votre contrôle ne peut pas hériter de plusieurs classes de base et vous ne pouvez pas ajouter votre contrôle directement à la collection Rows. Vous devez d'abord l'envelopper. Il y a peut-être des solutions plus propres, mais celle-ci fonctionne.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top