我用 ObjectDataSource + ASPxGridView创建了一个UserControl 。ObjectDataSource 的SelectMethod我根据 UserControl 的公共参数动态设置:
private int _companyID = -1;
public int CompanyID
{
get { return _companyID; }
set
{
_companyID = value;
dsPersons.SelectMethod = "GetPersonsByCompany";
dsPersons.SortParameterName = "sort";
dsPersons.SelectParameters.Clear();
dsPersons.SelectParameters.Add("companyID", DbType.Int32, value.ToString());
}
}
当我像这样在 Page 上使用我的控件时:
<uc:PersonsManager ID="personsManager" runat="server" CompanyID="2" />
或者像这样把它放在另一个 ASPxGridView 中:
<dxwgv:ASPxGridView ID="gridViewCompany" runat="server" DataSourceID="dsCompany" KeyFieldName="ID" Width="100%"
AutoGenerateColumns="false">
<Columns>
<dxwgv:GridViewDataColumn>
<DataItemTemplate>
<uc:PersonsManager ID="personsManager" runat="server" CompanyID='<%# Bind("ID") %>' />
</DataItemTemplate>
</dxwgv:GridViewDataColumn>
</Columns>
</dxwgv:ASPxGridView>
一切正常,但我想从代码隐藏中声明 Control 参数:
<uc:PersonsManager ID="personsManager" runat="server" />
然后在 Page_Load 上:
personsManager.CompanyID = 2;
如果我使用先前的声明,那么我只能看到 UserControl 的 ASPxGridView 第一次加载一些数据,因为任何操作都会导致 UserControl 的 ASPxGridView 的 HtmlRowCreated 事件发生错误:
除非指定了 SelectMethod,否则 ObjectDataSource 'dsPersons' 不支持 Select 操作。
为什么会这样?
谢谢。