OVH Cloud OVH Cloud

Trier un datagrid...

6 réponses
Avatar
gilder89
Bonjour,
je souhaiterai trier un datagrid... . Je me suis donc renseigné et j'ai vue
qu'aprés avoir activé le "AllowSorting", il fallait implémenter l'évenement
SortComand (ici : private void resultats_SortCommand(object source,
system.Web.UI.WebControls.DataGridSortCommandEventArgs e).

Dans cet évenement je réutilise le code que j'avais utilisé pour remplir le
datagrid (lier le datagrid avec un dataset qui contient ma requete) et dans
ma requete je rajoute : ... ORDER BY e.SortExpression .

Je pensais que ca allait marcher mais lorsque que je clic sur le lien de
sorting d'une colonne, cela me recharge bien la page mais sans le datagrid.

Aprés avoir débogué je me suis rendu compte que ma méthode "private void
resultats_SortCommand(object source,
system.Web.UI.WebControls.DataGridSortCommandEventArgs e)" n'était pas
éxécutée.
Je ne comprends pas pourquoi cette exécution n'a pas lieu... .

Avez vous uneindication à me fournir????

6 réponses

Avatar
Frédéric Queudret [MS]
Bonjour,

Est-ce que la méthode de gestion de l'événement est bien enregistrée à
l'événement SortCommand du DataGrid?
Par exemple (pour un contrôle nommé DataGrid1):
this.DataGrid1.SortCommand += new
System.Web.UI.WebControls.DataGridSortCommandEventHandler(this.DataGrid1_SortCommand);

Visible par défaut dans la partie de code de la page:
#region Web Form Designer generated code

Méthode: private void InitializeComponent()

Sinon serait-il possible d'avoir la page avec le codebehind qui pose
problème?

Frédéric.

"gilder89" wrote in message
news:
Bonjour,
je souhaiterai trier un datagrid... . Je me suis donc renseigné et j'ai
vue
qu'aprés avoir activé le "AllowSorting", il fallait implémenter
l'évenement
SortComand (ici : private void resultats_SortCommand(object source,
system.Web.UI.WebControls.DataGridSortCommandEventArgs e).

Dans cet évenement je réutilise le code que j'avais utilisé pour remplir
le
datagrid (lier le datagrid avec un dataset qui contient ma requete) et
dans
ma requete je rajoute : ... ORDER BY e.SortExpression .

Je pensais que ca allait marcher mais lorsque que je clic sur le lien de
sorting d'une colonne, cela me recharge bien la page mais sans le
datagrid.

Aprés avoir débogué je me suis rendu compte que ma méthode "private void
resultats_SortCommand(object source,
system.Web.UI.WebControls.DataGridSortCommandEventArgs e)" n'était pas
éxécutée.
Je ne comprends pas pourquoi cette exécution n'a pas lieu... .

Avez vous uneindication à me fournir????




Avatar
Norm
il y a bien un databind de fait après avoir reaaffectué ton datasource?

"gilder89" a écrit dans le message de
news:
Bonjour,
je souhaiterai trier un datagrid... . Je me suis donc renseigné et j'ai
vue
qu'aprés avoir activé le "AllowSorting", il fallait implémenter
l'évenement
SortComand (ici : private void resultats_SortCommand(object source,
system.Web.UI.WebControls.DataGridSortCommandEventArgs e).

Dans cet évenement je réutilise le code que j'avais utilisé pour remplir
le
datagrid (lier le datagrid avec un dataset qui contient ma requete) et
dans
ma requete je rajoute : ... ORDER BY e.SortExpression .

Je pensais que ca allait marcher mais lorsque que je clic sur le lien de
sorting d'une colonne, cela me recharge bien la page mais sans le
datagrid.

Aprés avoir débogué je me suis rendu compte que ma méthode "private void
resultats_SortCommand(object source,
system.Web.UI.WebControls.DataGridSortCommandEventArgs e)" n'était pas
éxécutée.
Je ne comprends pas pourquoi cette exécution n'a pas lieu... .

Avez vous uneindication à me fournir????




Avatar
gilder89
Bonjour,

Donc, oui cette commande est bien présente (mon datagrid s'appelle résultat) :
this.resultats.SortCommand += new
System.Web.UI.WebControls.DataGridSortCommandEventHandler(this.resultats_SortCommand);

Pour que cela soit plus concret, voici les parties de mon code où le
problème devrait se situer:

==> génération de mon datagrid :
//...
string sql = "";
sql = sql+"SELECT Themes.LibelleFR as Theme,FAQ.LibelleFR as
Titre,DATENAME("yyyy",DatePubli) as Date,Contenu,Lien ";
sql = sql+"FROM FAQ,Themes ";
sql = sql+"WHERE FAQ.IdTheme=Themes.Id "+leWhere;

DataSet lesResultats = laConn.GetSelDs(sql,"lesRes");

//On empeche l'auto génération des colonnes
resultats.AutoGenerateColumns = false;
resultats.AllowSorting = true;

//Création des colonnes
//Theme
BoundColumn resultatscol = new BoundColumn();
resultatscol.HeaderText = "Thème";
resultatscol.DataField = "theme";
resultatscol.SortExpression = "theme";
resultats.Columns.Add(resultatscol);
//Titre
resultatscol = new BoundColumn();
resultatscol.HeaderText = "Intitulé";
resultatscol.DataField = "Titre";
resultatscol.SortExpression = "Titre";
resultats.Columns.Add(resultatscol);
//Lien
HyperLinkColumn resultatsHcol = new HyperLinkColumn();
resultatsHcol.HeaderText = "Lien";
resultatsHcol.DataTextField = "Lien";
resultatsHcol.DataNavigateUrlField = "Lien";
resultats.Columns.Add(resultatsHcol);

resultats.DataSource = lesResultats.Tables["lesRes"].DefaultView;
resultats.DataBind();

//***************************************************
==> Mon évenement :
//***************************************************

private void resultats_SortCommand(object source,
System.Web.UI.WebControls.DataGridSortCommandEventArgs e)
{
//...
string sql = "";
sql = sql+"SELECT Themes.LibelleFR as Theme,FAQ.LibelleFR as
Titre,DATENAME("yyyy",DatePubli) as Date,Contenu,Lien ";
sql = sql+"FROM FAQ,Themes ";
sql = sql+"WHERE FAQ.IdTheme=Themes.Id "+leWhere;
DataSet lesResultats = laConn.GetSelDs(sql,"lesRes");
lesResultats.Tables["lesRes"].DefaultView.Sort = e.SortExpression;
//On empeche l'auto génération des colonnes
resultats.AutoGenerateColumns = false;

//Création des colonnes
//Theme
BoundColumn resultatscol = new BoundColumn();
resultatscol.HeaderText = "Thème";
resultatscol.DataField = "theme";
resultatscol.SortExpression = resultatscol.DataField;
resultats.Columns.Add(resultatscol);
//Titre
resultatscol = new BoundColumn();
resultatscol.HeaderText = "Intitulé";
resultatscol.DataField = "Titre";
resultatscol.SortExpression = resultatscol.DataField;
resultats.Columns.Add(resultatscol);
//Lien
HyperLinkColumn resultatsHcol = new HyperLinkColumn();
resultatsHcol.HeaderText = "Lien";
resultatsHcol.DataTextField = "Lien";
resultatsHcol.DataNavigateUrlField = "Lien";
resultats.Columns.Add(resultatsHcol);

resultats.DataSource = lesResultats.Tables["lesRes"].DefaultView;
resultats.DataBind();
}

//*********************************************************

"Frédéric Queudret [MS]" a écrit :

Bonjour,

Est-ce que la méthode de gestion de l'événement est bien enregistrée à
l'événement SortCommand du DataGrid?
Par exemple (pour un contrôle nommé DataGrid1):
this.DataGrid1.SortCommand += new
System.Web.UI.WebControls.DataGridSortCommandEventHandler(this.DataGrid1_SortCommand);

Visible par défaut dans la partie de code de la page:
#region Web Form Designer generated code

Méthode: private void InitializeComponent()

Sinon serait-il possible d'avoir la page avec le codebehind qui pose
problème?

Frédéric.

"gilder89" wrote in message
news:
> Bonjour,
> je souhaiterai trier un datagrid... . Je me suis donc renseigné et j'ai
> vue
> qu'aprés avoir activé le "AllowSorting", il fallait implémenter
> l'évenement
> SortComand (ici : private void resultats_SortCommand(object source,
> system.Web.UI.WebControls.DataGridSortCommandEventArgs e).
>
> Dans cet évenement je réutilise le code que j'avais utilisé pour remplir
> le
> datagrid (lier le datagrid avec un dataset qui contient ma requete) et
> dans
> ma requete je rajoute : ... ORDER BY e.SortExpression .
>
> Je pensais que ca allait marcher mais lorsque que je clic sur le lien de
> sorting d'une colonne, cela me recharge bien la page mais sans le
> datagrid.
>
> Aprés avoir débogué je me suis rendu compte que ma méthode "private void
> resultats_SortCommand(object source,
> system.Web.UI.WebControls.DataGridSortCommandEventArgs e)" n'était pas
> éxécutée.
> Je ne comprends pas pourquoi cette exécution n'a pas lieu... .
>
> Avez vous uneindication à me fournir????
>
>





Avatar
gilder89
Bonjour,

Oui, le databind est bien mis :) .
(j'ai mis mon code dans un autre message)

"Norm" a écrit :

il y a bien un databind de fait après avoir reaaffectué ton datasource?

"gilder89" a écrit dans le message de
news:
> Bonjour,
> je souhaiterai trier un datagrid... . Je me suis donc renseigné et j'ai
> vue
> qu'aprés avoir activé le "AllowSorting", il fallait implémenter
> l'évenement
> SortComand (ici : private void resultats_SortCommand(object source,
> system.Web.UI.WebControls.DataGridSortCommandEventArgs e).
>
> Dans cet évenement je réutilise le code que j'avais utilisé pour remplir
> le
> datagrid (lier le datagrid avec un dataset qui contient ma requete) et
> dans
> ma requete je rajoute : ... ORDER BY e.SortExpression .
>
> Je pensais que ca allait marcher mais lorsque que je clic sur le lien de
> sorting d'une colonne, cela me recharge bien la page mais sans le
> datagrid.
>
> Aprés avoir débogué je me suis rendu compte que ma méthode "private void
> resultats_SortCommand(object source,
> system.Web.UI.WebControls.DataGridSortCommandEventArgs e)" n'était pas
> éxécutée.
> Je ne comprends pas pourquoi cette exécution n'a pas lieu... .
>
> Avez vous uneindication à me fournir????
>
>





Avatar
gilder89
Pour ne pas surcharger le précedent message voici le code complet de ma
page... si cela peut être apporter quelque chose.

using System;
using System.Collections;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Web;
using System.Web.SessionState;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.HtmlControls;
using Connexion;
using System.Data.SqlClient;

namespace WebApplication1
{
/// <summary>
/// Description résumée de [!output SAFE_CLASS_NAME].
/// </summary>
public class WebForm1 : System.Web.UI.Page
{
protected System.Web.UI.WebControls.Label typeFicheLbl;
protected System.Web.UI.WebControls.Label Label2;
protected System.Web.UI.WebControls.Label typeLogicielLbl;
protected System.Web.UI.WebControls.Button rechercher;
protected System.Web.UI.WebControls.Label Titre;
protected System.Web.UI.WebControls.DropDownList osDDL;
protected System.Web.UI.WebControls.DropDownList typeFicheDDL;
protected System.Web.UI.WebControls.Label theme;
protected System.Web.UI.WebControls.DropDownList typeMaterielDDL;
protected System.Web.UI.WebControls.DropDownList typeLogicielDDL;
protected System.Web.UI.WebControls.Label typeMateriel;
protected System.Web.UI.WebControls.Label motsCles;
protected System.Web.UI.WebControls.TextBox motsClesTB;
protected System.Web.UI.WebControls.DropDownList themesDDL;
protected System.Web.UI.WebControls.DataGrid resultats;
ConnexionBDD laConn = new ConnexionBDD();

private void Page_Load(object sender, System.EventArgs e)
{
//Remplissage des menus déroulants
SqlDataReader dr = laConn.GetTableDr("TypesOS");
if (!this.IsPostBack)
{
osDDL.Items.Add("");
while (dr.Read())
{
ListItem liste = new ListItem(dr.GetString(1),dr.GetInt32(0).ToString());
osDDL.Items.Add(liste);
}
}
dr.Close();
dr = laConn.GetTableDr("Themes");
if (!this.IsPostBack)
{
themesDDL.Items.Add("");
while (dr.Read())
{
ListItem liste = new ListItem(dr.GetString(1),dr.GetInt32(0).ToString());
themesDDL.Items.Add(liste);
}
}
dr.Close();
dr = laConn.GetTableDr("TypesLogiciel");
if (!this.IsPostBack)
{
typeLogicielDDL.Items.Add("");
while (dr.Read())
{
ListItem liste = new ListItem(dr.GetString(1),dr.GetInt32(0).ToString());
typeLogicielDDL.Items.Add(liste);
}
}
dr.Close();
dr = laConn.GetTableDr("TypesMateriel");
if (!this.IsPostBack)
{
typeMaterielDDL.Items.Add("");
while (dr.Read())
{
ListItem liste = new ListItem(dr.GetString(1),dr.GetInt32(0).ToString());
typeMaterielDDL.Items.Add(liste);
}
}
dr.Close();
dr = laConn.GetTableDr("TypesFiche");
if (!this.IsPostBack)
{
typeFicheDDL.Items.Add("");
while (dr.Read())
{
ListItem liste = new ListItem(dr.GetString(1),dr.GetInt32(0).ToString());
typeFicheDDL.Items.Add(liste);
}
}
dr.Close();
}

#region Web Form Designer generated code
override protected void OnInit(EventArgs e)
{
//
// CODEGEN : Cet appel est requis par le Concepteur Web Form ASP.NET.
//
InitializeComponent();
base.OnInit(e);
}

/// <summary>
/// Méthode requise pour la prise en charge du concepteur - ne modifiez pas
/// le contenu de cette méthode avec l'éditeur de code.
/// </summary>
private void InitializeComponent()
{
this.typeLogicielDDL.SelectedIndexChanged += new
System.EventHandler(this.DropDownList1_SelectedIndexChanged);
this.rechercher.Click += new System.EventHandler(this.rechercher_Click);
this.resultats.SortCommand += new
System.Web.UI.WebControls.DataGridSortCommandEventHandler(this.resultats_SortCommand);
this.Load += new System.EventHandler(this.Page_Load);

}
#endregion

private void DropDownList1_SelectedIndexChanged(object sender,
System.EventArgs e)
{

}

private void rechercher_Click(object sender, System.EventArgs e)
{
//Décomposition des mots clés
//String separateur = ",";
//char[] separateurs = separateur.ToCharArray();;
//String[] res = motsClesTB.Text.Split(separateurs);

//String resConcat="";
string leWhere = "";
string leAnd = "";
if (themesDDL.Items[themesDDL.SelectedIndex].Value != "" ||
typeMaterielDDL.Items[typeMaterielDDL.SelectedIndex].Value != "" ||
typeLogicielDDL.Items[typeLogicielDDL.SelectedIndex].Value != "" ||
osDDL.Items[osDDL.SelectedIndex].Value != "" ||
typeFicheDDL.Items[typeFicheDDL.SelectedIndex].Value != "")
{
leAnd = " and ";
}
if (themesDDL.Items[themesDDL.SelectedIndex].Value != "")
{
leWhere += leAnd+" IdTheme =
'"+themesDDL.Items[themesDDL.SelectedIndex].Value + "'";
}
if (osDDL.Items[osDDL.SelectedIndex].Value != "")
{
leWhere += leAnd+" IdOS = '"+osDDL.Items[osDDL.SelectedIndex].Value + "'";
}
if (typeMaterielDDL.Items[typeMaterielDDL.SelectedIndex].Value != "")
{
leWhere += leAnd+" IdMateriel =
'"+typeMaterielDDL.Items[typeMaterielDDL.SelectedIndex].Value + "'";
}
if (typeLogicielDDL.Items[typeLogicielDDL.SelectedIndex].Value != "")
{
leWhere += leAnd+" IdLogiciel =
'"+typeLogicielDDL.Items[typeLogicielDDL.SelectedIndex].Value + "'";
}
if (typeFicheDDL.Items[typeFicheDDL.SelectedIndex].Value != "")
{
leWhere += leAnd+" IdFiche =
'"+typeFicheDDL.Items[typeFicheDDL.SelectedIndex].Value + "'";
}

string sql = "";
sql = sql+"SELECT Themes.LibelleFR as Theme,FAQ.LibelleFR as
Titre,DATENAME("yyyy",DatePubli) as Date,Contenu,Lien ";
sql = sql+"FROM FAQ,Themes ";
sql = sql+"WHERE FAQ.IdTheme=Themes.Id "+leWhere;

DataSet lesResultats = laConn.GetSelDs(sql,"lesRes");

//On empeche l'auto génération des colonnes
resultats.AutoGenerateColumns = false;
resultats.AllowSorting = true;


//Création des colonnes
//Theme
BoundColumn resultatscol = new BoundColumn();
resultatscol.HeaderText = "Thème";
resultatscol.DataField = "theme";
resultatscol.SortExpression = "theme";
resultats.Columns.Add(resultatscol);
//Titre
resultatscol = new BoundColumn();
resultatscol.HeaderText = "Intitulé";
resultatscol.DataField = "Titre";
resultatscol.SortExpression = "Titre";
resultats.Columns.Add(resultatscol);
//Titre
resultatscol = new BoundColumn();
resultatscol.HeaderText = "Date";
resultatscol.DataField = "Date";
resultatscol.SortExpression = resultatscol.DataField;
resultats.Columns.Add(resultatscol);
//Contenu
resultatscol = new BoundColumn();
resultatscol.HeaderText = "Contenu";
resultatscol.DataField = "Contenu";
resultatscol.SortExpression = resultatscol.DataField;
resultats.Columns.Add(resultatscol);
//Lien
HyperLinkColumn resultatsHcol = new HyperLinkColumn();
resultatsHcol.HeaderText = "Lien";
resultatsHcol.DataTextField = "Lien";
resultatsHcol.DataNavigateUrlField = "Lien";
resultats.Columns.Add(resultatsHcol);

resultats.DataSource = lesResultats.Tables["lesRes"].DefaultView;
resultats.DataBind();
}



private void resultats_SelectedIndexChanged(object sender,
System.EventArgs e)
{

}

private void resultats_SortCommand(object source,
System.Web.UI.WebControls.DataGridSortCommandEventArgs e)
{
string leWhere = "";
string leAnd = "";
if (themesDDL.Items[themesDDL.SelectedIndex].Value != "" ||
typeMaterielDDL.Items[typeMaterielDDL.SelectedIndex].Value != "" ||
typeLogicielDDL.Items[typeLogicielDDL.SelectedIndex].Value != "" ||
osDDL.Items[osDDL.SelectedIndex].Value != "" ||
typeFicheDDL.Items[typeFicheDDL.SelectedIndex].Value != "")
{
leAnd = " and ";
}
if (themesDDL.Items[themesDDL.SelectedIndex].Value != "")
{
leWhere += leAnd+" IdTheme =
'"+themesDDL.Items[themesDDL.SelectedIndex].Value + "'";
}
if (osDDL.Items[osDDL.SelectedIndex].Value != "")
{
leWhere += leAnd+" IdOS = '"+osDDL.Items[osDDL.SelectedIndex].Value + "'";
}
if (typeMaterielDDL.Items[typeMaterielDDL.SelectedIndex].Value != "")
{
leWhere += leAnd+" IdMateriel =
'"+typeMaterielDDL.Items[typeMaterielDDL.SelectedIndex].Value + "'";
}
if (typeLogicielDDL.Items[typeLogicielDDL.SelectedIndex].Value != "")
{
leWhere += leAnd+" IdLogiciel =
'"+typeLogicielDDL.Items[typeLogicielDDL.SelectedIndex].Value + "'";
}
if (typeFicheDDL.Items[typeFicheDDL.SelectedIndex].Value != "")
{
leWhere += leAnd+" IdFiche =
'"+typeFicheDDL.Items[typeFicheDDL.SelectedIndex].Value + "'";
}

string sql = "";
sql = sql+"SELECT Themes.LibelleFR as Theme,FAQ.LibelleFR as
Titre,DATENAME("yyyy",DatePubli) as Date,Contenu,Lien ";
sql = sql+"FROM FAQ,Themes ";
sql = sql+"WHERE FAQ.IdTheme=Themes.Id "+leWhere;
DataSet lesResultats = laConn.GetSelDs(sql,"lesRes");
lesResultats.Tables["lesRes"].DefaultView.Sort = e.SortExpression;
//On empeche l'auto génération des colonnes
resultats.AutoGenerateColumns = false;

//Création des colonnes
//Theme
BoundColumn resultatscol = new BoundColumn();
resultatscol.HeaderText = "Thème";
resultatscol.DataField = "theme";
resultatscol.SortExpression = resultatscol.DataField;
resultats.Columns.Add(resultatscol);
//Titre
resultatscol = new BoundColumn();
resultatscol.HeaderText = "Intitulé";
resultatscol.DataField = "Titre";
resultatscol.SortExpression = resultatscol.DataField;
resultats.Columns.Add(resultatscol);
//Titre
resultatscol = new BoundColumn();
resultatscol.HeaderText = "Date";
resultatscol.DataField = "Date";
resultatscol.SortExpression = resultatscol.DataField;
resultats.Columns.Add(resultatscol);
//Contenu
resultatscol = new BoundColumn();
resultatscol.HeaderText = "Contenu";
resultatscol.DataField = "Contenu";
resultatscol.SortExpression = resultatscol.DataField;
resultats.Columns.Add(resultatscol);
//Lien
HyperLinkColumn resultatsHcol = new HyperLinkColumn();
resultatsHcol.HeaderText = "Lien";
resultatsHcol.DataTextField = "Lien";
resultatsHcol.DataNavigateUrlField = "Lien";
resultats.Columns.Add(resultatsHcol);

resultats.DataSource = lesResultats.Tables["lesRes"].DefaultView;
resultats.DataBind();
}



}
}
Avatar
gilder89
Peut etre une indication que je viens de constater : si je passe
enautogeneration de colonne le trie fonctionne parfaitement. Donc il y a
forcement un problème dans mon code, quand je génere manuellement les
colonnes du datagrid, mais je ne vois pas lequel!

"Frédéric Queudret [MS]" a écrit :

Bonjour,

Est-ce que la méthode de gestion de l'événement est bien enregistrée à
l'événement SortCommand du DataGrid?
Par exemple (pour un contrôle nommé DataGrid1):
this.DataGrid1.SortCommand += new
System.Web.UI.WebControls.DataGridSortCommandEventHandler(this.DataGrid1_SortCommand);

Visible par défaut dans la partie de code de la page:
#region Web Form Designer generated code

Méthode: private void InitializeComponent()

Sinon serait-il possible d'avoir la page avec le codebehind qui pose
problème?

Frédéric.

"gilder89" wrote in message
news:
> Bonjour,
> je souhaiterai trier un datagrid... . Je me suis donc renseigné et j'ai
> vue
> qu'aprés avoir activé le "AllowSorting", il fallait implémenter
> l'évenement
> SortComand (ici : private void resultats_SortCommand(object source,
> system.Web.UI.WebControls.DataGridSortCommandEventArgs e).
>
> Dans cet évenement je réutilise le code que j'avais utilisé pour remplir
> le
> datagrid (lier le datagrid avec un dataset qui contient ma requete) et
> dans
> ma requete je rajoute : ... ORDER BY e.SortExpression .
>
> Je pensais que ca allait marcher mais lorsque que je clic sur le lien de
> sorting d'une colonne, cela me recharge bien la page mais sans le
> datagrid.
>
> Aprés avoir débogué je me suis rendu compte que ma méthode "private void
> resultats_SortCommand(object source,
> system.Web.UI.WebControls.DataGridSortCommandEventArgs e)" n'était pas
> éxécutée.
> Je ne comprends pas pourquoi cette exécution n'a pas lieu... .
>
> Avez vous uneindication à me fournir????
>
>