powered by simpleCommunicator - 2.0.59     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / WPF, Silverlight [игнор отключен] [закрыт для гостей] / Подготовка БД для работы в Silverlight Business Application
45 сообщений из 45, показаны все 2 страниц
Подготовка БД для работы в Silverlight Business Application
    #37204933
samun
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
По учебе задали написать проект используя шаблон Silverlight Business Application Templat – нужно приложение для ввода информации по проектам. Начал с малового создания базы данных для хранения информации по проектам:

Создал таблицу ProjectUser

Код проекта ProjectId - primary key
Имя пользователя создавшего проект UserName
Название проекта ProjectName
Краткое описание Description
Дата начала проекта DateStart
Дата окончания проекта DateEnd
Горизонт расчета HC
KeyID


Создал таблицу CashFlow для денежного потока
Код проекта ProjectId
Приток денежных средств Inflow
Отток денежных средств Outflow
Год Year
CashFlowID - primary key




Связал таблицы по полям ProjectId - ProjectId


Создал модель ProjectBD указав в качестве источников таблицы ProjectUser и CashFlow.



Но вот тут и проблема "связь один к одному "
Подскажите пожалуйста почему связь один к одному ?

Нужна связь один ко многим т.к. проект длится несколько лет и для каждого года нужно отразить приток и отток денежных средств
...
Рейтинг: 0 / 0
Подготовка БД для работы в Silverlight Business Application
    #37205073
samun
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
samun,

Приношу извинения наверно усталость
Ошибка в том что я пишу "Связал таблицы по полям ProjectId - ProjectId"
а на слайде ProjectId - CashFlowID.

Спасибо!!
...
Рейтинг: 0 / 0
Подготовка БД для работы в Silverlight Business Application
    #37205779
Фотография уТКа
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
samun,

ну если вы посмотрите внимательно, то найдете CashFlow в таблице ProjectUser это и есть многое-ко-многим
...
Рейтинг: 0 / 0
Подготовка БД для работы в Silverlight Business Application
    #37207086
samun
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ошибка была в окне привязке должно было быть вот так:


уТКаsamun, ну если вы посмотрите внимательно, то найдете CashFlow в таблице ProjectUser это и есть многое-ко-многим
Подскажите пожалуйста где посмотреть ? и где я допустил ошибку что у меня получилось связь "многое-ко-многим"??
...
Рейтинг: 0 / 0
Подготовка БД для работы в Silverlight Business Application
    #37207109
samun
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
и теперь файл ProjectBD.edmx модель данных выглядит вот так
...
Рейтинг: 0 / 0
Подготовка БД для работы в Silverlight Business Application
    #37207160
samun
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Теперь для доступа к таблицам ProjectUser и CashFlow нужно создать класс DomaneService ProjectInOu для записи в таблицу информации по проекту.

Так же в клиентской части проекта (Silverlight) создал страницу InputProject для ввода пользователем информации по проекту
В XAML файл InputProject.xaml Добавил
Код: plaintext
1.
2.
3.
4.
riaControls:DomainDataSource AutoLoad="True" d:DesignData="{d:DesignInstance my:ProjectUser, CreateList=true}" Height="0" LoadedData="projectUserDomainDataSource_LoadedData_1" Name="projectUserDomainDataSource" QueryName="GetProjectUsersQuery" Width="0">
            <riaControls:DomainDataSource.DomainContext>
                <my1:ProjectInOu />
            </riaControls:DomainDataSource.DomainContext>
 </riaControls:DomainDataSource>

Вот тут у меня вопрос как лучше поступить с добавлением строк в таблицу CashFlow?

у одного проекта может быть несколько лет в которых есть приток и отток денежных средств т.е. одной строке в таблице ProjectUser соответствуют несколько строк в таблицеCashFlow, как сделать ввод информации правильно ?

Я предположил что можно сделать вот так: добавить в проект дочернее окно CashFlowChildWindow.xaml
В него добавил
Код: plaintext
1.
2.
3.
4.
5.
        <riaControls:DomainDataSource AutoLoad="True" d:DesignData="{d:DesignInstance my1:CashFlow, CreateList=true}" Height="0" LoadedData="cashFlowDomainDataSource_LoadedData" Name="cashFlowDomainDataSource" QueryName="IQueryable" Width="0">
            <riaControls:DomainDataSource.DomainContext>
                <my:ProjectInOu />
            </riaControls:DomainDataSource.DomainContext>
        </riaControls:DomainDataSource>
а также поле public int ProjectId { get; set; }
т.е. доступ к таблице CashFlow через cashFlowDomainDataSource по средствам метода IQueryable в который передается ProjectId
код из класса ProjectInOu.cs
Код: plaintext
1.
2.
3.
 public IQueryable<CashFlow> IDGetCashFlows(int PrId)
        {
            return this.ObjectContext.CashFlows.Where(a => a.ProjectId.CompareTo(PrId));
        }
Как вы думаете такое подход ля добовления информации в связанные таблицы верен ?
...
Рейтинг: 0 / 0
Подготовка БД для работы в Silverlight Business Application
    #37207993
Фотография pitachek69
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
немного поофтоплю

уТКа,

