在我们的一个页面上,我们有一个在运行时生成行的表。我想将这些行的内容移动到它们自己的控件中,并在运行时设置它的属性,以便将表示与代码隐藏分开。但它并没有像我期待的那样发挥作用。
如果我从UserControl继承了类行控件,那么我可以在运行时创建控件:
MyControl row = (MyControl)LoadControl("~/controls/MyControl.ascx");
然后,我想将它添加到我的表中:
MyTable.Rows.Add(row);
但是row不会从System.Web.UI.HtmlControls.HtmlTableRow或System.Web.UI.WebControls.TableRow继承,所以你不能这样做。但是,如果我让我的控件继承其中一个,那么上面的LoadControl调用会抱怨控件不会从UserControl继承。
这里有什么快乐的解决方案?如果需要其他信息,请询问。
答案 0 :(得分:4)
我认为你要做的是:
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);
您所说的问题是您的控件无法从多个基类继承而您无法将控件直接添加到Rows集合中。你需要先把它包起来。可能有更清洁的解决方案,但这个解决方案确实有效。