У меня есть элемент управления GridView, который загружается на страницу и действует как гнездо для других GridView. Каждый дочерний GridView содержит те же столбцы и типы данных, и поэтому я хочу, чтобы пользователь мог щелкнуть LinkButton для сортировки каждого из этих GridViews с помощью указанного выражения сортировки. Вот код, который у меня есть до сих пор, который не работает. Он просто переходит в PostBack, но возвращает данные в том же порядке.ASP.NET Сортировка каждого Gridview в коллекции
foreach (Control c in Page.Controls)
{
if (c.ID == "dgvResults")
{
GridView s = (GridView)c;
DataTable dataTable = s.DataSource as DataTable;
if (dataTable != null)
{
DataView dataView = new DataView(dataTable);
dataView.Sort = "OEN ASC";
s.DataSource = dataView;
s.DataBind();
}
}
}
Edit 1: Я обнаружил, что DataSource больше не связан с PostBack, так что я должен хранить GridView DataSource как DataTable в переменной сеанса. Теперь я не могу заставить это работать.
Редактировать 2: Я попытался сохранить Gridview.DataSource как в событиях DataBinding, так и в DataBound моего дочернего GridViews, но они никогда не сохраняются в любом случае. Когда я пытаюсь вызвать их снова в приведенном выше коде, переменная сеанса, которая должна содержать Datatable, не существует.
Вот код, который я поставил, чтобы хранить DataTable:
// The variable 's' represents the GridView control that triggered the DataBinding event
Session["dtResults"] = s.DataSource as DataTable;
// The code below is how I call the Session variable that I set earlier in the DataBinding event
if (Session["dtResults"] != null)
{
DataTable dataTable = (DataTable)Session["dtResults"];
...
}
Вы включили 'viewstate' для gridview и попытались? –
ViewState уже включен, и я также попытался сохранить данные в переменной ViewState []. Мне, возможно, придется идти по пути к гнезду GridView и группировать мои данные, хранящиеся в одном элементе управления GridView. – JJT