ObjectDataSource - >未指定SelectMethod

问题描述 投票:1回答:2

我用ObjectDataSource + ASPxGridView创建了一个UserControl。 ObjectDataSource的SelectMethod我根据UserControl的public参数动态设置:

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事件出错:

除非指定了SelectMethod,否则ObjectDataSource'dsPersons'不支持Select操作。

为什么会这样?

谢谢。

asp.net aspxgridview
2个回答
0
投票

添加对象数据源时,会出现一个向导,该向导允许您选择对象上支持数据库典型CRUD方法的方法。

单击objectDataSource的smarttag并选择“configure datasource”,您将看到。

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

祝好运。


0
投票

看看这篇由Eran Nachum撰写的"Manually Set ObjectDataSource.SelectMethod Property BUG"博客文章。他描述了如何在OnInit事件期间设置网格的数据源,然后在OnPreRender期间进行数据绑定。

(上面提到的网站不再有效。在回程机器上有一个博客文章的副本:Eran Nachum's Blog from December 2007 in the wayback machine

© www.soinside.com 2019 - 2024. All rights reserved.