LightSwitch - вопрос №257566

Программа LightSwitch (C#)

Вопросы:

1) В программе LightSwitch у меня созданые две таблицы, при этом таблицы соеденены как «ОДИН» ко «Многим». Я могу спокойно использовать данные в вычисляемых полях из таблицы «ОДИН» в таблице «Многим» (пример Tabl1.«наименование сущьности»), но мне нужно чтобы я смог использовать данные из таблице «МНОГИМ» в таблице «ОДИН», через команду указанную как пример, я этого сделать не могу, подскажите как этоможно сделать?

2) В созданной таблице имеются две сущности типа decimal. Одна сущность помечена как вычисляемое поле.

После запуска отладки я забиваю данные в таблицу и мне нужно, чтобы вычисляемое поле прибавляло свое значение в первой строке ко второй. Каким образом нужно написать формулу?

Лучший ответ по мнению автора

1) — прошу прощения, но совершенно не понятно что надо получить и в чем проблема

этот вопрос стоит расписать примерно так:

есть Заказчики(ид, наименование,… КоллекцияЗаказы) и Заказы(ид,…, ИдЗаказчика)… или другие по смыслу, если это будет полезнее для понимания

и уже после этого поясните что имеено требуется получить?

на сколько я понимаю вопрос стоит не только в том «как отобразить», но тогда я пока не понимаю что требуется

2) — повторю просьбу — разделять вопросы, если не трудно ))

тут тоже не совсем пока понятно. но возникает ощущение что Вы пытаетесь повторить то что делали в Excel скорее всего — в одной из колонок идет сумировани значения в другой колонке — от начала списка до текущей строки?

идеология использования БД существенно отличается от использования электронных таблиц

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

кроме того в понятиях БД принципиально нет возможности ссылаться на строки в терминах «предыдущая»

реляционные БД ни чего не гарантируют о физическом порядке следования строк. в частности в любой табличной форме Вы можете изменить порядок сортировки и тогда порядок отображения сразу станет другим

если в excel Вы можете вставлять строки достаточно произвольно, то реляционные БД всегда будут добавлять строки в порядке хронологическово появления уникальной записи. это ни каким образом не связано с использованием освобождающегося места при удалении. управление физическим пространсвом скрыто от пользователя обычно (в lightswitch по крайней мере точно)

что бы выбрать конкретную строку используется «ключ», как правило это уникальное поле, чаще всего с именем Id (здесь из лени я обозначаю иногда Ид). каждая таблица должна иметь как минимум один уникальный ключ. хотя в общем случае ключей может быть много, не все они должны быть уникальными, а так же ключ может быть составным (вычисляемым, но в lightswitch вычисляемые поля ключами быть не могут)

пример — в строке таблицы есть поля (Фамилия, Имя, Отчество) а во многих местах программы требуется краская форма вида «Фамилия И.О.»

тогда формула вычисления могла бы выглядеть так

var ФамилияИО = Таблица.Фамилия + " " + Таблица.Имя.SubString(0, 1) + " " + Таблица.Имя.SubString(0, 1);

если Вам надо вычислять некоторое значение только в одном контексте — в lightswitch следует добавлять вычисляемый параметр в экранной форме. это можно сделать и части Details и в табличной части

если Вам очень хочется добиться поведения подобного Excel, при этом сохраня данны в таблице между сеансами работы — проще создать в таблице набор полей, но вынести логику заполнения в форму. на пример в методе InitializeDataWorkspase() конкретной формы.

примерно так

foreach(Заказ in DataWorkspase.Applicationdata.Заказы)

Заказ.ПолеКотороеНадоВычислить=(формула);

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

var Sum = 0;

foreach(Заказ in DataWorkspase.Applicationdata.Заказы)

{

Sum += Заказ.ПолеКотороесуммируем;

Заказ.ПолеКотороеНадоВычислить = Sum;

}


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

в частности нет большой проблемы формировать оперативные табличные расчеты, но для этого не следует использовать таблицы реляционной БД

23.04.12
Лучший ответ по мнению автора
Посмотреть всех экспертов из раздела Технологии > .Net/C#
Пользуйтесь нашим приложением Доступно на Google Play Загрузите в App Store