может будет интересно , Вы вроде как-то искали)
...
Рейтинг: 0 / 0
Подготовка БД для работы в Silverlight Business Application
    #37208051
samun
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
pitachek69немного поофтоплю

уТКа,

может будет интересно , Вы вроде как-то искали)

Спасибо за ценный совет по теме ;))
...
Рейтинг: 0 / 0
Подготовка БД для работы в Silverlight Business Application
    #37208111
Фотография уТКа
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
pitachek69,

:)

спасибо, работодатель уже нашел меня.
...
Рейтинг: 0 / 0
Подготовка БД для работы в Silverlight Business Application
    #37208117
Фотография уТКа
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
samun,

если вам нужно подобие Мастер-детаил, то лучше реализовать его на отдельной странице и заюзать загрузку данных через Navigation Framework, а потом разместить эту страницу там где потребуется через Frame.
...
Рейтинг: 0 / 0
Подготовка БД для работы в Silverlight Business Application
    #37208126
Фотография уТКа
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
samun,

да к стати, вам может быть крайне полезен мой проект , писал специально для одного из проектов.
...
Рейтинг: 0 / 0
Подготовка БД для работы в Silverlight Business Application
    #37208136
samun
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
уТКаsamun,

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

это я устал и ничего не могу найти, или там (на странице мой проект ) нет вообще описания ?
...
Рейтинг: 0 / 0
Подготовка БД для работы в Silverlight Business Application
    #37208150
Фотография уТКа
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
samun,

описание есть, но оно скромное:
авторProject Description
Silverlight Ria Services Ex - is Extension library for Silverlight that helps Developers to work with RiaServices and create Bussines Applications.

лучше перейти на страницу загрузки и скачать пример, там увидите как все работает.
...
Рейтинг: 0 / 0
Подготовка БД для работы в Silverlight Business Application
    #37208156
samun
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
у меня вот такой вопрос
если я запишу вот так
<riaControls:DomainDataSource AutoLoad="True" d:DesignData="{d:DesignInstance my:ProjectUser, CreateList=true}" Height="0" LoadedData="projectUserDomainDataSource_LoadedData_2" Name="projectUserDomainDataSource" QueryName="GetProjectUsersQuery" Width="0">
<riaControls:DomainDataSource.DomainContext>
<my1:ProjectInOu />
</riaControls:DomainDataSource.DomainContext>
<riaControls:DomainDataSource.FilterDescriptors>
<riaControls:FilterDescriptor Operator="IsEqualTo" PropertyPath="UserName" Value="asdsa"/>
</riaControls:DomainDataSource.FilterDescriptors>
</riaControls:DomainDataSource>
то получается что с сервера на клиентскую сторону будут переданы все строки из базы а патом отфильтрованы те у которых поле UserName не начинается с asdsa???
вопрос задан к тому что если в базе много записей то они все будут переданы клиенту а патом отфильтрованы на клиентской стороне ? ну как бы объем будет большой передан
...
Рейтинг: 0 / 0
Подготовка БД для работы в Silverlight Business Application
    #37208180
samun
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
уТКа,

подскажите пожалуйста вот тут MSDN написано:

Добавление параметров к запросу
В некоторых случаях для метода запроса требуются значения параметров. Обычно методу запроса требуется значение параметра для фильтрации возвращаемых данных. Класс DomainDataSource предоставляет коллекцию QueryParameters для упрощения добавления параметров. В следующем примере показано, как добавить параметр со значением, которое задается в декларативном тексте.
и пример:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
<Grid x:Name="LayoutRoot" Background="White">
    <riaControls:DomainDataSource Name="source" QueryName="GetProductsByColor" AutoLoad="true">
        <riaControls:DomainDataSource.DomainContext>
            <domain:ProductDomainContext />
        </riaControls:DomainDataSource.DomainContext>
        <riaControls:DomainDataSource.QueryParameters>
            <riaControls:Parameter ParameterName="color" Value="Black" />
        </riaControls:DomainDataSource.QueryParameters>
    </riaControls:DomainDataSource>
    <data:DataGrid ItemsSource="{Binding Data, ElementName=source}" />
</Grid>
Когда я пытаюсь в своем примере для запроса GetProjectUsersUsName
Код: plaintext
1.
2.
3.
4.
5.
6.
 public EntityQuery<ProjectUser> GetProjectUsersUsNameQuery(string UserName)
        {
            Dictionary<string, object> parameters = new Dictionary<string, object>();
            parameters.Add("UserName", UserName);
            this.ValidateMethod("GetProjectUsersUsNameQuery", parameters);
            return base.CreateQuery<ProjectUser>("GetProjectUsersUsName", parameters, false, true);
        }

Настроить
элемент управления DomainDataSource
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
 <riaControls:DomainDataSource AutoLoad="True" d:DesignData="{d:DesignInstance my:ProjectUser, CreateList=true}" Height="0" LoadedData="projectUserDomainDataSource_LoadedData_2" Name="projectUserDomainDataSource" QueryName="GetProjectUsersUsNameQuery" Width="0">
            <riaControls:DomainDataSource.DomainContext>
                <my1:ProjectInOu />
                <riaControls:DomainDataSource.QueryParameters>
                    <riaControls:Parameter ParameterName="UserName" Value="asdsa" />
                </riaControls:DomainDataSource.QueryParameters>
            </riaControls:DomainDataSource.DomainContext>
            <riaControls:DomainDataSource.FilterDescriptors>
                <riaControls:FilterDescriptor Operator="IsEqualTo" PropertyPath="UserName" Value="asdsa"/>
            </riaControls:DomainDataSource.FilterDescriptors>
        </riaControls:DomainDataSource>

