Bonsoir,
j'ai un problème avec mon gridview, paging et sorting.
J'ai écrit un code, mais le problème il ne marche pas parfaitement c'est à dire :
quand je clique sur champ de trie pour la première fois le grid reste le même mais quand je clique une 2 ème fois le grid change selon le trie et puis il fonctionne correctement.
Mon souci est de corriger le fonctionnement au 1 er clique.
Voilà mon code :
Code :
//page load
if(!IsPostBack)
{
ChargerGrid();
}
private DataTable GetData()
{
#region Requête CAML sur la liste des projets
SPQuery objSPQuery = new SPQuery();
objSPQuery.ViewFields =
@"
<FieldRef Name='ID' />
<FieldRef Name='NomProjet' />
<FieldRef Name='ChefDeProjet' />
<FieldRef Name='DateDebut' />
<FieldRef Name='DateFinProjet' />";
objSPQuery.Query =
@" <OrderBy>
<FieldRef Name='DateDebut' Ascending='False' />
</OrderBy>";
objSPListItemCollection = objSPList.GetItems(objSPQuery);
#endregion
#region Affecter la valeur de la requête au grid
DataTable datatable = objSPListItemCollection.GetDataTable();
#endregion
return datatable;
}
publicvoid ChargerGrid()
{
try
{
GVProjet.DataSource = GetData();
GVProjet.DataBind();
}
catch(Exception E)
{
LblErreur.Text = E.Message;
}
}
privatestring GridViewSortDirection
{
get{return ViewState["SortDirection"]asstring ?? "ASC"; }
set{ ViewState["SortDirection"] = value; }
}
privatestring GridViewSortExpression
{
get{return ViewState["SortExpression"]asstring ?? string.Empty; }
set{ ViewState["SortExpression"] = value; }
}
privatestring GetSortDirection()
{
switch(GridViewSortDirection)
{
case"ASC":
GridViewSortDirection = "DESC";
break;
case"DESC":
GridViewSortDirection = "ASC";
break;
}
return GridViewSortDirection;
}
protected DataView SortDataTable(DataTable dataTable, bool isPageIndexChanging)
{
if(dataTable != null)
{
DataView dataView = new DataView(dataTable);
if(GridViewSortExpression != string.Empty)
{
if(isPageIndexChanging)
{
dataView.Sort = string.Format("{0} {1}", GridViewSortExpression, GridViewSortDirection);
}
else
{
dataView.Sort = string.Format("{0} {1}", GridViewSortExpression, GetSortDirection());
}
}
return dataView;
}
else
{
returnnew DataView();
}
}
protectedvoid GVProjet_Sorting(object sender, GridViewSortEventArgs e)
{
GridViewSortExpression = e.SortExpression;
int pageIndex = GVProjet.PageIndex;
//DataTable table = (DataTable)Session["datatable"];
GVProjet.DataSource = SortDataTable(GetData()as DataTable, false);
GVProjet.DataBind();
GVProjet.PageIndex = pageIndex;
}
Finalement, j'espère que vous m'aidez à résoudre mon problème.
Merci