ObjectDataSource SelectCountMethod not Executing

时间:2011-11-04 17:32:58

标签: c# asp.net objectdatasource

这是关于myIdea-project-during-worktime项目。我正在使用ObjectDataSource来填充GridView。出于某种原因,“页面”部分(应该位于网格的底部)不会出现。我在这里查看了其他类似问题的答案,但未能弄清楚我的代码出了什么问题。

GridView看起来像这样:

<asp:GridView ID="GridView1" 
            runat="server" 
            AllowPaging="True"
            PageSize="10" 
            AutoGenerateColumns="False" 
            DataKeyNames="rowid"
            DataSourceID="PopulateGridView">
 ........
 </asp:GridView>

GridView正在使用ObjectDataSource“PopulateGridView”。 “PopulateGridView”看起来像这样:

<asp:ObjectDataSource 
ID="PopulateGridView" 
runat="server"
TypeName="SurveyItemInfo"
SelectMethod="GetPagedData"
EnablePaging="True"
SelectCountMethod="GetRowCount"
StartRowIndexParameterName="startRow"
MaximumRowsParameterName="pageSize"
SortParameterName="sortColumns"
OnObjectCreated="SurveyItemInfo_ObjectCreated">
</asp:ObjectDataSource>

使用“GetPagedData”和“GetRowCount”等方法创建“SurveyItemInfo”类。 GetPagedData如下所示:

 public DataTable GetPagedData(string sortColumns, int startRow, int pageSize)
    {
        // datatable
        DataTable dt = new DataTable();
        string sql;

        // Create connection
        SqlConnection con = new SqlConnection(_connectionString);

        // Create command
        sql = "";
        SqlCommand cmd = new SqlCommand();
        cmd.Connection = con;
        cmd.CommandType = CommandType.StoredProcedure;
        cmd.CommandText = "dbo.epm_ListSurveyItemForReportPaged";
        cmd.Parameters.AddWithValue("@reportid", reportid);
        cmd.Parameters.AddWithValue("@startRow", startRow);
        //cmd.Parameters.AddWithValue("@pageSize", pageSize);
        cmd.Parameters.AddWithValue("@pageSize", 50);

        // Execute command
        using (con)
        {
            con.Open();
            SqlDataReader reader = cmd.ExecuteReader();
            dt.Load(reader);
            //reader.Close();
        }
        return dt;
    }

我正在使用此方法的一个sproc来获取分页数据到网格。请注意,我已经注释掉了sproc获取页面大小(行数)的第3个参数的行。我在这里使用硬编码值来测试目的。

通过调试时我发现方法GetPagedData的参数startRow和pageSize的值为零。另外我不确定它,但不是ObjectdataSource的SelectCountMethod(GetRowCount)应该执行一次的方法吗?事实并非如此。

此方法具有以下代码:

public int GetRowCount()
{
    using (SqlConnection conn = new SqlConnection(_connectionString))
    {
        conn.Open();
        using (SqlCommand cmd = new SqlCommand("SELECT COUNT(1) FROM dbo.data_SurveyItem where reportid=" + reportid.ToString(), conn))
        {
            return (int)cmd.ExecuteScalar();
        }
    }
}

所以问题是数字页面链接浏览到不同的页面不会出现在GridView的底部。对于GridView和ObjectDataSource,都启用了分页和排序(虽然我没有使用排序)。我不确定我还缺少什么。 谢谢你的帮助。

0 个答案:

没有答案