【发布时间】:2010-10-17 03:50:27
【问题描述】:
我正在为数据读取器中提取的每条记录添加一个用户控件,这是基本循环:
while (dr.Read())
{
ImageSelect imgSel = new ImageSelect(dr["Name"].ToString());
myPanel.Controls.Add(imgSel);
}
问题是页面中没有添加任何控件,我检查了html输出并且有我的面板,里面什么都没有。
我什至在调试器中单步执行了代码,并验证了 myPanel.Controls 在每个循环中都添加了一个控件,计数为 6,没有错误,但是它们没有显示在页面上。
我在 Page_Init 和 Page_Load 事件中运行了上面的代码,结果相同。
编辑: 好的,所以我已经切换到使用 LoadControl("....ascx") 来获取我的控件实例,该实例现在正在工作。但最初我也是通过控件构造函数传递数据。这仍然可能还是我只需要通过 get/sets 设置它们?
编辑 2: 感谢 Freddy 指出 LoadControl 有一个重载,您可以在其中传递构造函数参数,请参阅接受的答案。
编辑 3: 在有和没有构造函数的情况下尝试了这个方法之后。我发现只对我希望控件具有的任何属性使用设置器比尝试为我的构造函数使用传入的对象数组更好。
【问题讨论】:
-
@Neil 有可能,发布了我的答案的更新。
-
请记住,重载与另一个重载的工作方式不同,因此如果您有设计器项目,您可能会遇到空引用异常。如果需要,我的博客上有一个扩展方法可以解决它。
-
在尝试了传入的参数后,我认为 Freddies 关于使用 setter 的建议是更好的选择。
标签: c# asp.net user-controls