这确实是一个更笼统的问题,但我想提出的唯一方法是举一个具体的例子。
当前,我们有一个带SPGridView
的Webpart。现在,将在CreateChildControls
中创建GV和所有绑定字段,并在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
的目的)?问题实际上扩展到了可能具有动态内容的任何控件。在哪里将条目添加到下拉列表等的合适位置在哪里。有很多方法可以工作,但是哪一种是“正确的”呢?是否将选择添加到“创建”控件的下拉部分中?是否取决于选择是否动态? 最佳答案
BoundField
不是控件,并且gridview中的Columns
集合是状态管理的,因此您可以在对控件进行数据绑定之前安全地在PreRender
事件中添加列。