这确实是一个更笼统的问题,但我想提出的唯一方法是举一个具体的例子。

当前,我们有一个带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事件中添加列。

10-05 23:05