web-dev-qa-db-fra.com

DataTable.DefaultView.Sort ne trie pas

Je suis confus sur DataTable.DefaultView.Sort. Voici le segment du code que je veux utiliser.

actionLogDT.DefaultView.Sort = "StartDate";

foreach (CustomerService.ActionLogStartEndRow logRow in actionLogDT)
{
  // code here
}

Les échantillons que j'ai vus n'utilisent pas la boucle foreach et me perturbent donc sur la façon de traiter cela. Ce n'est pas le tri comme je le pensais.

Je vois que .DefaultView renvoie une vue et .Table génère une erreur de compilation.

15
Mike Wills

Je devais adopter une approche légèrement différente. Ce post était le plus proche que j'ai pu trouver pour que mon code fonctionne. Voici le résultat de travail:

actionLogDT.DefaultView.Sort = "StartDate";
DataView dv = actionLogDT.DefaultView;

foreach (DataRowView logRow in dv) { . . . }

À partir de là, il me suffit de replacer la valeur dans son type approprié.

(string)logRow["Status"].ToString()
7
Mike Wills
actionLogDT.DefaultView.Sort = "StartDate";

actionLogDT = actionLogDT.DefaultView.ToTable();
26
ashdiggedy

Le tri de la vue ne changera pas l'ordre de tri des données de la table, mais seulement l'ordre de la vue. Cela devrait fonctionner si vous faites plutôt votre foreach sur la vue, en replaçant la ligne de DataRowView dans votre ligne fortement typée.

foreach (DataRowView logRowView in actionLogDT.DefaultView)
{
    CustomerService.ActionLogStartEndRow logRow = logRowView.Row as CustomerService.ActionLogStartEndRow;
    // code here
}
10
Jeromy Irvine

De plus, comme il semblait que vous vouliez parcourir en boucle des enregistrements, vous pouvez simplement parcourir les objets dataRowView dans DefaultView.

foreach (DataRowView drv in table.DefaultView)
{
    string strValue = drv["ColumnName"].ToString();
    // its also worth mentioning that a DataRowView has a Row
    strValue = drv.Row["ColumnName"].ToString();
}
3
Kevin Cain
foreach (var logRow in actionLogDT.DefaultView.ToDataTable()) { ... }
3
John Sheehan

S'il vous plaît essayez ceci:

actionLogDT.DefaultView.Sort = "["+actionLogDT.Columns[0].ColumnName+"] asc";
1
Upender

Si vous avez besoin d'une date de retour, vous pouvez faire quelque chose comme:

var dv = actionLogDT.DefaultView;
dv.Sort = "StartDate";

actionLogDT = dv.ToTable();
0
Adi Bilauca

Juste curieux: Pourquoi utilisez-vous le DataRowView

c'est à dire.

foreach (DataRow row in actionLogDT.Rows)
{
  Console.WriteLine(row["Status"]);
}
0
jp2code