как создать алфавитный порядок в столбце списка данных asp.net - PullRequest
1 голос
/ 14 мая 2009

Я пытался создать список данных, отображающий всю кухню в алфавитном порядке в столбце, однако я не мог найти способ сделать это, может какая-то помощь.

Использование списка данных или повторителя в asp.net позволяет отображать только в горизонтальном или вертикальном алфавитном порядке, например

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

То, что я хочу иметь, это

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

Спасибо

Ответы [ 3 ]

1 голос
/ 14 августа 2012

Ответ Никфа помог мне прийти к следующему методу, который преобразует список по мере необходимости:

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

Эта тема, похоже, получила много просмотров, хотя на этот вопрос не было принято никакого ответа. Надеюсь, это поможет кому-то другому, которому нужно изменить порядок списка таким образом!

0 голосов
/ 18 июня 2009

Я недавно сделал это, используя PlaceHolder и пользовательскую таблицу:

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

Тогда в коде поддержки:

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);
        }
    }
}
0 голосов
/ 14 мая 2009

Что бы я сделал, это получил бы ваш список в алфавитном порядке, а затем переставил так, чтобы при использовании порядка по умолчанию для списка данных / ретранслятора он был в нужном вам формате.

В странном псевдокоде.

/*
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])

Возможно, есть какая-то изящная функция .NET для изменения стиля упорядочения, но это всего лишь один метод старой школы.

PS: это работает в лучшем случае, когда количество элементов делится на количество столбцов. Вам придется немного подстроиться под разные значения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...