У меня возникают некоторые данные ручной сортировки вручную в gridview. Я использовал набор данных и установил AllowSort равным true, а также написал код для обработки сортировки на основе руководства, указанного на https://msdn.microsoft.com/en-us/library/system.web.ui.webcontrols.gridview.sorting.aspx. Однако, когда я запускаю свой код, данные отображаются, но когда я нажимаю заголовок каждого столбца, ничего не происходит. вот мой кодВручную сортировка данных в Gridview в asp.Net Webforms
protected void Page_Load(object sender, EventArgs e)
{
string connstring = ConfigurationManager.ConnectionStrings["Conn"].ConnectionString;
SqlConnection conn = new SqlConnection(connstring);
conn.Open();
SqlCommand comm = conn.CreateCommand();
comm.CommandText = "SELECT Count(Student.StudentID) AS StdCount, Schools.Name, Schools.StartDate, School.SchoolFees FROM Schools INNER JOIN Students ON Schools.SchoolID = Student.SchoolID WHERE School.Active = 1 GROUP BY Schools.Name, Schools.StartDate, Schools.SchoolFess ORDER BY Schools.Name ASC";
SqlDataAdapter da = new SqlDataAdapter(comm);
DataSet ds = new DataSet();
da.Fill(ds);
if (ds.Tables.Count > 0)
{
DataTable dt = ds.Tables[0];
ViewState["datable"] = dt;
}
GridView1.DataSource = ds;
GridView1.DataBind();
}
protected void GridView1_Sorting(object sender, GridViewSortEventArgs e)
{
//Retrieve the table from the session object.
DataTable dt = (DataTable)ViewState["datable"];
if (dt != null)
{
//Sort the data.
dt.DefaultView.Sort = e.SortExpression + " " + GetSortDirection(e.SortExpression);
GridView1.DataSource = ViewState["datable"];
GridView1.DataBind();
}
}
private string GetSortDirection(string column)
{
// By default, set the sort direction to ascending.
string sortDirection = "ASC";
// Retrieve the last column that was sorted.
string sortExpression = ViewState["SortExpression"] as string;
if (sortExpression != null)
{
// Check if the same column is being sorted.
// Otherwise, the default value can be returned.
if (sortExpression == column)
{
string lastDirection = ViewState["SortDirection"] as string;
if ((lastDirection != null) && (lastDirection == "ASC"))
{
sortDirection = "DESC";
}
}
}
// Save new values in ViewState.
ViewState["SortDirection"] = sortDirection;
ViewState["SortExpression"] = column;
return sortDirection;
}
Любая помощь будет оценена. Спасибо
Вы отлаживали, чтобы узнать, какое значение возвращает ваша функция? Создайте переменную 'string sortOrder = GetSortDirection (e.SortExpression);' и поставьте точку останова –
Пожалуйста, не храните такие объекты, как таблицы данных в ViewState. ViewState не предназначен для использования в качестве механизма кэширования для тяжелых материалов. Сделайте еще один запрос к базе данных или кеширование на стороне сервера, но не просмотрите состояние. – Andrei
Кроме того, вы повторно привязываете GridView с данными на каждой странице_load.Нет необходимости делать это, оберните этот код в 'if (! Page.IsPostback)' – Andrei