ObjectDataSource SelectCountMethod не выполняется - PullRequest
1 голос
/ 04 ноября 2011

Речь идет о проекте myIdea-проект во время работы. Я использую 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>

Класс «SurveyItemInfo» создается с помощью таких методов, как «GetPagedData» и «GetRowCount». 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 получает третий параметр для размера страницы (количество строк). Я использую здесь жестко запрограммированное значение для проверки цели.

При отладке я обнаружил, что значения для параметра startRow и pageSize для метода GetPagedData равны нулю. Также я не уверен в этом, но разве метод для SelectCountMethod (GetRowCount) ObjectdataSource не должен выполняться один раз? Это не так.

Этот метод имеет следующий код:

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 подкачка и сортировка включены (хотя я не использую сортировку). Я не совсем уверен, что еще мне не хватает. Спасибо за вашу помощь.

...