Sorting i gridview virker ikke helt
Hej,Jeg har lavet en custom paging og sorting til mit gridview.
Paging virker fint.
Sorting virker også fint, hvis jeg sorterer på en side. Men går jeg så til næste (eller foregående side) har den mistet min sorting.
Jeg vil gerne have hjælp til, at finde ud af, hvad jeg skal gøre, så den ikke mister sorting, når jeg pager frem og tilbage. Men tager den sorting, der er valgt.
Min kode til paging og sorting:
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
//Henter employees listen
ShowEmployees();
}
//Sætter sessions data_table til ShowEmployees for paging
CreatePagingLinks(grdEmployeeList);
}
private void ShowEmployees()
{
int companyid = Convert.ToInt32(Session[ERSConnect.CookieCompanyId]);
ERSEmployees employee = new ERSEmployees();
try
{
DataTable Employee = null;
//Henter sorteringsmetode
string sortorder = "";
if (GridViewSortDirection == SortDirection.Ascending)
{
sortorder = "ASC";
}
else
{
sortorder = "DESC";
}
if (employee.getEmployees(companyid, sortorder, ref Employee) == Status.Success)
{
grdEmployeeList.DataSource = Employee.DefaultView;
//Binder datatabel til session, så den kan bruges i paging
Session["data_table"] = Employee;
grdEmployeeList.DataBind();
}
}
catch
{ }
}
//Paging
private void CreatePagingLinks(GridView DoGridView)
{
if (DoGridView.BottomPagerRow != null)
{
HtmlTableCell paginglinks = (HtmlTableCell)DoGridView.BottomPagerRow.FindControl("paginglinks");
if (paginglinks != null)
{
for (int i = 0; i < DoGridView.PageCount; i++)
{
LinkButton LinkButtonPage = new LinkButton();
LinkButtonPage.ID = "page" + i.ToString();
LinkButtonPage.CssClass = "pagingtext";
LinkButtonPage.ForeColor = ColorTranslator.FromHtml("#FFFFFF");
LinkButtonPage.CommandName = "ChangePage";
LinkButtonPage.CommandArgument = i.ToString();
LinkButtonPage.Visible = true;
LinkButtonPage.Text = (i + 1).ToString();
if (i == DoGridView.PageIndex)
{
// Ændre farve på selected sidenr.
LinkButtonPage.ForeColor = ColorTranslator.FromHtml("#29a1d7");
}
paginglinks.Controls.Add(LinkButtonPage);
Label LabelPageSpacing = new Label();
LabelPageSpacing.ID = "spacing" + i.ToString();
LabelPageSpacing.Text = " ";
paginglinks.Controls.Add(LabelPageSpacing);
}
}
}
}
protected void grdEmployeeList_RowCommand(object sender, GridViewCommandEventArgs e)
{
if (e.CommandName == "ShowEmployee")
{
}
else if (e.CommandName == "DeleteEmployee")
{
}
//Bruges til paging
else if (e.CommandName == "ChangePage")
{
int pageindex = Convert.ToInt32(e.CommandArgument);
DataTable search_datatable = (DataTable)Session["data_table"];
grdEmployeeList.DataSource = search_datatable.DefaultView;
grdEmployeeList.PageIndex = pageindex;
grdEmployeeList.DataBind();
CreatePagingLinks(grdEmployeeList);
}
}
protected void grdEmployeeList_PageIndexChanging(object sender, GridViewPageEventArgs e)
{
grdEmployeeList.PageIndex = e.NewPageIndex;
grdEmployeeList.DataBind();
}
protected void grdEmployeeList_RowDataBound(object sender, GridViewRowEventArgs e)
{
Boolean FirstPager = true;
if (e.Row.RowType == DataControlRowType.Pager)
{
FirstPager = !FirstPager;
// Read total count of employees from datatable
DataTable search_datatable = (DataTable)Session["data_table"];
int rowcount = search_datatable.Rows.Count;
Label LabelRowCount = (Label)e.Row.FindControl("LabelRowCount");
if (LabelRowCount != null)
{
LabelRowCount.Text = rowcount.ToString();
}
// Calculate first row and last row on current page
int pageindex = ((GridView)e.Row.Parent.Parent).PageIndex;
int pagesize = ((GridView)e.Row.Parent.Parent).PageSize;
int StartRowNo = (pageindex * pagesize) + 1;
Label LabelStartRowNo = (Label)e.Row.FindControl("LabelStartRowNo");
if (LabelStartRowNo != null)
{
LabelStartRowNo.Text = StartRowNo.ToString();
}
int EndRowNo = StartRowNo + pagesize - 1;
if (EndRowNo >= rowcount)
{
EndRowNo = rowcount;
}
Label LabelEndRowNo = (Label)e.Row.FindControl("LabelEndRowNo");
if (LabelEndRowNo != null)
{
LabelEndRowNo.Text = EndRowNo.ToString();
}
// Set pageindex for next/previous linkbuttons
int pagecount = ((GridView)e.Row.Parent.Parent).PageCount;
LinkButton LinkButtonPreviousPage = (LinkButton)e.Row.FindControl("LinkButtonPreviousPage");
if (LinkButtonPreviousPage != null)
{
if (pageindex == 0)
{
LinkButtonPreviousPage.CommandArgument = pageindex.ToString();
LinkButtonPreviousPage.Visible = false;
}
else
{
LinkButtonPreviousPage.CommandArgument = (pageindex - 1).ToString();
}
}
LinkButton LinkButtonNextPage = (LinkButton)e.Row.FindControl("LinkButtonNextPage");
if (LinkButtonNextPage != null)
{
if (pageindex == (pagecount - 1))
{
LinkButtonNextPage.CommandArgument = pageindex.ToString();
LinkButtonNextPage.Visible = false;
}
else
{
LinkButtonNextPage.CommandArgument = (pageindex + 1).ToString();
}
}
}
}
public SortDirection GridViewSortDirection
{
get
{
if (ViewState["sortDirection"] == null)
ViewState["sortDirection"] = SortDirection.Ascending;
return (SortDirection)ViewState["sortDirection"];
}
set { ViewState["sortDirection"] = value; }
}
protected void grdEmployeeList_Sorting(object sender, GridViewSortEventArgs e)
{
string sortExpression = e.SortExpression;
if (GridViewSortDirection == SortDirection.Ascending)
{
GridViewSortDirection = SortDirection.Descending;
SortGridView(sortExpression, " DESC");
}
else
{
GridViewSortDirection = SortDirection.Ascending;
SortGridView(sortExpression, " ASC");
}
}
private void SortGridView(string sortExpression, string direction)
{
DataTable dt = (DataTable)Session["data_table"];
DataView dv = new DataView(dt);
dv.Sort = sortExpression + " " + direction;
grdEmployeeList.DataSource = dv;
grdEmployeeList.DataBind();
CreatePagingLinks(grdEmployeeList);
}
mvh
simsen :-)