1

我用 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 操作。

为什么会这样?

谢谢。

4

2 回答 2

0

查看Eran Nachum的这篇博文“手动设置 ObjectDataSource.SelectMethod 属性错误”。他描述了您必须如何在 OnInit 事件期间设置网格的数据源,然后在 OnPreRender 期间执行数据绑定。

(上面引用的网站不再活跃。在wayback machine上有一篇博文:Eran Nachum's Blog from December 2007 in the wayback machine

于 2010-09-17T00:46:40.300 回答
0

当您添加对象数据源时,您会看到一个向导,让您可以在对象上选择支持数据库典型 CRUD 方法的方法。

单击您的 objectDataSource 的智能标签并选择“配置数据源”,您将看到。

然后看看http://msdn.microsoft.com/en-us/library/9a4kyhcx.aspx了解如何实现这些方法..

祝你好运。

于 2010-02-16T09:21:36.403 回答