Как отсортировать таблицу сразу по двум столбцам?

  • Автор темы Автор темы stregol
  • Дата начала Дата начала

stregol

Client
Регистрация
21.04.2013
Сообщения
10
Реакции
1
Баллы
3
Салют всем.
Собственно, сабж.

К примеру есть такая таблица (во вложении).
Надо отсортировать по столбцу А и потом по столбцу С (чтоб как бы была сортировка по С внутри каждого массива значений А)

Я так понимаю, что лучше всего это писать в C#?

Заранее спасибо
 

Вложения

Прошу прощения, что поднимаю старую тему. Нужно то же самое. Пробовал воспользоваться штатной сортировкой по двум столбцам, нужного эффекта не получается. Есть ли какое-то решение?
 
Есть, скажем, столбцы A и B с такими значениями:

700;100
100;200
200;100
200;200
300;100
900;200

Нужно приоритетно отсортировать по столбцу B (сортировка по убыванию, как числа), а в случае равных значений в столбце B, выше должны идти те строки, у которых значения в столбце A тоже больше:

900;200
200;200
100;200
700;100
300;100
200;100
 
  • Оценить
Реакции: Radzhab
Нужно приоритетно отсортировать по столбцу B (сортировка по убыванию, как числа), а в случае равных значений в столбце B, выше должны идти те строки, у которых значения в столбце A тоже больше
На основе этого сниппета:
C#:
Развернуть Свернуть Копировать
IZennoTable table = project.Tables["Таблица 1"]; // таблица проекта
int i1 = 1; // номер столбца, по которому сортировать (приоритетный)
int i2 = 0; // номер столбца, по которому сортировать (второстепенный)
List<string> tmpList = new List<string>(); // создаем темповый список
Enumerable.Range(0, table.RowCount).ToList().ForEach(x => tmpList.Add(string.Join(";", table.GetRow(x)))); // добавляем в список все строки из таблицы, ";" - разделитель столбцов
tmpList = tmpList.OrderByDescending(s => s.Split(';')[i2].Length).ThenByDescending(s => s.Split(';')[i2]).ToList(); // сортируем строки списка по убыванию
tmpList = tmpList.OrderByDescending(s => s.Split(';')[i1].Length).ThenByDescending(s => s.Split(';')[i1]).ToList(); // сортируем строки списка по убыванию
table.Clear(); // очищаем таблицу
Enumerable.Range(0, tmpList.Count).ToList().ForEach(x => table.AddRow(tmpList[x])); // добавляем в таблицу  все строки из списка
 
  • Оценить
Реакции: paffik, Rimen и Enigma
Огромное спасибо! То, что надо! :az:
 
На основе этого сниппета:
C#:
Развернуть Свернуть Копировать
IZennoTable table = project.Tables["Таблица 1"]; // таблица проекта
int i1 = 1; // номер столбца, по которому сортировать (приоритетный)
int i2 = 0; // номер столбца, по которому сортировать (второстепенный)
List<string> tmpList = new List<string>(); // создаем темповый список
Enumerable.Range(0, table.RowCount).ToList().ForEach(x => tmpList.Add(string.Join(";", table.GetRow(x)))); // добавляем в список все строки из таблицы, ";" - разделитель столбцов
tmpList = tmpList.OrderByDescending(s => s.Split(';')[i2].Length).ThenByDescending(s => s.Split(';')[i2]).ToList(); // сортируем строки списка по убыванию
tmpList = tmpList.OrderByDescending(s => s.Split(';')[i1].Length).ThenByDescending(s => s.Split(';')[i1]).ToList(); // сортируем строки списка по убыванию
table.Clear(); // очищаем таблицу
Enumerable.Range(0, tmpList.Count).ToList().ForEach(x => table.AddRow(tmpList[x])); // добавляем в таблицу  все строки из списка
Подскажите пожалуйста — как можно этот же функционал выполнить для гуглтаблицы с разделителем = tab?
Этот код функционал выполняет, но данные назад в таблицу заливает с разделителем ; — как следствие табличка выглядит криво
 

Кто просматривает тему: (Всего: 0, Пользователи: 0, Гости: 0)