то для строки <riaControls:DomainDataSource.QueryParameters> выводит ошибку "Для типа "DomainDataSource" не найдено присоединяемое свойство "QueryParameters"."

Эт я гдето ошибся ?
...
Рейтинг: 0 / 0
Подготовка БД для работы в Silverlight Business Application
    #37208222
Фотография уТКа
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
samun,

а зачем вы
авторriaControls:DomainDataSource.QueryParameters
засунули в
авторriaControls:DomainDataSource.DomainContext
?

вот он и ругается...

авторон что, все будет грузить на клиента?
нет, фильтрация происходит на сервере и зачем результаты возвращаются на клиент.
...
Рейтинг: 0 / 0
Подготовка БД для работы в Silverlight Business Application
    #37211482
samun
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
уТКа,

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




Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
  <riaControls:DomainDataSource AutoLoad="True" d:DesignData="{d:DesignInstance my:ProjectUser, CreateList=true}" Height="0" LoadedData="projectUserDomainDataSource_LoadedData" Name="projectUserDomainDataSource" QueryName=" GetProjectUsersUsNameQuery" Width="0">
            <riaControls:DomainDataSource.DomainContext>
                <my1:ProjectInOu />
            </riaControls:DomainDataSource.DomainContext>
        </riaControls:DomainDataSource>
        <Grid DataContext="{Binding ElementName=projectUserDomainDataSource, Path=Data}" HorizontalAlignment="Left" Margin="48,33,0,0" Name="grid1" VerticalAlignment="Top" Height="207" Width="218">
            <Grid.ColumnDefinitions>
                <ColumnDefinition Width="Auto" />
                <ColumnDefinition Width="Auto" />
            </Grid.ColumnDefinitions>
            <Grid.RowDefinitions>
                <RowDefinition Height="Auto" />
                <RowDefinition Height="Auto" />
                <RowDefinition Height="Auto" />
                <RowDefinition Height="Auto" />
                <RowDefinition Height="Auto" />
                <RowDefinition Height="Auto" />
                <RowDefinition Height="Auto" />
            </Grid.RowDefinitions>
            <sdk:Label Content="Date End:" Grid.Column="0" Grid.Row="0" HorizontalAlignment="Left" Margin="3" VerticalAlignment="Center" />
            <sdk:DatePicker Grid.Column="1" Grid.Row="0" Height="23" HorizontalAlignment="Left" Margin="3" Name="dateEndDatePicker" SelectedDate="{Binding Path=DateEnd, Mode=TwoWay, NotifyOnValidationError=true, ValidatesOnExceptions=true}" VerticalAlignment="Center" Width="120" />
            <sdk:Label Content="Date Start:" Grid.Column="0" Grid.Row="1" HorizontalAlignment="Left" Margin="3" VerticalAlignment="Center" />
            <sdk:DatePicker Grid.Column="1" Grid.Row="1" Height="23" HorizontalAlignment="Left" Margin="3" Name="dateStartDatePicker" SelectedDate="{Binding Path=DateStart, Mode=TwoWay, NotifyOnValidationError=true, ValidatesOnExceptions=true}" VerticalAlignment="Center" Width="120" />
            <sdk:Label Content="Description:" Grid.Column="0" Grid.Row="2" HorizontalAlignment="Left" Margin="3" VerticalAlignment="Center" />
            <TextBox Grid.Column="1" Grid.Row="2" Height="23" HorizontalAlignment="Left" Margin="3" Name="descriptionTextBox" Text="{Binding Path=Description, Mode=TwoWay, NotifyOnValidationError=true, ValidatesOnExceptions=true, TargetNullValue=''}" VerticalAlignment="Center" Width="120" />
            <sdk:Label Content="HC:" Grid.Column="0" Grid.Row="3" HorizontalAlignment="Left" Margin="3" VerticalAlignment="Center" />
            <TextBox Grid.Column="1" Grid.Row="3" Height="23" HorizontalAlignment="Left" Margin="3" Name="hCTextBox" Text="{Binding Path=HC, Mode=TwoWay, NotifyOnValidationError=true, ValidatesOnExceptions=true}" VerticalAlignment="Center" Width="120" />
            <sdk:Label Content="Project Id:" Grid.Column="0" Grid.Row="4" HorizontalAlignment="Left" Margin="3" VerticalAlignment="Center" />
            <TextBox Grid.Column="1" Grid.Row="4" Height="23" HorizontalAlignment="Left" Margin="3" Name="projectIdTextBox" Text="{Binding Path=ProjectId, Mode=OneWay}" VerticalAlignment="Center" Width="120" />
            <sdk:Label Content="Project Name:" Grid.Column="0" Grid.Row="5" HorizontalAlignment="Left" Margin="3" VerticalAlignment="Center" />
            <TextBox Grid.Column="1" Grid.Row="5" Height="23" HorizontalAlignment="Left" Margin="3" Name="projectNameTextBox" Text="{Binding Path=ProjectName, Mode=TwoWay, NotifyOnValidationError=true, ValidatesOnExceptions=true, TargetNullValue=''}" VerticalAlignment="Center" Width="120" />
            <sdk:Label Content="User Name:" Grid.Column="0" Grid.Row="6" HorizontalAlignment="Left" Margin="3" VerticalAlignment="Center" />
            <TextBox Grid.Column="1" Grid.Row="6" Height="23" HorizontalAlignment="Left" Margin="3" Name="userNameTextBox" Text="{Binding Path=UserName, Mode=TwoWay, NotifyOnValidationError=true, ValidatesOnExceptions=true, TargetNullValue=''}" VerticalAlignment="Center" Width="120" />
  </Grid>

Добавил кнопку для сохранения изменений
Код: plaintext
1.
<Button Content="Save" Height="38" HorizontalAlignment="Left" Name="button1" VerticalAlignment="Top" Width="75" Command="{Binding ElementName=projectUserDomainDataSource, Path=SubmitChangesCommand}" Grid.Column="2" Grid.Row="8" />

Добавил кнопку для отмены изменений
Код: plaintext
1.
<Button Content="Cancel" Grid.Column="1" Grid.Row="8" Height="23" HorizontalAlignment="Left" Margin="50,10,0,0" Name="button2" VerticalAlignment="Top" Width="75" Command="{Binding ElementName=projectUserDomainDataSource, Path=RejectChangesCommand}" />
Для просмотра всех сущностей добавил DataPager
Код: plaintext
1.
<sdk:DataPager Grid.ColumnSpan="3" Grid.Row="9" Height="26" HorizontalAlignment="Left" Margin="42,0,0,0" Name="dataPager1" PageSize="10" VerticalAlignment="Top" Width="200" Source="{Binding ElementName=projectUserDomainDataSource, Path=Data}" />

Подскажите пожалуйста к чему надо привязать кнопку для добавления новой сущности (новой записи в таблицу)??
...
Рейтинг: 0 / 0
Подготовка БД для работы в Silverlight Business Application
    #37211548
samun
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
уТКа,

Еще для работы с таблицами рекомендуют использовать второй вариант, использованием контрола DataFrom:
например вот так:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
  <riaControls:DomainDataSource AutoLoad="True" d:DesignData="{d:DesignInstance my:ProjectUser, CreateList=true}" Height="0"
 LoadedData="projectUserDomainDataSource_LoadedData" Name="projectUserDomainDataSource" 
QueryName="GetProjectUsersUsNameQuery"  Width="0">
            <riaControls:DomainDataSource.DomainContext>
                <my1:ProjectInOu />
            </riaControls:DomainDataSource.DomainContext>
        </riaControls:DomainDataSource>
      
        <toolkit:BusyIndicator IsBusy="{Binding ElementName=projectUserDomainDataSource, Path=DomainContext.IsLoading}" 
                 BusyContent="{Binding Path=Strings.BusyIndicatorLoadingData, Source={StaticResource ApplicationResources}}">
            <toolkit:DataForm AutoGenerateFields="False" ItemsSource="{Binding ElementName=projectUserDomainDataSource, Path=Data}">
                <toolkit:DataForm.EditTemplate>
                    <DataTemplate>
                        <Grid>
                            <Grid.ColumnDefinitions>
                                <ColumnDefinition Width="Auto" />
                                <ColumnDefinition Width="Auto" />
                                <ColumnDefinition Width="59*" />
                            </Grid.ColumnDefinitions>
                            <Grid.RowDefinitions>
                                <RowDefinition Height="Auto" />
                                <RowDefinition Height="Auto" />
                                <RowDefinition Height="Auto" />
                                <RowDefinition Height="Auto" />
                                <RowDefinition Height="Auto" />
                                <RowDefinition Height="Auto" />
                                <RowDefinition Height="Auto" />
                                <RowDefinition Height="Auto" />
                                <RowDefinition Height="Auto" />
                                <RowDefinition Height="Auto" />
                                
                            </Grid.RowDefinitions>
                            <sdk:Label Content="Date End:" Grid.Column="0" Grid.Row="0" HorizontalAlignment="Left" Margin="3" VerticalAlignment="Center" />
                            <sdk:DatePicker Grid.Column="1" Grid.Row="0" Height="23" HorizontalAlignment="Left" Margin="3" Name="dateEndDatePicker" SelectedDate="{Binding Path=DateEnd, Mode=TwoWay, NotifyOnValidationError=true, ValidatesOnExceptions=true}" VerticalAlignment="Center" Width="120" />
                            <sdk:Label Content="Date Start:" Grid.Column="0" Grid.Row="1" HorizontalAlignment="Left" Margin="3" VerticalAlignment="Center" />
                            <sdk:DatePicker Grid.Column="1" Grid.Row="1" Height="23" HorizontalAlignment="Left" Margin="3" Name="dateStartDatePicker" SelectedDate="{Binding Path=DateStart, Mode=TwoWay, NotifyOnValidationError=true, ValidatesOnExceptions=true}" VerticalAlignment="Center" Width="120" />
                            <sdk:Label Content="Description:" Grid.Column="0" Grid.Row="2" HorizontalAlignment="Left" Margin="3" VerticalAlignment="Center" />
                            <TextBox Grid.Column="1" Grid.Row="2" Height="23" HorizontalAlignment="Left" Margin="3" Name="descriptionTextBox" Text="{Binding Path=Description, Mode=TwoWay, NotifyOnValidationError=true, ValidatesOnExceptions=true, TargetNullValue=''}" VerticalAlignment="Center" Width="120" />
                            <sdk:Label Content="HC:" Grid.Column="0" Grid.Row="3" HorizontalAlignment="Left" Margin="3" VerticalAlignment="Center" />
                            <TextBox Grid.Column="1" Grid.Row="3" Height="23" HorizontalAlignment="Left" Margin="3" Name="hCTextBox" Text="{Binding Path=HC, Mode=TwoWay, NotifyOnValidationError=true, ValidatesOnExceptions=true}" VerticalAlignment="Center" Width="120" />
                            <sdk:Label Content="Project Id:" Grid.Column="0" Grid.Row="4" HorizontalAlignment="Left" Margin="3" VerticalAlignment="Center" />
                            <TextBox Grid.Column="1" Grid.Row="4" Height="23" HorizontalAlignment="Left" Margin="3" Name="projectIdTextBox" Text="{Binding Path=ProjectId, Mode=OneWay}" VerticalAlignment="Center" Width="120" />
                            <sdk:Label Content="Project Name:" Grid.Column="0" Grid.Row="5" HorizontalAlignment="Left" Margin="3" VerticalAlignment="Center" />
                            <TextBox Grid.Column="1" Grid.Row="5" Height="23" HorizontalAlignment="Left" Margin="3" Name="projectNameTextBox" Text="{Binding Path=ProjectName, Mode=TwoWay, NotifyOnValidationError=true, ValidatesOnExceptions=true, TargetNullValue=''}" VerticalAlignment="Center" Width="120" />
                            <sdk:Label Content="User Name:" Grid.Column="0" Grid.Row="6" HorizontalAlignment="Left" Margin="3" VerticalAlignment="Center" />
                            <TextBox Grid.Column="1" Grid.Row="6" Height="23" HorizontalAlignment="Left" Margin="3" Name="userNameTextBox" Text="{Binding Path=UserName, Mode=TwoWay, NotifyOnValidationError=true, ValidatesOnExceptions=true, TargetNullValue=''}" VerticalAlignment="Center" Width="120" />
                        </Grid>
                    </DataTemplate>
                </toolkit:DataForm.EditTemplate>
            </toolkit:DataForm>

Подскажите пожалуйста:
1. что предпочтительней первый или второй вариант использование в каких случаях?
2. почему при использовании кнопок встроенных в контрол DataFrom (Delete - удаление сущности, Add - добавление, Ok - сохранение ) изменения не заносятся в Таблицу на сервере ??
...
Рейтинг: 0 / 0
Подготовка БД для работы в Silverlight Business Application
    #37211833
Фотография уТКа
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
samun,

для редактирования/добавления сущностей лучше использовать DataForm.

для того, чтобы данные ушли на сервер, их необходимо отправить:

Код: plaintext
<ваша_DomainDataSource>.SubmitChanges();
...
Рейтинг: 0 / 0
Подготовка БД для работы в Silverlight Business Application
    #37211842
Фотография уТКа
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
samun,

авторпочему при использовании кнопок встроенных в контрол DataFrom (Delete - удаление сущности, Add - добавление, Ok - сохранение ) изменения не заносятся в Таблицу на сервере ??
каждый раз, когда вы нажимаете на одну из этих кнопок, вы как бы помечаете, какую запись добавить, какую редактировать, а какую удалить, но отметка происходит на Клиентской части, поэтому, чтобы изменения вступили в силу (оказались на сервере) их необходимо отправлять (см. ответ выше)
...
Рейтинг: 0 / 0
Подготовка БД для работы в Silverlight Business Application
    #37211983
samun
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
уТКа,

а нет ли свойства DataForm которое бы указывала что на (Delete - удаление сущности, Ok - сохранение) надо сразу сохранять на сервере?

или надо подписаться на событие нажатие кнопки (Delete - удаление сущности, Ok - сохранение) и например добавить окно подтверждения и вызвать метод <ваша_DomainDataSource>.SubmitChanges();
...
Рейтинг: 0 / 0
Подготовка БД для работы в Silverlight Business Application
    #37212149
Фотография уТКа
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
samun,

я эти кнопки не использую вообще, просто отключаю, т.к. добавление/редактирование/сохранение реализую самостоятельно.
...
Рейтинг: 0 / 0
Подготовка БД для работы в Silverlight Business Application
    #37212384
samun
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
уТКа,

а можно посмотреть как вы их реализуете. т.к. с сохранить и отмена я разобрался. осталось разобраться как с листать, добавить, удалить.
...
Рейтинг: 0 / 0
Подготовка БД для работы в Silverlight Business Application
    #37212745
samun
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
уТКа,

у меня вот такой вопрос так как у меня две связанные таблицы та я как Вы и советовали сделал отдельное окно для отображения сушнастей связанной таблицы

в моем примере
я добавил на форму под DataForm (описание в Сообщении: 16) кнопку. и написал обработчик события
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
private void button1_Click(object sender, RoutedEventArgs e)
        {
            var win = new CashFlowChildWindow();
            ProjectUser proj = ProjectDataForm.CurrentItem as ProjectUser;
            //proj.CashFlows
         
            win.ProjectId = proj.ProjectId;
            win.cash = proj.CashFlows;
            win.Show();
        }

Если я правильно понял (из подсказки ) то поле proj.CashFlows Возвращает коллекцию связанных экземпляров сущности CashFlow
при компиляции оно пустое подскажите пожалуйста почему так?
(в таблице записи есть)
...
Рейтинг: 0 / 0
Подготовка БД для работы в Silverlight Business Application
    #37212864
Фотография уТКа
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
samun,

ссылка на то, как это делается уже была 10495728
...
Рейтинг: 0 / 0
Подготовка БД для работы в Silverlight Business Application
    #37212868
Фотография уТКа
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
samun,

авторВозвращает коллекцию связанных экземпляров сущности CashFlow
при компиляции оно пустое подскажите пожалуйста почему так?

думаю потому, что вам нужно открыть книгу и читать, иначе опыта не получить.
...
Рейтинг: 0 / 0
Подготовка БД для работы в Silverlight Business Application
    #37212878
samun
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
уТКа,

я тут на скачивал все не то. вы меня сильно выручите если подскажите автора и название книги.
...
Рейтинг: 0 / 0
Подготовка БД для работы в Silverlight Business Application
    #37213095
Фотография уТКа
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
samun,

даже не знаю что и советовать :)

сам не прочитал ни одной книги, все по форумам, статьям, да практикум.
...
Рейтинг: 0 / 0
Подготовка БД для работы в Silverlight Business Application
    #37219669
samun
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
уТКа,

Вот так сделал как Вы думаете правильно ли ?
создал окно CashFlowIDChildWindow2

ему прописал свойства
Код: plaintext
1.
public ProjectUser projectuser { get; set; }
public int ProjectId { get; set; }
добавил на страницу
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
        <riaControls:DomainDataSource LoadedData="cashFlowDomainDataSource_LoadedData" x:Name="cashFlowDomainDataSource" 
                                      QueryName="GetCashFlowsQuery"  Style="{StaticResource DDS}">
            <riaControls:DomainDataSource.FilterDescriptors>
                <riaControls:FilterDescriptor Operator="IsEqualTo" PropertyPath="ProjectId" Value="{Binding ProjectId}" />
            </riaControls:DomainDataSource.FilterDescriptors>
        </riaControls:DomainDataSource>
 <toolkit:BusyIndicator IsBusy="{Binding ElementName=cashFlowDomainDataSource, Path=DomainContext.IsLoading}" >
            <toolkit:DataForm HorizontalAlignment="Left" Margin="12,12,0,0" x:Name="dataForm1" VerticalAlignment="Top" Height="198" Width="354"
                              AutoGenerateFields="True"  ItemsSource="{Binding ElementName=cashFlowDomainDataSource, Path=Data}" AutoEdit="False" EditEnding="dataForm1_EditEnding" AddingNewItem="dataForm1_AddingNewItem" BeginningEdit="dataForm1_BeginningEdit">
            </toolkit:DataForm>
          </toolkit:BusyIndicator>
        <Button x:Name="CancelButton" Content="Отмена" Click="CancelButton_Click" Width="75" Height="23" HorizontalAlignment="Right" Margin="0,12,0,0" Grid.Row="1" />
        <Button x:Name="OKButton" Content="ОК" Click="OKButton_Click" Width="75" Height="23" HorizontalAlignment="Right" Margin="0,12,79,0" Grid.Row="1" />

подписался на событие EditEnding
Код: plaintext
1.
2.
 private void dataForm1_EditEnding(object sender, DataFormEditEndingEventArgs e)
        {      ((CashFlow)(((DataForm)sender).CurrentItem)).ProjectUser = projectuser;    }

и по завершению работы с связанной таблицей нажимается кнопку ОК окна CashFlowIDChildWindow2
обработчик события клик
Код: plaintext
1.
2.
3.
4.
private void OKButton_Click(object sender, RoutedEventArgs e)
        {   this.DialogResult = true;
            dataForm1.CommitEdit();
            cashFlowDomainDataSource.SubmitChanges();   }



окно вызываю так:нажатием на форме кнопки "денежный поток"

Обработчик нажатия кнопки вот так:
Код: plaintext
1.
2.
3.
4.
5.
 private void button1_Click(object sender, RoutedEventArgs e)
        {var win = new CashFlowIDChildWindow2();
            ProjectUser proj = ProjectDataForm.CurrentItem as ProjectUser;
            win.ProjectId = proj.ProjectId;
            win.projectuser = proj;
            win.Show();}
...
Рейтинг: 0 / 0
Подготовка БД для работы в Silverlight Business Application
    #37219740
samun
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
уТКа,

Подскажите пожалуйста как ограничить количество элементов добавляемых в DataForm, например для одного клиента можно создать только 5 заказов?

Предположил, что можно сделать так: при нажатии кнопки Add проверить количество записей в DataForm и если оно достигло определенного количества, то выдать сообщение и прервать выполнение добавления новой записи, для этого:
подписаться на событие AddingNewItem
Код: plaintext
<toolkit:DataForm AddingNewItem="dataForm1_AddingNewItem"> </toolkit:DataForm>
И в обработчике написать
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
private void dataForm1_AddingNewItem(object sender, DataFormAddingNewItemEventArgs e)
        {
            
            int i ;
            //int i =  ((DataForm)sender);
            if (i > 5)
            {
                MessageBox.Show("Записей больше 5");
                e.Cancel = true;
            }
       }
Но не знаю как в коде узнать количество записей, знаю что в sender передается текущий DataForm, в котором есть ItemsSource у которого есть свойства Count, но вот как получить к нему доступ не знаю подскажите пожалуйста, как?
...
Рейтинг: 0 / 0
Подготовка БД для работы в Silverlight Business Application
    #37219765
Фотография уТКа
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
samun,

у вас есть DomainContext, в котором хранятся все данные, путь решения:
- создать метод в DomainService который будет возвращать Bool в ответ на вопрос "сколько у этого клиента заказов?", дергать этот метод перед заполнением формы;

в коде ловить ответ и дальше решать что с этим делать.
...
Рейтинг: 0 / 0
Подготовка БД для работы в Silverlight Business Application
    #37219779
samun
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
уТКа,

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

Не подскажите как узнать количество сушностей в DataForm? (вернее в DataForm.ItemsSource?)
...
Рейтинг: 0 / 0
Подготовка БД для работы в Silverlight Business Application
    #37219838
samun
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
уТКа,
А вот так нельзя получать количество записей в DataFrom?
Код: plaintext
<toolkit:DataForm AddingNewItem="dataForm1_AddingNewItem"> </toolkit:DataForm>
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
  private void dataForm1_AddingNewItem(object sender, DataFormAddingNewItemEventArgs e)
        {
            
            int i = ((DomainDataSourceView)((DataForm)sender).ItemsSource).Count;
            if (i > 5)
            {
                MessageBox.Show("Записей больше 5");
                e.Cancel = true;
            }
}

Если нет то почему ?
...
Рейтинг: 0 / 0
Подготовка БД для работы в Silverlight Business Application
    #37220005
Фотография уТКа
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
samun,

повторю еще раз, у тебя есть DomainContext, все, что необходимо для работы находится там.

Код: plaintext
1.
domainContext.[заказы].Where(r => r.ClientId == [№_клиента]).Count();
...
Рейтинг: 0 / 0
Подготовка БД для работы в Silverlight Business Application
    #37220014
Фотография уТКа
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
уТКа,

но опять же, так лучше не делать, т.к. на момент проверки всех записей "на руках" может не оказаться.

Реализуй метод, который будет проверять количество заказов на сервере, а на клиента возвращать либо число, либо bool.
...
Рейтинг: 0 / 0
Подготовка БД для работы в Silverlight Business Application
    #37220020
samun
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
уТКа,

ок. понял.
...
Рейтинг: 0 / 0
Подготовка БД для работы в Silverlight Business Application
    #37220257
samun
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
уТКа,

Бывает что надо добавить в таблицу новое поле. И так получилось что уже для таблице сделано модель данных и DomainService, какие действия нужно предпринять для отображения поля в DataFrom?
Вот нашел в сети что надо делать, не подскажите это все действия ?
1 непосредственно добавить поле (в маем примере IdTender) в таблицу:

2 обновить модель данных из таблицы:

3 в файл [ имя DomainService].metadata.cs добавить поле в моем случае это
Код: plaintext
public int IdTender { get; set; }
4 если в клиентской части есть DataFrom для которого AutoGenerateFields="False" то в его шаблон добавить новую строку:
Код: plaintext
1.
2.
3.
<sdk:Label Content="Id Tender:" Grid.Column="0" Grid.Row="7" HorizontalAlignment="Left" Margin="3" VerticalAlignment="Center" />
<TextBox Grid.Column="1" Grid.Row="7" Height="23" HorizontalAlignment="Left" Margin="3" Name="idTenderTextBox" Text="{Binding 
Path=IdTender, Mode=TwoWay, NotifyOnValidationError=true, ValidatesOnExceptions=true, TargetNullValue=''}" VerticalAlignment="Center" 
Width="120" />
...
Рейтинг: 0 / 0
Подготовка БД для работы в Silverlight Business Application
    #37220409
Фотография уТКа
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
samun,

все правильно, т.к. утилита для DomainService не позволяет обновлять метаданные, приходится именно ручками их дописывать.
...
Рейтинг: 0 / 0
Подготовка БД для работы в Silverlight Business Application
    #37221968
samun
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
уТКа,

Вот такая ситуация нужно добавить в проект новую таблицу и связать с уже существующей, для этого в уже существующей таблице ProjectUser добавил поле IdTender:

Создал новую таблицу Tender с ключевым полем IdTender

Связал таблицы Tender и ProjectUser

Изменил модель данных


Теперь она выглядит вот так:

При сохранении VS ругается
авторОшибка 1 Ошибка 113: Недопустимое количество элементов в Role "Tender" в связи "FK_ProjectUser_Tender". Поскольку все свойства в Dependent Role не допускают значение null, количество элементов Principal Role должно быть "0..1".
Вот на это описание в файле модели данных:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
<Association Name="FK_ProjectUser_Tender">
          <End Type="u215600Model2.Tender" Role="Tender" Multiplicity="1" />
          <End Type="u215600Model2.ProjectUser" Role="ProjectUser" Multiplicity="*" />
          <ReferentialConstraint>
            <Principal Role="Tender">
              <PropertyRef Name="IdTender" />
            </Principal>
            <Dependent Role="ProjectUser">
              <PropertyRef Name="IdTender" />
            </Dependent>
          </ReferentialConstraint>
</Association>
При создании новой модели данных этой ошибки нет.
И если сделать так:
1 Удалить модель данных
2 Создать новую модель данных с тем же именем
Скопировать из файла [Имя модели данных].Designer.cs
Имя создаваемого класса контекста в моем случае это
Код: plaintext
public partial class u215600Entities2 : ObjectContext
и в файле класса веб службы заменить на имя вновь созданного контекста
Код: plaintext
1.
[EnableClientAccess()]
    public class ProjectInOu : LinqToEntitiesDomainService<u215600Entities2>
Да и добавил несколько методов
Код: plaintext
1.
2.
3.
4.
5.
public IQueryable<Tender> GetTenders()
public IQueryable<Tender> GetTendersUser()
public void InsertTender(Tender tender)
public void UpdateTender(Tender currentTender)
public void DeleteTender(Tender tender)
ну и добавил Класс в файл метаданных.
то все работает.
Так вот вопрос как правильно поступать, если в схему данных нужно внести значительные изменения ?
...
Рейтинг: 0 / 0
Подготовка БД для работы в Silverlight Business Application
    #37222306
Фотография уТКа
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
samun,

так я точно не делаю, пускай этим занимается предназначенный генератор Entity Framework :)

видимо у тебя в схеме допущена ошибка, попробуй на предмет ошибки погуглить.
...
Рейтинг: 0 / 0
Подготовка БД для работы в Silverlight Business Application
    #37223138
samun
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
уТКа,

Ну у меня опять вопрос пока не нашел решения
для:
Код: plaintext
 <riaControls:DomainDataSource x:Name="pDomainDataSource"  />

можно добавить кнопку которая будет активна когда были внесены изменения в сушности например вот так:
Код: plaintext
<Button Name="button1" Command="{Binding ElementName=pDomainDataSource, Path=SubmitChangesCommand}"  />
Пока не понял как сделать кнопку что бы она была активна в обратной ситуации, т.е. активна только тогда когда данные не нужно сохранять т.е. IsEnabled новой кнопки был обратный button1 ?
есть ли свойство у DomainDataSource к которому можно Bindingом привязать Button.IsEnabled
Код: plaintext
IsEnabled="{Binding ElementName=pDomainDataSource, Path=???}"
...
Рейтинг: 0 / 0
Подготовка БД для работы в Silverlight Business Application
    #37223291
samun
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
samun,
Ну как бы и ответ:
Код: plaintext
1.
2.
<Button Content="Cинхронизация" Name="button2"  Grid.Row="2" Margin="3" IsEnabled="{Binding ElementName=button1, Path=IsEnabled, Converter={StaticResource NotOperatorValueConverter}}" />
        <Button Content="Cинхронизация" Name="button2"  Grid.Row="2" Margin="3" IsEnabled="{Binding ElementName=projectUserDomainDataSource, Path=HasChanges, Converter={StaticResource NotOperatorValueConverter}}" />
Правильно нет?
...
Рейтинг: 0 / 0
Подготовка БД для работы в Silverlight Business Application
    #37223324
samun
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
samun,

а если для вашего примера то вот так:
Код: plaintext
<toolkit:DataField Label="" Grid.Row="8" IsEnabled="{Binding Source={StaticResource DomainContext}, Path=HasChanges, Converter={StaticResource NotOperatorValueConverter}}">
Правильно нет ?
...
Рейтинг: 0 / 0
Подготовка БД для работы в Silverlight Business Application
    #37223350
Фотография уТКа
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
samun,

авторПравильно нет ?
правильно (если там есть такое свойство), но привязку на DomainContext стоит делать, если ты уверен, что в соседнем окне глупый юзер не внесет изменения.
...
Рейтинг: 0 / 0
Подготовка БД для работы в Silverlight Business Application
    #37225718
samun
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
уТКаsamun,

даже не знаю что и советовать :)

сам не прочитал ни одной книги, все по форумам, статьям, да практикум.
Мне помогла вместе с выше перечисленным книга Gill Cleeren, Kevin Dockx - Microsoft Silverlight 4 Data and Services Cookbook 2010.pdf
...
Рейтинг: 0 / 0
45 сообщений из 45, показаны все 2 страниц
Форумы / WPF, Silverlight [игнор отключен] [закрыт для гостей] / Подготовка БД для работы в Silverlight Business Application
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]