正确使用asp.net webforms生命周期

时间:2012-06-13 14:55:11

标签: c# asp.net .net web-parts

这确实是一个更普遍的问题,但我能想到的唯一方法就是用一个具体的例子。

我们目前有一个SPGridView的网站部分。就像现在一样,GV和所有绑定字段都在CreateChildControls中创建,数据被检索并绑定在OnPreRender中。列是静态的,所以这很好。

CreateChildControls{
    // create and configure the gridview
    // create all bound fields and add them to the gridview
    // add the gridview to the page
}

OnPreRender{
    // get the data and bind it to the gridview
}

现在我们需要将列更改为依赖于用户从下拉列表中做出的选择。在CreateChildControls范围内,我们无法从下拉控件中获取值,因此我们无法有条件地添加绑定字段。我的问题是,这里的最佳做法是什么?我们可以在CreateChildControls中创建所有可能的绑定字段,然后只在OnPreRender中将相应的字段添加到GV中。我们可以将所有绑定字段的创建完全移动到OnPreRender。还有很多其他选择。

CreateChildControls{
    // create and configure the gridview
    // create ALL bound fields here?
    // add the gridview to the page
}

OnPreRender{
    // or maybe create only the applicable bound fields here?
    // add the appropriate fields to the gridview
    // get the data and bind it to the gridview
}

从更一般的意义上说,真正构成“创造”控制的是什么(CreateChildControls的目的)?问题实际上扩展到任何可能具有动态内容的控件。将条目添加到下拉列表中的适当位置在哪里等等。有很多方法可以工作,但这是“正确的”?是否将选择添加到“创建”控件的下拉部分?是否取决于选择是否是动态的?

1 个答案:

答案 0 :(得分:0)

BoundField不是控件,gridview中的Columns集合是状态管理的,因此您可以在数据绑定控件之前安全地添加PreRender事件中的列。