Я пытаюсь сделать сортировку gridview, которая использует хранимую процедуру в качестве источника данных, я бы не хотел, чтобы она каждый раз повторно выполняла запрос для достижения этой цели. Как мне заставить его работать, мой текущий код:
protected override void OnPreRender(EventArgs e)
{
if (!IsPostBack)
{
SqlCommand cmd2 = new SqlCommand("SR_Student_Course_List", new SqlConnection(System.Configuration.ConfigurationManager.ConnectionStrings["RDCV2ConnectionString"].ConnectionString));
try
{
cmd2.CommandType = CommandType.StoredProcedure;
cmd2.CommandTimeout = 120;
cmd2.Parameters.Add("student_id", SqlDbType.Char, 11).Value = student;
cmd2.Connection.Open();
grdCourses.DataSource = cmd2.ExecuteReader();
grdCourses.DataSourceID = string.Empty;
grdCourses.DataBind();
} finally
{
cmd2.Connection.Close();
cmd2.Connection.Dispose();
cmd2.Dispose();
}}}
Этот код просто связывает данные, когда это не обратная передача, для gridview включено состояние просмотра. При нажатии заголовков столбцов происходит обратная передача, но сортировка не происходит. Если у кого-то есть простое исправление для этого, дайте мне знать, или, что еще лучше, сортировка ajax, которая позволила бы избежать обратной передачи, была бы еще лучше. Набор данных относительно невелик, однако запрос занимает много времени, поэтому я не хотел бы запрашивать повторно каждый вид.





Вы можете попробовать сохранить данные в состоянии просмотра (или в кеше).
Если вы не просматриваете результаты, а просто читаете, то что-то вроде плагина jquery tablesorter будет быстрым и легким решением. Я использовал это на таблицах до 1400 строк и отлично работает, хотя ~> несколько сотен, вероятно, лучше на медленных путях.
Если gridview можно редактировать, то проверка события / ввода aspnet может показаться пустышкой, если вы не пройдете надлежащую регистрацию клиентских скриптов и т. д.
В вашем случае я бы использовал SqlDataAdapter и заполнил DataTable. Затем поместите DataTable в переменную сеанса. Когда GridView выполняет сортировку, проверьте, существует ли еще переменная сеанса. Если это не так, то снова заполните DataTable. Наконец, отсортируйте DataTable с помощью DataView и повторно свяжите GridView с DataView.
Используемый сортировщик таблиц jquery работает фантастически, мой вывод набора данных составляет всего 20 строк максимум, но это долгое время, чтобы вычислить его, поскольку это агрегированные данные.