J'ai besoin de recourir, en mémoire, à un DataTable basé sur une colonne et une direction provenant d'un GridView. La fonction doit ressembler à ceci:
public static DataTable resort(DataTable dt, string colName, string direction)
{
DataTable dtOut = null;
....
}
J'ai besoin d'aide pour remplir cette fonction. Je pense que je peux utiliser une instruction Select mais je ne sais pas comment. Je ne peux pas cliquer sur Commentaires à cause de ce navigateur, mais vous pouvez me montrer une solution DataTable sur place ou nouvelle, l'une ou l'autre. Pour les personnes me montrant des pointeurs, s'il vous plaît, j'ai besoin d'une fonction codée similaire à celle prototypée.
Que diriez-vous:
// ds.Tables[0].DefaultView.Sort="au_fname DESC";
public static void Resort(ref DataTable dt, string colName, string direction)
{
string sortExpression = string.Format("{0} {1}", colName, direction);
dt.DefaultView.Sort = sortExpression;
}
Je suppose que "direction" est "ASC" ou "DESC" et que dt contient une colonne nommée "colName"
public static DataTable resort(DataTable dt, string colName, string direction)
{
DataTable dtOut = null;
dt.DefaultView.Sort = colName + " " + direction;
dtOut = dt.DefaultView.ToTable();
return dtOut;
}
OU sans créer dtOut
public static DataTable resort(DataTable dt, string colName, string direction)
{
dt.DefaultView.Sort = colName + " " + direction;
dt = dt.DefaultView.ToTable();
return dt;
}
Si vous n’avez qu’un seul DataView, vous pouvez trier à la place:
table.DefaultView.Sort = "columnName asc";
Je ne l'ai pas essayé, mais je suppose que vous pouvez le faire avec n'importe quel nombre de DataViews, à condition de référencer le bon.
En fait, j'ai le même problème. Pour moi a travaillé ce moyen facile:
Ajouter les données à un Datatable
et le trier:
dt.DefaultView.Sort = "columnname";
dt = dt.DefaultView.ToTable();
Les DataTables ont une méthode Select surchargée que vous pouvez faire pour cela. Voir ici: http://msdn.Microsoft.com/en-us/library/way3dy9w.aspx
Mais la valeur de retour de l'appel Select n'est pas un DataTable mais un tableau d'objets RowData. Si vous souhaitez renvoyer un DataTable à partir de votre fonction, vous devrez le construire à partir de rien en fonction de ce tableau de données. Voici un message qui traite et fournit un exemple pour les deux problèmes: http://social.msdn.Microsoft.com/Forums/en-US/winformdatacontrols/thread/157a4a0f-1324-4301 -9725-3def95de2bf2/
Créez un DataView . Vous ne pouvez pas trier un DataTable directement, mais vous pouvez créer un DataView à partir du DataTable et le trier.
Création: http://msdn.Microsoft.com/en-us/library/hy5b8exc.aspx
Tri: http://msdn.Microsoft.com/en-us/library/13wb36xf.aspx
L'exemple de code suivant crée une vue qui présente tous les produits pour lesquels le nombre d'unités en stock est inférieur ou égal au niveau de réapprovisionnement, trié d'abord par ID de fournisseur, puis par nom de produit.
DataView prodView = new DataView(prodDS.Tables["Products"], "UnitsInStock <= ReorderLevel", "SupplierID, ProductName", DataViewRowState.CurrentRows);
Si vous souhaitez trier dans plus d'une direction
public static void sortOutputTable(ref DataTable output)
{
DataView dv = output.DefaultView;
dv.Sort = "specialCode ASC, otherCode DESC";
DataTable sortedDT = dv.ToTable();
output = sortedDT;
}