71 votes

Comment pouvez-vous trier une colonne DataTable donnée et la direction?

J'ai besoin de recourir, dans la mémoire, une DataTable basé sur une colonne et de la direction qui sont à venir à partir 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 suis pas sûr de savoir comment. Je ne peux pas cliquer sur les Commentaires à cause de ce navigateur, mais vous pouvez me montrer un endroit ou new DataTable solution, soit un. Pour les gens en me montrant les pointeurs, s'il vous plaît, j'ai besoin d'un code de fonction similaire à celle prototypée.

Comment à ce sujet:

// 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;
   }

105voto

Berkay Points 1396

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;
}
 

66voto

Alex Points 1077

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.

7voto

Paul Sasik Points 37766

DataTables est surchargé Sélectionnez la méthode que vous pouvez utiliser pour ce faire. Voir ici: http://msdn.microsoft.com/en-us/library/way3dy9w.aspx

Mais le retour de val-de la sélection de l'appel n'est pas un DataTable, mais un tableau de RowData objets. Si vous voulez retourner un DataTable à partir de votre fonction, vous aurez à construire à partir de zéro basé sur ce tableau de données. Voici un post qui traite et fournit un échantillon pour les deux questions: http://social.msdn.microsoft.com/Forums/en-US/winformsdatacontrols/thread/157a4a0f-1324-4301-9725-3def95de2bf2/

4voto

Jakub Konecki Points 28852

Créer un DataView. Vous ne pouvez pas trier un DataTable directement, mais vous pouvez créer un DataView le DataTable et de tri.

La création de: 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 montre tous les produits lorsque le nombre des unités en stock est inférieure ou égale à la réorganiser niveau, d'abord triées par code fournisseur, puis par nom de produit.

DataView prodView = new DataView(prodDS.Tables["Products"], "UnitsInStock <= ReorderLevel", "SupplierID, ProductName", DataViewRowState.CurrentRows);

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X