你好朋友,我的分页工作正常,但是当对任何列进行排序时,它会在第一页上排序,但在下一页上排序会丢失。
请任何人都可以帮我解决这个问题。
我的 .aspx 标记代码
<asp:TemplateField HeaderText="Actions" ItemStyle-Width="20%">
<ItemTemplate>
<a href='#' onclick="javascript:view_data(<%#Eval("Substance_ID")%>)"><span class="glyphicon glyphicon-eye-open"></span>View</a>
<a href='edit.aspx?id=<%#Eval("Substance_ID")%>'><span class="glyphicon glyphicon-pencil"></span>Edit</a>
<a href='delete.aspx?id=<%#Eval("Substance_ID")%>'><span class="glyphicon glyphicon-trash"></span>Delete</a>
</ItemTemplate>
</asp:TemplateField>
<asp:BoundField DataField="Substance_ID" HeaderText="Substance ID" SortExpression="Substance_ID" />
<asp:TemplateField HeaderText="CAS Number" ItemStyle-Width="10%" SortExpression="CAS_Number">
<ItemTemplate>
<%# Eval("CAS_Number").ToString().Trim()%>
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText="EC Number" ItemStyle-Width="10%" SortExpression="EC_Number">
<ItemTemplate>
<%# Eval("EC_Number").ToString().Trim()%>
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText="Substance Name" SortExpression="Substance_Name">
<ItemTemplate>
<%#Eval("Substance_Name").ToString().Trim()%>
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText="Primary SG ID" ItemStyle-Width="10%" SortExpression="Primary_SG_ID">
<ItemTemplate>
<%#Eval("Primary_SG_ID")%>
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText="Status" ItemStyle-Width="5%" SortExpression="Status">
<ItemTemplate>
<%#Eval("Status")%>
</ItemTemplate>
</asp:TemplateField>
</Columns>
<PagerStyle CssClass="my_pagination" />
<PagerSettings Mode="NumericFirstLast" FirstPageText="First" LastPageText="Last" PageButtonCount="10" />
<EmptyDataTemplate>No Data</EmptyDataTemplate>
</asp:GridView>
<asp:Label runat="server" ID="lblCount"></asp:Label>
我的代码背后:
protected void Page_Load(object sender, EventArgs e)
{
if(!IsPostBack)
{
BindGridViewData();
}
}
private void BindGridViewData()
{
List<Substance_Display> Substance_List = new List<Substance_Display>();
Substance_List = Substance_MasterAccessLayer.GetAllSubstances("Substance_ID");
Substance_Master.DataSource = Substance_List;
Substance_Master.DataBind();
lblCount.Text = "Total " + Substance_List.Count().ToString() + " Records found.";
}
protected void Substance_Master_PageIndexChanging(object sender, GridViewPageEventArgs e)
{
Substance_Master.PageIndex = e.NewPageIndex;
Substance_Master.DataBind();
}
private void SortGridView(GridView Substance_Master, GridViewSortEventArgs e, out SortDirection sortDirection, out string sortField)
{
sortField = e.SortExpression;
sortDirection = e.SortDirection;
if (Substance_Master.Attributes["CurrentSortField"] != null & Substance_Master.Attributes["CurrentSortDirection"] != null)
{
if (sortField == Substance_Master.Attributes["CurrentSortField"])
{
if (Substance_Master.Attributes["CurrentSortDirection"] == "ASC")
{
sortDirection = SortDirection.Descending;
}
else
{
sortDirection = SortDirection.Ascending;
}
}
Substance_Master.Attributes["CurrentSortField"] = sortField;
Substance_Master.Attributes["CurrentSortDirection"] = (sortDirection == SortDirection.Ascending ? "ASC" : "DESC");
}
}
protected void Substance_Master_Sorting(object sender, GridViewSortEventArgs e)
{
SortDirection sortDirection = SortDirection.Ascending;
string sortField = string.Empty;
SortGridView(Substance_Master, e, out sortDirection, out sortField);
string strSortDirection = sortDirection == SortDirection.Ascending ? "ASC" : "DESC";
Substance_Master.DataSource = Substance_MasterAccessLayer.GetAllSubstances(e.SortExpression + " " + strSortDirection);
Substance_Master.DataBind();
}
编辑:我建议采用以下方法来解决该问题:
将您的
Page_Load
方法更改为:
protected void Page_Load(object sender, EventArgs e)
{
if(!IsPostBack)
{
Substance_Master.Attributes["CurrentSortField"] = "Substance_ID";
Substance_Master.Attributes["CurrentSortDirection"] = "ASC";
BindGridViewData();
}
}
并将
Substance_Master_PageIndexChanging
方法更改为:
protected void Substance_Master_PageIndexChanging(object sender, GridViewPageEventArgs e)
{
Substance_Master.PageIndex = e.NewPageIndex;
var sortField = Substance_Master.Attributes["CurrentSortField"];
var sortDirection = Substance_Master.Attributes["CurrentSortDirection"];
if (sortField != null && sortDirection != null)
{
Substance_Master.DataSource = Substance_MasterAccessLayer.GetAllSubstances(sortField + "" + sortDirection);
}
Substance_Master.DataBind();
}
说明: 在 PageIndexChanging 事件方法中进行数据绑定之前,需要先设置 GridView 的数据源。并且您可能需要根据当前的排序条件对数据源进行排序。