对象数据源选择方法在代码调用中不返回任何内容

时间:2010-09-28 19:46:36

标签: asp.net objectdatasource webforms

我有一个ObjectDataSource,其中配置了SelectMethodSelectParameters。数据源绑定到网格视图,该网格视图在页面加载时成功显示数据。

我需要的是能够重新运行Select定义的ObjectDataSource方法以存储在变量中并操纵其中的项目。我一直遇到的问题是调用.Select()方法总是返回0行,尽管它正确地填充了网格视图。

有没有理由我无法在对象数据源上手动重新运行Select()方法?

更新2:

以下是我设置ObjectDataSource

的方法
myObjectDataSource.TypeName = typeof(MyDataAccessObject).ToString();
myObjectDataSource.SelectMethod = "GetBy" + stringVariable;
myObjectDataSource.SelectCountMethod = "GetCountBy" + stringVariable;
myObjectDataSource.EnablePaging = true;

更新1:

我在链接按钮的Select()事件上运行OnClick

protected void LinkButton1_Click(object sender, EventArgs e)
{
    SetupDataSource(); // populates the objSource's SelectMethod, SelectParameters and TypeName etc.
    var items = objSource.Select();
    int count = items.Count(); // returns 0;
}

Page_Load事件中设置了ObjectDataSource(SelectMethod和SelectParameters)。

ObjectDataSource定义:

<asp:ObjectDataSource ID="objSource" runat="server" EnablePaging="True" SortParameterName="sortExpression" ></asp:ObjectDataSource>

GridView定义:

        <asp:GridView 
        ID="myGridView" 
        runat="server" 
        DataSourceID="objSource"
        AllowPaging="true"
        ShowHeader="true" 
        AutoGenerateColumns="false"
        AllowSorting="true" 
        Width="100%" >

3 个答案:

答案 0 :(得分:1)

事实证明,基础数据访问对象的方法考虑了分页,并且返回.Take(maximumRows)始终为0。

作为一种解决方法,我通过myObjectDataSource.EnablePaging = false;以编程方式禁用分页,然后创建了一个不考虑分页的新功能(需要新功能,因为ObjectDataSource正在寻找具有特定参数的功能)。

答案 1 :(得分:0)

你没有提到何时(在什么情况下你试图重新绑定到DataSource) 简短的代码段可能会有所帮助。

如果你在Postback中,那么Gridview不会在回发时重新绑定,它们的行将从viewstate中撤回。在页面加载(或初始化?)时将gridview的DatasourceID重置为对象数据源ID将导致gridview反弹。

答案 2 :(得分:0)

之前我遇到过类似的问题。我认为.Select()是使用DataReader实现的,一旦读取器为空,就会调用Select,因此对.Select或.Count()的任何后续调用都将返回空结果。

因此,您可以做的是使用.ToList()将结果存储在列表中,然后继续重复使用列表。