1

在我们的一个页面上,我们有一个表,其中包含在运行时生成的行。我想将这些行的内容移到它们自己的控件中,并在运行时在其上设置属性,以便将演示文稿与代码隐藏分开。但它没有按我预期的方式工作。

如果我的行控件继承自 UserControl,那么我可以这样做以在运行时创建控件:

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

然后,我想将其添加到我的表中:

MyTable.Rows.Add(row);

但是行不继承自 System.Web.UI.HtmlControls.HtmlTableRow 或 System.Web.UI.WebControls.TableRow,所以你不能这样做。但是,如果我让我的控件继承自这两者之一,那么上面的 LoadControl 调用会抱怨该控件不继承自 UserControl。

这里有什么快乐的解决方案?如果需要更多信息,请询问。

4

1 回答 1

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 集合中。你需要先把它包起来。可能有更清洁的解决方案,但这一个确实有效。

于 2009-04-30T15:21:16.647 回答