GridView : Problème d'affichage d'indicateur de tri lorsque changement de page
Bonjour,
J'ai mis en place un gridview sur une page qui lorsque je tri sur l'une ou l'autre des colonnes affiche une image indiquant la colonne de tri et la direction du tri. Tout cela fonctionne très bien, mais lorsque je change de page l'image qui normalement devrait apparaitre au côté de l'en-tête sélectionnée n'apparait pas !
Auriez-vous une idée de la solution à mettre en œuvre pour résoudre ce problème ? Devrais-je ajouter quelque chose quelque part ?
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
|
<asp:GridView ID="GridView1" runat="server"
AutoGenerateColumns="False"
CellPadding="4"
ForeColor="#333333"
GridLines="None"
DataKeyNames="Identifiant"
AllowSorting="True"
onsorting="GridView1_Sorting"
onpageindexchanging="GridView1_PageIndexChanging"
OnRowCreated = "GridView1_OnRowCreated"
allowpaging="True"
PageSize="5"
EnableViewState="False"
>
<Columns>
</Columns>
</asp:GridView> |
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111
|
private String m_strSortExp;
private SortDirection m_SortDirection;
private DataSet Liste_GridView1
{
get { return (Session["Liste_GridView1"] == null) ? null : (DataSet) Session["Liste_GridView1"]; }
set { Session["Liste_GridView1"] = value; }
}
public string SortExpression
{
get { return (ViewState["sortExpression"]==null)? "Monchamp1": (string)ViewState["sortExpression"]; }
set { ViewState["sortDirection"] = value; }
}
public SortDirection SortDirection
{
get{return (ViewState["SortDirection"] == null)? SortDirection.Ascending : (SortDirection)ViewState["SortDirection"];}
set{ViewState["SortDirection"] = value;}
}
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
m_strSortExp = SortExpression;
m_SortDirection =SortDirection;
Liste_GridView1 = MaClasse.MaListeData().ToDataSet();
GridView1.DataSource = Liste_GridView1;
GridView1.DataBind();
}
}
protected void GridView1_PageIndexChanging(object sender, GridViewPageEventArgs e)
{
GridView1.DataSource = Liste_GridView1;
GridView1.PageIndex = e.NewPageIndex;
GridView1.DataBind();
}
protected void GridView1_Sorting(object sender, GridViewSortEventArgs e)
{
string sortExpression = e.SortExpression;
string direction = string.Empty;
switch(SortDirection)
{
case SortDirection.Ascending:
SortDirection = SortDirection.Descending;
SortExpression = sortExpression;
m_SortDirection = SortDirection;
m_strSortExp = sortExpression;
direction = " DESC";
break;
case SortDirection.Descending:
SortDirection = SortDirection.Ascending;
SortExpression = sortExpression;
m_SortDirection = SortDirection;
m_strSortExp = sortExpression;
direction = " ASC";
break;
}
DataTable table = Liste_GridView1.Tables[0];
table.DefaultView.Sort = sortExpression + direction;
GridView1.DataSource = table;
GridView1.DataBind();
}
protected void GridView1_OnRowCreated(object sender, GridViewRowEventArgs e)
{
if (e.Row.RowType == DataControlRowType.Header)
AddSortImage(e.Row);
}
private void AddSortImage(GridViewRow headerRow)
{
int selCol = GetSortColumnIndex(m_strSortExp);
if (-1 == selCol)
return;
Image sortImage = new Image();
if (SortDirection.Ascending == m_SortDirection)
sortImage.ImageUrl = "~/ressources/icones/asc.jpg";
else
sortImage.ImageUrl = "~/ressources/icones/desc.jpg";
headerRow.Cells[selCol].Controls.Add(sortImage);
}
private int GetSortColumnIndex(String strCol)
{
foreach (DataControlField field in LstClients.Columns)
if (field.SortExpression == strCol)
return LstClients.Columns.IndexOf(field);
return -1;
} |
Merci d'avance pour vos réponse