我使用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());
}
}
当我在页面上使用我的控件时:
<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事件出错:
不支持“选择”操作 除非是ObjectDataSource'dsPersons' 指定了SelectMethod。
为什么会这样?
感谢。
答案 0 :(得分:0)
添加对象数据源时,会出现一个向导,您可以通过该向导选择对象上支持数据库典型CRUD方法的方法。
单击objectDataSource的smarttag并选择“configure datasource”,您将看到。
然后看一下http://msdn.microsoft.com/en-us/library/9a4kyhcx.aspx来学习如何实现这些方法。
祝你好运。答案 1 :(得分:0)
通过 Eran Nachum 查看此博文"Manually Set ObjectDataSource.SelectMethod Property BUG"。他描述了如何在OnInit事件期间设置网格的数据源,然后在OnPreRender期间进行数据绑定。
(上面引用的网站不再有效。在返回机器上有一篇博文:Eran Nachum's Blog from December 2007 in the wayback machine)