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