Разрешение пользователю создавать пользовательский запрос таблицы - PullRequest
0 голосов
/ 06 мая 2009

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

Если данные находятся в таблице в базе данных, я могу написать запрос, который выбирает конкретные свойства и количества и суммирует количества, которые имеют одинаковое значение для выбранных свойств.

Пример:

Таблица:

Quanity1    Quanity2    Quanity3    Property1   Property2   Property3
12          43            12           RED        Long      Rough
43        23            23          Blue       Short     Smooth
43        90            34           RED        Fat     Bumpy

Запрос:

SELECT sum(Quanity1), sum(Quanity2), Property1 FROM Table Group By Property1

Результат:

Quanity1    Quanity2    Property1
43         23            Blue
55           133         Red

То, что я хочу сделать, - это дать пользователю графический интерфейс для этого, не зная, как писать запросы SQL или любой другой код в этом отношении. Например, набор списков, где они выбирают свойства и количества, которые они хотят просмотреть, и отображается таблица, в которой показаны выбранные поля с суммированными количествами. Позже я могу также захотеть добавить возможность для пользователя выполнять другие запросы SQL, например, такие действия, как фильтрация на основе определенных условий. Также я знаю, что позже мне нужно будет создавать привлекательные отчеты на основе этих пользовательских запросов.

Я очень новичок в ADO и .NET в целом. Но я думаю, что лучший способ сделать это - экспортировать мои данные в System.Data.DataTable, а затем создать интерфейс для пользователя для создания System.Data.DataView, сгенерировав строку для его свойства RowFilter. Хотя для меня не очевидно, как я могу не только фильтровать и сортировать DataTable, но и генерировать другую таблицу или представление, которое содержит только определенные столбцы из большой мастер-таблицы.

В целом это звучит как лучший вариант, или есть другой метод, который я должен рассмотреть? У кого-нибудь есть какие-то конкретные советы или предложения, как мне это реализовать? Я также задавался вопросом, будет ли что-нибудь из этого облегчено с помощью LINQ.

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

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

Ответы [ 2 ]

2 голосов
/ 06 мая 2009

Подумайте о покупке готового инструмента для запросов, а не изобретайте колесо. Самый дешевый, который мог бы сделать такие вещи - это MS Access или MSQuery в Excel. Более детально вы могли бы использовать Report Builder (если ваша база данных основана на SQL Server - это бесплатно) или сторонний инструмент, такой как Business Objects или Brio.

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

0 голосов
/ 06 мая 2009

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

...