Aggiungi riga alla tabella in fase di esecuzione
-
03-07-2019 - |
Domanda
Su una delle nostre pagine, abbiamo una tabella con righe generate in fase di esecuzione. Voglio spostare il contenuto di quelle righe nel loro controllo e impostarne le proprietà in fase di esecuzione, al fine di separare la presentazione dal code-behind. Ma non funziona come mi aspetto.
Se ho il mio controllo simile a una riga ereditato da UserControl, allora posso farlo per creare il controllo in fase di esecuzione:
MyControl row = (MyControl)LoadControl("~/controls/MyControl.ascx");
Quindi, volevo aggiungerlo al mio tavolo:
MyTable.Rows.Add(row);
Ma row non eredita da System.Web.UI.HtmlControls.HtmlTableRow o System.Web.UI.WebControls.TableRow, quindi non puoi farlo. Tuttavia, se eredito il mio controllo da uno di questi due, la chiamata LoadControl sopra si lamenta che il controllo non eredita da UserControl.
Qual è la felice soluzione qui? Se sono necessarie ulteriori informazioni, si prega di chiedere.
Soluzione
Penso che quello che stai cercando di fare sia questo:
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);
Il problema, come affermato, è che il controllo non può ereditare da più classi base e non è possibile aggiungere il controllo direttamente alla raccolta Rows. Devi prima avvolgerlo. Potrebbero esserci soluzioni più pulite, ma questa funziona.