Итак, я создал сеточное представление и обработчики пейджинга / сортировки, которые я изучил из руководств и адаптировал для размещения двух моих сеточных представлений:
paging
protected void GridView_PageIndexChanging(object sender, GridViewPageEventArgs e)
{
((GridView)sender).PageIndex = e.NewPageIndex; // updatepanel allows this to happen without refreshing
}
сортировка
protected void GridView_Sort(object sender, GridViewSortEventArgs e)
{
string sortdir;
ViewState["SortExpression"] = e.SortExpression;
if (GridViewSortDirection.ToString() == "Ascending")
{
sortdir = "ASC";
GridViewSortDirection = SortDirection.Descending;
}
else
{
sortdir = "DESC";
GridViewSortDirection = SortDirection.Ascending;
}
var expression = e.SortExpression;
var gv = sender as GridView;
DataView gridv = ((DataSet)gv.DataSource).Tables[0].DefaultView; // get GridView datasource as a DataView as it is easier to sort
gridv.Sort = expression + " " + sortdir; // strict formatted string here; e.g: Subject ASC
gv.DataSource = gridv;
gv.DataBind();
}
}
Некоторое время назад все работало нормально, но, возвращаясь к проекту сейчас, я обнаружил, что для изменения страниц требуется два щелчка по ссылке с номером страницы, а не один, и после одного изменения страницы он перестанет отвечать на запросы.щелчки.
Сами представления сетки заполняются правильными данными и отображаются.Любые предложения о том, где искать, если вы не можете точно сказать, что не так, было бы замечательно.
Также у меня есть настройка точек останова для наблюдения за вызовами обработчиков событий, и они это делают.
РЕДАКТИРОВАТЬ:
<asp:GridView ID="CurrentGridView" runat="server" CssClass="CurrentGridView"
AllowPaging="True" AllowSorting="True"
AutoGenerateColumns="False" CellPadding="4" EnableModelValidation="True" ForeColor="#333333"
OnSorting="GridView_Sort"
GridLines="None" Width="600px" EnableSortingAndPagingCallbacks="True"
OnPageIndexChanging="GridView_PageIndexChanging" >
<AlternatingRowStyle BackColor="White" ForeColor="#284775" />
<Columns>
<asp:BoundField DataField="ID" HeaderText="ID" SortExpression="ID" >
<ItemStyle Width="30px" />
</asp:BoundField>
<asp:HyperLinkField DataNavigateUrlFields="Url" DataTextField="Subject"
HeaderText="Subject" SortExpression="Subject" >
<ControlStyle CssClass="SubjectColumn" />
<ItemStyle Width="200px" />
</asp:HyperLinkField>
<asp:BoundField DataField="Status" HeaderText="Status" SortExpression="Status">
<ItemStyle HorizontalAlign="Center" />
</asp:BoundField>
<asp:BoundField DataField="Created" HeaderText="Logged Date"
SortExpression="Created" HtmlEncodeFormatString="False">
<ControlStyle CssClass="LoggedDate" />
<ItemStyle HorizontalAlign="Right" Width="80px" />
</asp:BoundField>
</Columns>
<EditRowStyle BackColor="#999999" />
<FooterStyle BackColor="#5D7B9D" Font-Bold="True" ForeColor="White" />
<HeaderStyle BackColor="#5D7B9D" Font-Bold="True" ForeColor="White" />
<PagerStyle CssClass="PagerStyle" ForeColor="White" HorizontalAlign="Center" />
<RowStyle BackColor="#F7F6F3" VerticalAlign="Top" ForeColor="#333333" />
<SelectedRowStyle BackColor="#E2DED6" Font-Bold="True" ForeColor="#333333" />
</asp:GridView>
и
<asp:GridView ID="HistoricalGridView" runat="server"
AutoGenerateColumns="False" CellPadding="4" EnableSortingAndPagingCallbacks="True" EnableModelValidation="True" ForeColor="#333333"
GridLines="None" Width="600px">
<AlternatingRowStyle BackColor="White" ForeColor="#284775" />
<Columns>
<asp:BoundField DataField="ID" HeaderText="ID" SortExpression="ID" />
<asp:HyperLinkField DataNavigateUrlFields="Url" DataTextField="Subject"
HeaderText="Subject" SortExpression="Subject">
<ControlStyle ForeColor="#5D7B9D" />
</asp:HyperLinkField>
<asp:BoundField DataField="Status" HeaderText="Status" SortExpression="Status" >
<ItemStyle HorizontalAlign="Center" />
</asp:BoundField>
<asp:BoundField DataField="Created" HeaderText="Logged Date" SortExpression="Created">
<ItemStyle HorizontalAlign="Right" Width="80px" />
</asp:BoundField>
</Columns>
<EditRowStyle BackColor="#999999" />
<FooterStyle BackColor="#5D7B9D" Font-Bold="True" ForeColor="White" />
<HeaderStyle BackColor="#5D7B9D" Font-Bold="True" ForeColor="White" />
<PagerStyle CssClass="PagerStyle" ForeColor="White" HorizontalAlign="Center" />
<RowStyle BackColor="#F7F6F3" ForeColor="#333333" />
<SelectedRowStyle BackColor="#E2DED6" Font-Bold="True" ForeColor="#333333" />
</asp:GridView>
РЕДАКТИРОВАТЬ: я вижу, что DataSets обнуляются, когда они попадают в обработчики сортировки / подкачки, но у меня ничего нетявная их повторная инициализация или обнуление.