2009-05-13 4 views
1

Je suis essayé de créer une liste de données afficher toute la cuisine dans l'ordre alphabétique dans la colonne mais je ne pouvais pas trouver le moyen de le faire, peut-on aider.comment créer l'ordre alphabétique dans la colonne de la liste de données asp.net

en utilisant la liste de données ou d'un répéteur en asp.net ne vous permettent d'afficher par ordre alphabétique horizontal ou vertical par exemple

Afghan  Asian  Burmese  Cambodian 
Chinese  Croatian European French 
Greek   Indian  International Italian 

Ce que je veux avoir est

Afghan  Chinese  Greek 
Asian  Croatian  Indian 
Burmese  European  International 
Cambodian French  Italian 

Merci

Répondre

0

Ce que je ferais est d'obtenir votre liste dans l'ordre alphabétique, puis réorganiser de sorte que lorsque vous utilisez la commande par défaut datalist/répéteur, il est dans le format désiré.

En pseudo-code bizarre.

/* 
your input is A,B,C,D,E,F,G,H,I,J,K,L 

given this order, it returns: 

A, B, C 
D, E, F 
G, H, I 
J, K, L 

but you want 

A, E, I 
B, F, J 
C, G, K 
D, H, L 

So you need to change your input to this: 

A,E,I,B,F,J,C,G,K,D,H,L 

*/ 

let numColumns = 3; 
let numItems = 12; 
let itemsPerColumn = numItems/numColumns; 

loop i from 0 to itemsPerColumn - 1 
    loop j from 0 to numColumns - 1 
     newOrdering.push(oldOrdering[i * numColumns + j]) 

Il pourrait y avoir une fonctionnalité intéressante .NET pour changer le style de commande, mais ceci est juste une méthode vieille école. PS: Cela fonctionne sur le meilleur des cas, c'est-à-dire que le nombre d'éléments est divisible par le nombre de colonnes. Vous devrez ajuster légèrement pour différentes valeurs.

0

J'ai récemment accompli cela en utilisant un PlaceHolder et un tableau personnalisé:

<asp:PlaceHolder ID="locationTablePlaceHolder" runat="server"/> 

Ensuite, dans le code de support:

DataView view = locations.Tables[0].DefaultView; 
view.Sort  = "locationName"; 

Table table = new Table(); 
locationTablePlaceHolder.Controls.Clear(); 
locationTablePlaceHolder.Controls.Add(table); 

// enumerator to loop through all items in the DataView 
IEnumerator enumerator = view.GetEnumerator(); 
enumerator.Reset(); 

// first create all the row objects since we want to populate 
// column by column. 
int rowCount = 5; 
int colCount = 5; 
for (int i = 0; i < rowCount; i++) 
{ 
    TableRow row = new TableRow(); 
    table.Rows.Add(row); 
} 

// then loop through each column taking items from the enumerator 
// to populate the table 
for (int j = 0; j < colCount; j++) 
{ 
    for (int i = 0; i < rowCount; i++) 
    { 
     TableCell cell = new TableCell(); 
     if (enumerator.MoveNext()) 
     { 
      Label label = new Label(); 
      label.Text = (String)((DataRowView)enumerator.Current).Row["locationName"]; 
      cell.Controls.Add(label); 
      table.Rows[i].Cells.Add(cell); 
     } 
    } 
} 
1

réponse de nickf m'a aidé à venir à la méthode suivante qui transformera une liste au besoin:

public static List<T> ReorderListIntoColumns<T>(List<T> list, int totalColumns) 
    { 
     List<T> reordered = new List<T>(); 
     int itemsPerColumn = (int) list.Count/totalColumns; 

     for (int i = 0; i < itemsPerColumn; i++) 
     { 
      for (int j = 0; j < totalColumns; j++) 
      { 
       reordered.Add(list[(j * itemsPerColumn) + i]); 
      } 
     } 

     return reordered; 
    } 

Ce sujet semble contenir beaucoup de points de vue. même s'il n'y avait pas de réponse acceptée. J'espère que cela aidera quelqu'un d'autre qui a besoin de réorganiser une liste de cette façon!

Questions connexes