|
Реализация "ТаблицаЗначений" в виде класса c#, java и т.д. | ☑ | ||
---|---|---|---|---|
0
Garykom
гуру
28.05.10
✎
14:01
|
Для разработки системы на java требуется такой очень удобный компонент как в 1С "ТаблицаЗначений", а точнеее ее функция Свернуть(КолонкиГруппировка, КолонкиСуммирование).
Без этого учень неудобно делать универсальные настраиваемые отчеты. Может кто уже делал подобное? И может поделиться исходниками или где/куда копать. |
|||
1
НафНаф
31.05.10
✎
11:16
|
на шарпе:
namespace ConsoleApplication1 { class Program { static void Main(string[] args) { List<MyData> list = new List<MyData>() { new MyData(){Name="A",Value=10}, new MyData(){Name="B",Value=20}, new MyData(){Name="A",Value=30} }; var query = from l in list group l by l.Name into g select new {Name=g.Key,Value=g.Sum(l=>l.Value) }; foreach (var s in query) { Console.WriteLine("{0} {1}",s.Name,s.Value ); } Console.ReadKey(); } } struct MyData { public string Name; public decimal Value; } } |
|||
2
Garykom
гуру
31.05.10
✎
13:45
|
(1) Спасибо конечно, но если колонок в таблице не две штуки (одна текстовая и одна числовая) а больше?
ЗЫ Уже реализовал на java что нужно, пришлось повозится |
|||
3
ЗлобнийМальчик
31.05.10
✎
13:49
|
(1) DataTable - не катит, не?
(2) наверное что то похожее есть и на java |
|||
4
ЗлобнийМальчик
31.05.10
✎
13:51
|
(2) покаж велсипед
|
|||
5
DEVIce
31.05.10
✎
13:56
|
На Java копай в сторону коллекций.
|
|||
6
Masquerade
31.05.10
✎
13:56
|
(0)
Так надо еще? |
|||
7
Masquerade
31.05.10
✎
13:57
|
Ай, у меня без суммирования.
|
|||
8
Garykom
гуру
31.05.10
✎
14:05
|
(4)
private String КлючСтрокиГруппировки(ArrayList<КолонкаТаблицыЗначений> КолонкиГрупп, СтрокаТаблицыЗначений Строка) { String Результат = ""; Iterator i = КолонкиГрупп.iterator(); while (i.hasNext()) { КолонкаТаблицыЗначений Колонка = (КолонкаТаблицыЗначений) i.next(); Object Значение = Строка.Получить(Колонка); Результат = Результат + ";" + Значение; } return Результат; } private void СкопироватьДанные(ArrayList<КолонкаТаблицыЗначений> КолонкиГрупп, СтрокаТаблицыЗначений СтрокаИсточник, СтрокаТаблицыЗначений СтрокаПолучатель) { Iterator i = КолонкиГрупп.iterator(); while (i.hasNext()) { КолонкаТаблицыЗначений Колонка = (КолонкаТаблицыЗначений) i.next(); Object Значение = СтрокаИсточник.Получить(Колонка); СтрокаПолучатель.Установить(Колонка, Значение); } } private Object СложитьЧисла(Object Число1, Object Число2) { Object Результат = null; Number ч1 = 0; Number ч2 = 0; if (Число1 != null) { ч1 = (Number) Число1; } if (Число2 != null) { ч2 = (Number) Число2; } Double Сумма = ч1.doubleValue() + ч2.doubleValue(); if (Сумма.doubleValue() == Сумма.intValue()) { Результат = Сумма.intValue(); } else { Результат = Сумма; } return Результат; } private void СложитьДанные(ArrayList<КолонкаТаблицыЗначений> КолонкиСумм, СтрокаТаблицыЗначений СтрокаИсточник, СтрокаТаблицыЗначений СтрокаПолучатель) { Iterator i = КолонкиСумм.iterator(); while (i.hasNext()) { КолонкаТаблицыЗначений Колонка = (КолонкаТаблицыЗначений) i.next(); Object Значение = СтрокаИсточник.Получить(Колонка); Object Сумма = СтрокаПолучатель.Получить(Колонка); Сумма = СложитьЧисла(Сумма, Значение); СтрокаПолучатель.Установить(Колонка, Сумма); } } public void Свернуть(String КолонкиГруппировка, String КолонкиСуммирование) { ArrayList<КолонкаТаблицыЗначений> КолонкиГрупп = НайтиКолонки(КолонкиГруппировка); ArrayList<КолонкаТаблицыЗначений> КолонкиСумм = НайтиКолонки(КолонкиСуммирование); Hashtable НовыеДанные = new Hashtable(); Iterator i = Данные.iterator(); while (i.hasNext()) { СтрокаТаблицыЗначений Строка = (СтрокаТаблицыЗначений) i.next(); String Ключ = КлючСтрокиГруппировки(КолонкиГрупп, Строка); СтрокаТаблицыЗначений НовСтрока = (СтрокаТаблицыЗначений) НовыеДанные.get(Ключ); if (НовСтрока == null) { НовСтрока = new СтрокаТаблицыЗначений(this); НовыеДанные.put(Ключ, НовСтрока); } СкопироватьДанные(КолонкиГрупп, Строка, НовСтрока); СложитьДанные(КолонкиСумм, Строка, НовСтрока); } Очистить(); Колонки.Очистить(); i = КолонкиГрупп.iterator(); while (i.hasNext()) { КолонкаТаблицыЗначений Колонка = (КолонкаТаблицыЗначений) i.next(); Колонки.Добавить(Колонка); } i = КолонкиСумм.iterator(); while (i.hasNext()) { КолонкаТаблицыЗначений Колонка = (КолонкаТаблицыЗначений) i.next(); Колонки.Добавить(Колонка); } Enumeration e = НовыеДанные.elements(); while (e.hasMoreElements()) { СтрокаТаблицыЗначений Строка = (СтрокаТаблицыЗначений) e.nextElement(); Данные.add(Строка); } Сортировать(КолонкиГруппировка); } |
|||
9
Denyk
31.05.10
✎
14:10
|
(0) Тестовое задание от 1С? ;-)
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |