Реферат по предмету "Информатика"


Проектирование базы данных 5

Практическое задание по

прикладному программированию

на тему:

ПРОЕКТИРОВАНИЕ БАЗЫ ДАННЫХ


Преподаватель:
Студент:
Группа:

Санкт-Петербург

2010
Содержание

1. Формулировка задания
Практическое задание на тему «Проектирование БД» подразумевает выполнение следующих задач:

определение объектов и их характеристик, которые необходимо хранить в БД (определение исходных данных для проектирования структуры БД);

разработка структуры БД;

разработка уровня доступа к данным;

создание пользовательского интерфейса для работы с БД.


2. Описание БД


Для хранения БД были выбраны объекты, принадлежащие к области «Информационные материалы». Ключевым объектов хранения является информационный материал, включающий следующие характеристики:

название;

категорию информационного материала;

текстовое содержание материала;

видеоматериалы;

изображения;

аннотация к материалу;

указание на того, кто добавил материал;

дата публикации;

комментарии;

количество просмотров;

количество голосов;

общий рейтинг материала (сумма всех опубликованных пользователями рейтингов);

флаг, доступны ли комментарии к материалу или нет;

флаг, определяющий в архиве или нет материал;

флаг, определяющий одобрен ли к публикации материал.

На основе исходных данных по предметной области выделены следующие сущности:

информационный материал;

категория информационного материала;

комментарий;

видеоматериал;

изображение.

По сущностям построены таблицы со следующими полями:

Таблица InfoMat_Category




Название

Тип даных

PK

ID_Category

bigint




Name

nchar(30)




Description

nvarchar(max)




Image

image




ParentCategory

bigint




Таблица InfoMat_InfoMaterial


Таблица InfoMat_Image


Таблица InfoMat_Video


Таблица InfoMat_Comment

Связи между таблицами представлены на рисунке 1.






Рисунок 1 — Структура БД
--PAGE_BREAK--3. Описание интерфейса программы

3.1. Окно «Категории информационных материалов»
После запуска программы появляется окно пользовательского интерфейса «Категории информационных материалов», представленное на рисунке 2.

Основными элементы окна, выделенные на рисунке прямоугольниками:

Область, в которой отображаются категории информационных материалов.

Кнопка фильтрации (выбора по признакам) информационных материалов.

Кнопка удаления выбранной категории.

Кнопка добавления новой категории.

Кнопка сохранения сделанных изменений.

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

Кнопка, предоставляющая ряд действий: фильтрация, сортировка категорий.

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






Рисунок 2 — Окно «Категории информационных материалов»

Copyrights (авторские права).

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

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

Основные элементы окна, выделенные на рисунке прямоугольниками:

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

Кнопка просмотра выбранного информационного материала. Также просмотр материала можно осуществлять двойным щелчком по нему.

Кнопка удаления выбранного материала.

Кнопка редактирования выбранного информационного материала.



Кнопка добавления нового информационного материала.




Рисунок 3 — Окно «Информационные материалы»
3.3. Окно «Информационный материал»
Для просмотра информационного материала, т.е. для просмотра полной информации о нём: полного текста, комментариев, необходимо нажать кнопку 2, после чего появляется окно пользовательского интерфейса «Информационный материал». Это окно представлено на рисунке 4.

Основные элементы окна, выделенные на рисунке прямоугольниками:

Область, содержащая основную информацию материала.

Область, в которой отображаются комментарии.

Кнопка удаления выбранного комментария.

Область, предоставляющая возможность пользователю оставить свой комментарий.

Кнопка, добавляющая набранный комментарий к уже существующим.






Рисунок 4 — Окно «Информационный материал»
3.4. Окно «Редактирование информационного материала»
Для редактирования информационного материала необходимо в окне «Информационные материалы» нажать кнопку 4, после чего появится окно пользовательского интерфейса «Редактирование информационного материала». Окно представлено на рисунке 5.

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






Рисунок 5 — Окно «Редактирование информационного материала»
3.5. Окно «Добавление информационного материала»
Для добавления информационного материала необходимо в окне «Информационные материалы» нажать кнопку 5, после чего появится окно пользовательского интерфейса «Добавление информационного материала». Окно представлено на рисунке 6.

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






Рисунок 6 — Окно «Добавление информационного материала»
3.6. Окно «Фильтрация информационных материалов»
При щелчке по кнопке 2 окна пользовательского интерфейса «Категории информационных материалов», представленного на рисунке 2, появляется окно пользовательского интерфейса «Фильтрация информационных материалов», показанное на рисунке 7.






Рисунок 7 — Окно «Фильтрация информационных материалов»

Основные элементы окна, выделенные на рисунке прямоугольниками:

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

Текстовое поле, в котором можно задать часть названия или полное название информационного материала.

Параметр фильтрации, определяющий такой критерий фильтрации, как «Рейтинг» или «Популярность». «Рейтинг» — это средняя оценка пользователями материала. «Популярность» — это количество просмотров пользователями материала.

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

Направление сортировки: начиная с лучших (стрелка на зеленом фоне) или начиная с худших (стрелка на красном фоне) (по «Рейтингу» или «Популярности»).



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

Кнопка фильтрации информационных материалов по заданным параметрам.

Область, в которой отображаются результаты фильтрации.

Все кнопки окон имеют всплывающие подсказки, позволяющий пользователю быстро освоить интерфейс.
    продолжение
--PAGE_BREAK--4. Перечень запросов LINQ to Entities, используемых в приложении
В результате объектно-реляционного отображения (маппинга) (object-relational mapping, ORM) по средствам ADO.NET Entity Framework сформировалась объектная модель, представленная на рисунке 7.




Рисунок 7 — Объектная модель приложения

Запросы к БД осуществлялись уже не напрямую, а через используемый ORM с применением LINQ to Entities (Language-Integrated Query).

Для взаимодействия с БД в приложении были написаны следующие запросы:

получение категорий:



fromc in_entities.Categories

wherecategoryId == 0? (c.ParentCategory == categoryId || c.ParentCategory == null): (c.ParentCategory == categoryId)

select c

получение информационных материалов:

fromim in_entities.InfoMaterials.Include(«Image»).Include(«Comments»)

whereim.Category.ID_Category == categoryId

selectim

получение информационного материала:

(fromim in_entities.InfoMaterials.Include(«Image»).Include(«Comments»)

whereim.ID_InfoMaterial == materialId

selectim).First()

многопараметрический запрос фильтрации информационных материалов:

varinfoMaterials = fromim in_entities.InfoMaterials.Include(«Image»)

where(im.PublishDate >= filter.DateFrom && im.PublishDate

selectim;
if(filter.NumberOfRows

filter.NumberOfRows = int.MaxValue;
if(!string.IsNullOrEmpty(filter.Name))

infoMaterials = infoMaterials.Where(im => im.Name.Contains(filter.Name)).Take(filter.NumberOfRows);
if(filter.ByRating)

{

if(filter.SortDirection == SortDirectionType.Top)

infoMaterials = infoMaterials.OrderByDescending(im => im.Rating).Take(filter.NumberOfRows);

else

infoMaterials = infoMaterials.OrderBy(im => im.Rating).Take(filter.NumberOfRows);

}

if(filter.ByViewCount)

if(filter.SortDirection == SortDirectionType.Top)

infoMaterials = infoMaterials.OrderByDescending(im => im.ViewCount).Take(filter.NumberOfRows);

else

infoMaterials = infoMaterials.OrderBy(im => im.ViewCount).Take(filter.NumberOfRows);

Всеостальныеоперации, помимоselect, обеспечиваютсязасчетORM, свойстваDataSource элементауправленияGridControl итехнологииDataBindings, реализованнойвWPF (Windows Presentation Foundation).
5. Листинг программы
App.xaml
Applicationx:Class=«WpfRDB.App»

xmlns=«schemas.microsoft.com/winfx/2006/xaml/presentation»

xmlns:x=«schemas.microsoft.com/winfx/2006/xaml»xmlns:Core=«clr-namespace:DevExpress.Wpf.Core;assembly=DevExpress.Wpf.Core.v9.3»StartupUri=«CategoriesWindow.xaml»>

Application.Resources>

ResourceDictionary>

DataTemplatex:Key=«DetailCoreTemplate»>

Core:MeasurePixelSnapper>

Grid>

Grid.RowDefinitions>

RowDefinitionHeight=«4» />

RowDefinitionHeight=«Auto» />

RowDefinitionHeight=«4» />

Grid.RowDefinitions>

Grid.ColumnDefinitions>

ColumnDefinitionWidth=«4» />

ColumnDefinitionWidth=«Auto»/>

ColumnDefinitionWidth=«12»/>

ColumnDefinition/>

Grid.ColumnDefinitions>

BorderGrid.Column=«1»Grid.Row=«1»BorderBrush=«Black»BorderThickness=«1»>

ImageSource="{BindingDataContext.BitmapSource}"Height=«128»Width=«128»Name=«imgInfoMat»Stretch=«Fill»HorizontalAlignment=«Left»VerticalAlignment=«Top»/>

Border>

GridGrid.Column=«3»Grid.Row=«1»>

Grid.ColumnDefinitions>

ColumnDefinitionWidth=«Auto»MinWidth=«125» />

ColumnDefinitionWidth=«12»/>

ColumnDefinition/>

Grid.ColumnDefinitions>

Grid.RowDefinitions>

RowDefinitionHeight=«26»/>

RowDefinitionHeight=«42»/>

RowDefinitionHeight=«20»/>

RowDefinitionHeight=«20»/>

RowDefinitionHeight=«20» />

Grid.RowDefinitions>

TextBlockGrid.Column=«0»Grid.Row=«0»Text="Название:"/>

TextBlockGrid.Column=«0»Grid.Row=«1»Text="Описание:"/>

TextBlockGrid.Column=«0»Grid.Row=«2»Text="Датапубликации:"/>

TextBlockGrid.Column=«0»Grid.Row=«3»Text="Количествопросмотров:"/>

TextBlockGrid.Column=«0»Grid.Row=«4»Text="Рейтинг:"/>

TextBlockGrid.Column=«2»Grid.Row=«0»Text="{BindingDataContext.Name}"/>



TextBlockGrid.Column=«2»Grid.Row=«1»Text="{BindingDataContext.Annotation}"TextWrapping=«WrapWithOverflow»/>

TextBlockGrid.Column=«2»Grid.Row=«2»Text="{BindingDataContext.PublishDate,Converter={Core:FormatStringConverterD}}"/>

TextBlockGrid.Column=«2»Grid.Row=«3»Text="{BindingDataContext.ViewCount}"/>

TextBlockGrid.Column=«2»Grid.Row=«4»Text="{BindingDataContext.Rating}"/>

Grid>

Grid>

Core:MeasurePixelSnapper>

DataTemplate>

ResourceDictionary>

Application.Resources>

Application>
    продолжение
--PAGE_BREAK--CategoriesWindow.xaml
Windowx:Class=«WpfRDB.CategoriesWindow»

xmlns=«schemas.microsoft.com/winfx/2006/xaml/presentation»

xmlns:x=«schemas.microsoft.com/winfx/2006/xaml»

xmlns:dxg=«schemas.devexpress.com/winfx/2008/xaml/grid»

xmlns:dx=«schemas.devexpress.com/winfx/2008/xaml/core»

xmlns:dxe=«schemas.devexpress.com/winfx/2008/xaml/editors»

Title="Категорииинформационныхматериалов"Height=«592»Width=«800»Loaded=«Window_Loaded»MinHeight=«592»

Icon=«Images/yinyang.png»Closing=«Window_Closing»>

GridMargin=«0,0,0,0»dx:ThemeManager.ThemeName=«Office2007Blue»>

Grid.RowDefinitions>

RowDefinitionHeight=«402*» />

RowDefinitionHeight=«165*» />

Grid.RowDefinitions>

dxg:GridControlName=«grdCategories»Margin=«2,2,2,2»>

dxg:GridControl.Columns>

dxg:GridColumnFieldName=«Name»>Категорияdxg:GridColumn>

dxg:GridColumnFieldName=«BitmapSource»AllowColumnFiltering=«False»>

dxg:GridColumn.CellTemplate>

DataTemplate>

ImageSource="{BindingPath=Value}"HorizontalAlignment=«Left»Margin=«8,3,0,3»Stretch=«Fill» />

DataTemplate>

dxg:GridColumn.CellTemplate>

dxg:GridColumn>

dxg:GridColumnFieldName=«Description»MinWidth=«100»EditSettings="{dxe:MemoSettingsShowIcon=False,PopupWidth=500,PopupHeight=300,MemoTextWrapping=Wrap,MemoVerticalScrollBarVisibility=Auto}">Описаниеdxg:GridColumn>

dxg:GridControl.Columns>

dxg:GridControl.View>

dxg:CardViewShowGroupPanel=«False»IsColumnChooserVisible=«False»AllowEditing=«False»ShowGroupedColumns=«True»CardAlignment=«Center»CardLayout=«Columns»MaxCardCountInRow=«1»NavigationStyle=«Cell»FixedSize=«250»MinFixedSize=«150»Name=«view»CardHeaderDisplayMemberBinding="{BindingPath=Data.Name,RelativeSource={RelativeSourceSelf}}"MouseDoubleClick=«view_MouseDoubleClick»FocusedRowChanged=«view_FocusedRowChanged» />

dxg:GridControl.View>

dxg:GridControl>



GroupBoxGrid.Row=«1»x:Name=«panel»DataContext="{BindingPath=View.FocusedRowData,ElementName=grdCategories}"Margin=«0,0,0,1»Height=«153.674»VerticalAlignment=«Bottom»>

Grid>

Grid.ColumnDefinitions>

ColumnDefinitionWidth=«128»>ColumnDefinition>

ColumnDefinitionWidth="*">ColumnDefinition>

Grid.ColumnDefinitions>

Grid.RowDefinitions>

RowDefinitionHeight=«128»>RowDefinition>

Grid.RowDefinitions>

BorderBorderThickness=«1»BorderBrush=«Black»Height=«128»Width=«128»>

ImageSource="{BindingDataContext.BitmapSource}"Name=«imgCategory»Stretch=«Fill»HorizontalAlignment=«Left»VerticalAlignment=«Top»Grid.Column=«0»/>

Border>

ButtonName=«btnLoadImage»Margin=«0,0,1,1»Height=«22»Width=«22»HorizontalAlignment=«Right»VerticalAlignment=«Bottom»Click=«btnLoadImage_Click»>

ImageToolTip="Выбратьизображение">

Image.Source>pack://application:,,,/Images/folder_out.pngImage.Source>

Image>

Button>

GridGrid.Column=«1»Margin=«16,0,0,0»>

Grid.ColumnDefinitions>

ColumnDefinitionWidth=«Auto»MinWidth=«56» />

ColumnDefinitionWidth=«6»/>

ColumnDefinition/>

Grid.ColumnDefinitions>

Grid.RowDefinitions>

RowDefinitionHeight=«Auto»/>

RowDefinitionHeight=«4»/>

RowDefinitionHeight=«18» />

RowDefinitionHeight=«4»/>

RowDefinitionHeight=«Auto»/>

RowDefinitionHeight=«4»/>

RowDefinitionHeight=«60» />

RowDefinitionHeight=«4»/>

RowDefinitionHeight="*"/>

Grid.RowDefinitions>

TextBlockGrid.Column=«0»Grid.Row=«2»Text="Категория:"/>

TextBlockGrid.Column=«0»Grid.Row=«6»Text="Описание:"/>

dxe:TextEditName=«txtCategoryName»Grid.Column=«2»Grid.Row=«2»Text="{BindingDataContext.Name}"EditValueChanged=«TextBox_EditValueChanged»GotFocus=«TextBox_GotFocus» />

dxe:TextEditName=«txtDescription»Grid.Column=«2»Grid.Row=«6»VerticalContentAlignment=«Top»VerticalScrollBarVisibility=«Auto»Text="{BindingDataContext.Description}"TextWrapping=«WrapWithOverflow»EditValueChanged=«TextBox_EditValueChanged»GotFocus=«TextBox_GotFocus»/>

TextBlockGrid.Column=«2»Grid.Row=«8»VerticalAlignment=«Bottom»HorizontalAlignment=«Right»Height=«13.277»Width=«231»Text="© TSSoft. IMat, 2010. Всеправазащищены."Foreground=«DarkGray» />

Grid>

Grid>

GroupBox>



ButtonHeight=«22»Width=«22»HorizontalAlignment=«Right»Margin=«0,5,42,0»Name=«btnPrev»VerticalAlignment=«Top»Click=«btnPrev_Click»>

ImageToolTip="Назад">

Image.Source>pack://application:,,,/Images/nav_left_blue.pngImage.Source>

Image>

Button>

ButtonWidth=«22»Height=«22»HorizontalAlignment=«Right»Margin=«0,5,130,0»Name=«btnNew»Click=«btnNew_Click»VerticalAlignment=«Top»>

ImageToolTip="Добавитькатегорию">

Image.Source>pack://application:,,,/Images/window_add.pngImage.Source>

Image>

Button>

ButtonWidth=«22»Height=«22»HorizontalAlignment=«Right»Margin=«0,5,161,0»Name=«btnDelete»Click=«btnDelete_Click»VerticalAlignment=«Top»>

ImageToolTip="Удалитькатегорию">

Image.Source>pack://application:,,,/Images/window_delete.pngImage.Source>

Image>

Button>

ButtonWidth=«22»Height=«22»HorizontalAlignment=«Right»Name=«btnSave»Click=«btnSave_Click»Margin=«0,5,85,0»VerticalAlignment=«Top»>

ImageToolTip="Сохранить">

Image.Source>pack://application:,,,/Images/disk_blue.pngImage.Source>

Image>

Button>

TextBlockHeight=«18»Margin=«10,9,383,0»VerticalAlignment=«Top»Text="Переходвподкатегориюосуществляетсядвойнымщелчкомпокатегории"Foreground=«RoyalBlue» />

Grid>

Window>
    продолжение
--PAGE_BREAK--CategoriesWindow.xaml.cs
usingSystem.Collections.Generic;

usingSystem.IO;

usingSystem.Windows;

usingSystem.Windows.Forms;

usingSystem.Windows.Media.Imaging;

usingASDC.Model.InfoMaterials;

usingMessageBox=System.Windows.Forms.MessageBox;

namespaceWpfRDB

{

///

///Interaction logic for Window1.xaml

///

publicpartialclassCategoriesWindow

{

privateInfoMaterialsDataManager_dataManager;

privateobject_prevDataSource;

privateCategory_currentParentCategory;

privatebool_needForSave;

privatebool_focusedRowChanged;


publicCategoriesWindow()

{



InitializeComponent();

_dataManager = newInfoMaterialsDataManager();

}


privatevoidInitCategoriesGrid()

{

grdCategories.DataSource = _dataManager.CategoryRepository.GetCategories();

grdCategories.RefreshData();

}


privatevoidWindow_Loaded(objectsender, RoutedEventArgse)

{

InitCategoriesGrid();

}


privatevoidbtnNew_Click(objectsender, RoutedEventArgse)

{

grdCategories.BeginDataUpdate();


varc = newCategory{ParentCategory = _currentParentCategory != null? _currentParentCategory.ID_Category: 0,

Parent = _currentParentCategory};

((ListCategory>)grdCategories.DataSource).Add(c);

_dataManager.CategoryRepository.InsertCategory(c);

_needForSave = true;


grdCategories.EndDataUpdate();

grdCategories.View.MoveLastRow();

}


privatevoidbtnLoadImage_Click(objectsender, RoutedEventArgse)

{

vardlg = newOpenFileDialog();

dlg.Filter = «Image files: *.jpg, *.png, *.bmp | *.jpg; *.png; *.bmp»;


if(dlg.ShowDialog() == System.Windows.Forms.DialogResult.OK)

{

System.Drawing.Imageimg = System.Drawing.Image.FromFile(dlg.FileName);

BitmapImagebitmap = newBitmapImage();


bitmap.BeginInit();

MemoryStreamms = newMemoryStream();

img.Save(ms, System.Drawing.Imaging.ImageFormat.Png);

ms.Seek(0, SeekOrigin.Begin);

bitmap.StreamSource = ms;

bitmap.EndInit();


varc = (Category) grdCategories.GetFocusedRow();

c.BitmapSource = bitmap;

grdCategories.RefreshData();

_needForSave = true;

}

}


privatevoidbtnSave_Click(objectsender, RoutedEventArgse)

{

Save();

}


privatevoidbtnDelete_Click(objectsender, RoutedEventArgse)

{



if(grdCategories.View.SelectedRows.Count > 0)

{

if (MessageBox.Show(«Вы действительно хотите удалить выбранную категорию?», «Сообщение»,

MessageBoxButtons.OKCancel) == System.Windows.Forms.DialogResult.OK)

{

grdCategories.BeginDataUpdate();


varc = (Category) grdCategories.GetFocusedRow();

_dataManager.CategoryRepository.DeleteCategory(c);

((ListCategory>) (grdCategories.DataSource)).Remove(c);

_needForSave = true;


grdCategories.EndDataUpdate();

}

}

}


privatevoidview_MouseDoubleClick(objectsender, System.Windows.Input.MouseButtonEventArgse)

{

introwHandle = grdCategories.View.GetRowHandleByMouseEventArgs(e);

if(grdCategories.IsValidRowHandle(rowHandle))

{

if(AskForSave())

Save();


varc = (Category) grdCategories.GetFocusedRow();


if(c.Children != null)

{

_currentParentCategory = c;

_prevDataSource = grdCategories.DataSource;

grdCategories.DataSource = c.Children;

grdCategories.RefreshData();

}

else

{

varinfoMaterialsWindow = newInfoMaterialsWindow(_dataManager, c);

infoMaterialsWindow.Show();

}

}

}


privatevoidSave()

{

if(_needForSave)

{

_dataManager.CategoryRepository.SaveChanges();

_needForSave = false;

}

}


privateboolAskForSave()

{

if(_needForSave)

{

if(MessageBox.Show("Сохранитьсделанныеизменения?","Сообщение", MessageBoxButtons.OKCancel) == System.Windows.Forms.DialogResult.OK)

{



returntrue;

}

}

returnfalse;

}


privatevoidbtnPrev_Click(objectsender, RoutedEventArgse)

{

if(_prevDataSource != null)

grdCategories.DataSource = _prevDataSource;

}


privatevoidview_FocusedRowChanged(objectsender, DevExpress.Wpf.Grid.FocusedRowChangedEventArgse)

{

_focusedRowChanged = true;

}


privatevoidTextBox_EditValueChanged(objectsender, DevExpress.Wpf.Editors.EditValueChangedEventArgse)

{

if(!_focusedRowChanged)

_needForSave = true;

}


privatevoidWindow_Closing(objectsender, System.ComponentModel.CancelEventArgse)

{

if(AskForSave())

Save();

}


privatevoidTextBox_GotFocus(objectsender, RoutedEventArgse)

{

_focusedRowChanged = false;

}

}

}

    продолжение
--PAGE_BREAK--InfoMaterialAddEditWindow.xaml
Windowx:Class=«WpfRDB.InfoMaterialAddEditWindow»

xmlns=«schemas.microsoft.com/winfx/2006/xaml/presentation»

xmlns:x=«schemas.microsoft.com/winfx/2006/xaml»

xmlns:dxe=«clr-namespace:DevExpress.Wpf.Editors;assembly=DevExpress.Wpf.Editors.v9.3»

xmlns:dx=«clr-namespace:DevExpress.Wpf.Utils.Themes;assembly=DevExpress.Wpf.Core.v9.3»

Title=«InfoMaterial»Height=«692»Width=«721»Loaded=«Window_Loaded»Icon=«Images/yinyang.png»>

Griddx:ThemeManager.ThemeName=«Office2007Blue»x:Name=«grBase»>

Grid.ColumnDefinitions>

ColumnDefinitionWidth=«4» />

ColumnDefinition/>

ColumnDefinitionWidth=«4»/>

Grid.ColumnDefinitions>

Grid.RowDefinitions>

RowDefinitionHeight=«24» />

RowDefinitionHeight=«7» />

RowDefinitionHeight=«128» />

RowDefinitionHeight=«4» />



RowDefinitionHeight=«16» />

RowDefinitionHeight=«4» />

RowDefinitionHeight=«445*» />

RowDefinitionHeight=«4» />

RowDefinitionHeight=«28» />

RowDefinitionHeight=«4» />

Grid.RowDefinitions>

TextBlockGrid.Column=«1»HorizontalAlignment=«Left»Width=«64»Text="Заголовок:"Margin=«0,3» />

dxe:TextEditGrid.Column=«1»Margin=«0,0,3,2»Name=«txtHeader»Text="{BindingName}"FontSize=«14»FontWeight=«Bold»HorizontalAlignment=«Right»Width=«629»Grid.ColumnSpan=«2» />

BorderGrid.Column=«1»Grid.Row=«1»VerticalAlignment=«Top»Height=«1»BorderThickness=«1»BorderBrush=«Black»>Border>


GridGrid.Row=«2»Grid.Column=«1»>

Grid.ColumnDefinitions>

ColumnDefinitionWidth=«128»/>

ColumnDefinitionWidth=«4»/>

ColumnDefinitionWidth=«200*»/>

Grid.ColumnDefinitions>

BorderGrid.Column=«0»BorderThickness=«1»BorderBrush=«Black»>

ImageWidth=«128»HorizontalAlignment=«Left»Name=«imgPicture»Stretch=«Fill»Source="{BindingBitmapSource}" />

Border>

ButtonHeight=«22»Width=«22»HorizontalAlignment=«Right»Margin=«0,0,1,1»Name=«btnLoadImage»VerticalAlignment=«Bottom»Click=«btnLoadImage_Click»>

ImageToolTip="Выбратьизображение">

Image.Source>pack://application:,,,/Images/folder_out.pngImage.Source>

Image>

Button>

TextBlockGrid.Column=«2»Height=«19»HorizontalAlignment=«Left»VerticalAlignment=«Top»Width=«120»Text="Аннотация:" />

dxe:TextEditGrid.Column=«2»Name=«txtAnnotation»TextWrapping=«WrapWithOverflow»VerticalContentAlignment=«Top»Text="{BindingAnnotation}"Margin=«0,20,0,0» />

Grid>

TextBlockGrid.Row=«4»Grid.Column=«1»HorizontalAlignment=«Left»VerticalAlignment=«Bottom»Width=«132»Text="Текст:" />

dxe:TextEditGrid.Row=«6»Grid.Column=«1»Name=«txtText»TextWrapping=«WrapWithOverflow»VerticalContentAlignment=«Top»Text="{BindingText}" />


ButtonGrid.Row=«8»Grid.Column=«1»HorizontalAlignment=«Right»Name=«btnOK»Width=«75»Click=«btnOK_Click»>OKButton>

Grid>

Window>
    продолжение
--PAGE_BREAK--InfoMaterialAddEditWindow.xaml.cs
usingSystem.IO;

usingSystem.Windows;

usingSystem.Windows.Forms;

usingSystem.Windows.Media.Imaging;

usingASDC.Model.InfoMaterials;

namespaceWpfRDB

{

///



///Interaction logic for InfoMaterialAddWindow.xaml

///

publicpartialclassInfoMaterialAddEditWindow

{

privateInfoMaterial_infoMaterial;


publicInfoMaterialAddEditWindow()

{

InitializeComponent();

}


publicInfoMaterialAddEditWindow(InfoMaterialinfoMaterial): this()

{

_infoMaterial = infoMaterial;

}


privatevoidInitDataSources()

{

grBase.DataContext = _infoMaterial;

}


privatevoidRefreshDataSource()

{

grBase.DataContext = null;

grBase.DataContext = _infoMaterial;

}


privatevoidWindow_Loaded(objectsender, RoutedEventArgse)

{

InitDataSources();

}


privatevoidbtnOK_Click(objectsender, RoutedEventArgse)

{

DialogResult = true;

Close();

}


privatevoidbtnLoadImage_Click(objectsender, RoutedEventArgse)

{

vardlg = newOpenFileDialog();

dlg.Filter = «Image files: *.jpg, *.png, *.bmp | *.jpg; *.png; *.bmp»;


if(dlg.ShowDialog() == System.Windows.Forms.DialogResult.OK)

{

System.Drawing.Imageimg = System.Drawing.Image.FromFile(dlg.FileName);

BitmapImagebitmap = newBitmapImage();


bitmap.BeginInit();

MemoryStreamms = newMemoryStream();

img.Save(ms, System.Drawing.Imaging.ImageFormat.Png);

ms.Seek(0, SeekOrigin.Begin);

bitmap.StreamSource = ms;

bitmap.EndInit();

if(_infoMaterial.Image == null)

_infoMaterial.Image = newInfoMat_Image();

_infoMaterial.BitmapSource = bitmap;

RefreshDataSource();

}

}



}

}
InfoMaterialsFilterWindow.xaml
Windowx:Class=«WpfRDB.InfoMaterialsFilterWindow»

xmlns=«schemas.microsoft.com/winfx/2006/xaml/presentation»

xmlns:x=«schemas.microsoft.com/winfx/2006/xaml»

xmlns:dxe=«schemas.devexpress.com/winfx/2008/xaml/editors»

Title="Фильтрацияинформационныхматериалов"Icon=«Images/yinyang.png»Height=«588»Width=«639»xmlns:dxg=«schemas.devexpress.com/winfx/2008/xaml/grid»xmlns:dx=«clr-namespace:DevExpress.Wpf.Utils.Themes;assembly=DevExpress.Wpf.Core.v9.3»>

Griddx:ThemeManager.ThemeName=«Office2007Blue»>

Grid.RowDefinitions>

RowDefinitionHeight=«120» />

RowDefinitionHeight=«4» />

RowDefinitionHeight=«285*» />

Grid.RowDefinitions>

Grid>

Grid.RowDefinitions>

RowDefinitionHeight=«4» />

RowDefinitionHeight=«18» />

RowDefinitionHeight=«8» />

RowDefinitionHeight=«18» />

RowDefinitionHeight=«4» />

RowDefinitionHeight=«18» />

RowDefinitionHeight=«4» />

RowDefinitionHeight=«18» />

RowDefinitionHeight=«4» />

RowDefinitionHeight=«18» />

Grid.RowDefinitions>

Grid.ColumnDefinitions>

ColumnDefinitionWidth=«7» />

ColumnDefinitionWidth=«120» />

ColumnDefinitionWidth=«10» />

ColumnDefinitionWidth=«140» />

ColumnDefinitionWidth=«40» />

ColumnDefinitionWidth=«120» />

ColumnDefinitionWidth=«10» />

ColumnDefinitionWidth=«140» />

ColumnDefinitionWidth=«7*» />

Grid.ColumnDefinitions>

ImageGrid.Column=«1»Grid.ColumnSpan=«1»Grid.Row=«1»Grid.RowSpan=«1»Width=«16»Height=«16»VerticalAlignment=«Center»HorizontalAlignment=«Left»Stretch=«Fill»>

Image.Source>pack://application:,,,/Images/funnel_preferences.pngImage.Source>

Image>

TextBlockGrid.Column=«1»Grid.ColumnSpan=«5»Grid.Row=«1»Text="Параметрыфильтрацииинформационныхматериалов"Margin=«22,0,0,0»VerticalAlignment=«Center» />

BorderGrid.Column=«0»Grid.ColumnSpan=«7»Grid.Row=«2»VerticalAlignment=«Center»Height=«0.5»BorderThickness=«0.5»BorderBrush=«Navy»>Border>

TextBlockGrid.Column=«1»Grid.ColumnSpan=«1»Grid.Row=«3»Grid.RowSpan=«1»Text="Название:"/>

dxe:TextEditGrid.Column=«3»Grid.Row=«3»Grid.RowSpan=«1»Name=«txtName» />

dxe:CheckEditGrid.Column=«1»Grid.Row=«5»Name=«chkRating»Content="Рейтинг"IsChecked=«True»Checked=«RatingAndViewCount_Checked»Unchecked=«RatingAndViewCount_Unchecked» />



dxe:CheckEditGrid.Column=«3»Grid.Row=«5»Name=«chkViewCount»Content="Популярность"ToolTip="Количествопросмотров"Checked=«RatingAndViewCount_Checked»Unchecked=«RatingAndViewCount_Unchecked» />

TextBlockGrid.Column=«1»Grid.ColumnSpan=«1»Grid.Row=«7»Grid.RowSpan=«1»Text="Количество:" />

dxe:SpinEditGrid.Column=«3»Grid.Row=«7»Grid.RowSpan=«1»Name=«speNumberOfRows»IsFloatValue=«False» />

TextBlockGrid.Column=«5»Grid.ColumnSpan=«1»Grid.Row=«3»Grid.RowSpan=«1»Text="Датапубликации"/>

TextBlockGrid.Column=«5»Grid.ColumnSpan=«1»Grid.Row=«5»Grid.RowSpan=«1»Text="с:"/>

dxe:DateEditGrid.Column=«7»Grid.Row=«5»Grid.RowSpan=«1»Name=«dteDateFrom»/>

TextBlockGrid.Column=«5»Grid.ColumnSpan=«1»Grid.Row=«7»Grid.RowSpan=«1»Text="по:"/>

dxe:DateEditGrid.Column=«7»Grid.Row=«7»Grid.RowSpan=«1»Name=«dteDateTo»/>

TextBlockGrid.Column=«1»Grid.ColumnSpan=«1»Grid.Row=«9»Grid.RowSpan=«1»Text="Направление:"/>

dxe:CheckEditGrid.Column=«3»Grid.Row=«9»ToolTip="Лучшие"Name=«chkTop»IsChecked=«True»Checked=«TopAndLow_Checked»HorizontalAlignment=«Left»Width=«40»Unchecked=«TopAndLow_Unchecked»>

Image>

Image.Source>pack://application:,,,/Images/nav_up_green.pngImage.Source>

Image>

dxe:CheckEdit>

dxe:CheckEditGrid.Column=«3»Grid.Row=«9»Width=«40»HorizontalAlignment=«Left»ToolTip="Худшие"Name=«chkLow»Margin=«44,0,0,0»Checked=«TopAndLow_Checked»Unchecked=«TopAndLow_Unchecked»>

Image>

Image.Source>pack://application:,,,/Images/nav_down_red.pngImage.Source>

Image>

dxe:CheckEdit>

ButtonGrid.Column=«7»Grid.Row=«9»Name=«btnFilter»Margin=«32,0,0,0»Click=«btnFilter_Click»>ФильтроватьButton>

Grid>

BorderGrid.Row=«1»VerticalAlignment=«Center»Height=«0.5»BorderThickness=«0.5»BorderBrush=«Navy»>Border>

dxg:GridControlGrid.Row=«2»Name=«grdInfoMaterials»>

dxg:GridControl.Columns>

dxg:GridColumnFieldName=«Name»>Названиеdxg:GridColumn>

dxg:GridColumnFieldName=«Annotation»>Описаниеdxg:GridColumn>

dxg:GridColumnFieldName=«ViewCount»>Количествопросмотровdxg:GridColumn>

dxg:GridColumnFieldName=«Rating»>Рейтингdxg:GridColumn>

dxg:GridColumnFieldName=«PublishDate»>Датапубликацииdxg:GridColumn>

dxg:GridControl.Columns>

dxg:GridControl.View>

dxg:TableView

Name=«view»ShowGroupPanel=«False»ShowColumnHeaders=«False»NavigationStyle=«Row»DataRowTemplate="{DynamicResourceDetailCoreTemplate}"AutoWidth=«True»MouseDoubleClick=«view_MouseDoubleClick»>

dxg:TableView>

dxg:GridControl.View>

dxg:GridControl>

Grid>

Window>
    продолжение
--PAGE_BREAK--InfoMaterialsFilterWindow.xaml.cs
usingSystem;

usingSystem.Collections.Generic;

usingASDC.Model.Classes;

usingASDC.Model.InfoMaterials;

usingDevExpress.Wpf.Editors;

namespaceWpfRDB

{

///

///ЛогикадляInfoMaterialsFilterWindow.xaml

///

publicpartialclassInfoMaterialsFilterWindow

{

privateInfoMaterialsDataManager_dataManager;

privateCheckEdit_curRatingOrViewCount;

privateCheckEdit_curTopOrLow;


publicInfoMaterialsFilterWindow()

{

InitializeComponent();

_curRatingOrViewCount = chkRating;

_curTopOrLow = chkTop;

}


publicInfoMaterialsFilterWindow(InfoMaterialsDataManagerdataManager): this()

{

_dataManager = dataManager;

}


privatevoidview_MouseDoubleClick(objectsender, System.Windows.Input.MouseButtonEventArgse)

{

introwHandle = grdInfoMaterials.View.GetRowHandleByMouseEventArgs(e);

if(grdInfoMaterials.IsValidRowHandle(rowHandle))

{

varinfoMaterial = (InfoMaterial) grdInfoMaterials.GetRow(rowHandle);

infoMaterial = _dataManager.InfoMaterialRepository.GetInfoMaterial(infoMaterial.ID_InfoMaterial);

((ListInfoMaterial>) grdInfoMaterials.DataSource)[grdInfoMaterials.GetRowListIndex(rowHandle)] =

infoMaterial;

ViewMaterial(infoMaterial);

}

}


privatevoidbtnFilter_Click(objectsender, System.Windows.RoutedEventArgse)

{

varfilter = newFilter();

filter.Name = txtName.Text;

filter.ByRating = chkRating.IsChecked != null? (bool) chkRating.IsChecked: false;

filter.ByViewCount = chkViewCount.IsChecked != null? (bool) chkViewCount.IsChecked: false;

filter.NumberOfRows = (int) speNumberOfRows.Value;

filter.DateFrom = dteDateFrom.EditValue != null? dteDateFrom.DateTime: newDateTime(1900,01,01);



filter.DateTo = dteDateTo.EditValue != null? dteDateTo.DateTime: DateTime.Now;

filter.SortDirection = chkTop.IsChecked == true? SortDirectionType.Top: SortDirectionType.Low;

grdInfoMaterials.BeginDataUpdate();

grdInfoMaterials.DataSource = _dataManager.InfoMaterialRepository.GetInfoMaterialsByFilter(filter);

grdInfoMaterials.EndDataUpdate();

}


privatevoidRatingAndViewCount_Checked(objectsender, System.Windows.RoutedEventArgse)

{

_curRatingOrViewCount = (CheckEdit) sender;

if(sender.Equals(chkRating))

chkViewCount.IsChecked = false;

else

chkRating.IsChecked = false;


}


privatevoidTopAndLow_Checked(objectsender, System.Windows.RoutedEventArgse)

{

_curTopOrLow = (CheckEdit) sender;

if(sender.Equals(chkTop))

chkLow.IsChecked = false;

else

chkTop.IsChecked = false;

}


privatevoidRatingAndViewCount_Unchecked(objectsender, System.Windows.RoutedEventArgse)

{

varchk = (CheckEdit)sender;

if(chk.Equals(_curRatingOrViewCount))

chk.IsChecked = true;

}


privatevoidTopAndLow_Unchecked(objectsender, System.Windows.RoutedEventArgse)

{

varchk = (CheckEdit)sender;

if(chk.Equals(_curTopOrLow))

chk.IsChecked = true;

}


privatevoidViewMaterial(InfoMaterialinfoMaterial)

{


varimWindow = newInfoMaterialWindow(infoMaterial);

imWindow.ShowDialog();

Save();

}


privatevoidSave()

{

_dataManager.InfoMaterialRepository.SaveChanges();

}

}

}

    продолжение
--PAGE_BREAK--InfoMaterialsWindow.xaml
Windowx:Class=«WpfRDB.InfoMaterialsWindow»

xmlns=«schemas.microsoft.com/winfx/2006/xaml/presentation»

xmlns:x=«schemas.microsoft.com/winfx/2006/xaml»

xmlns:dx=«clr-namespace:DevExpress.Wpf.Utils.Themes;assembly=DevExpress.Wpf.Core.v9.3»Title="Информационныематериалы"Height=«494»Width=«758»Loaded=«Window_Loaded»

Icon=«Images/yinyang.png»>

Griddx:ThemeManager.ThemeName=«Office2007Blue»>

Grid.RowDefinitions>

RowDefinitionHeight=«24» />

RowDefinitionHeight=«2» />

RowDefinitionHeight=«369*» />

Grid.RowDefinitions>

ImageWidth=«16»HorizontalAlignment=«Left»Margin=«4,4,0,4»Name=«image1»Stretch=«Fill»>

Image.Source>pack://application:,,,/Images/information.pngImage.Source>

Image>

TextBlockHorizontalAlignment=«Left»Margin=«26,4,0,4»Name=«tbHeader»Text="Информационныематериалы"Width=«160» />

dxg:GridControlGrid.Row=«2»Name=«grdInfoMaterials»xmlns:dxg=«schemas.devexpress.com/winfx/2008/xaml/grid»>

dxg:GridControl.Columns>

dxg:GridColumnFieldName=«Name»>Названиеdxg:GridColumn>

dxg:GridColumnFieldName=«Annotation»>Описаниеdxg:GridColumn>

dxg:GridColumnFieldName=«ViewCount»>Количествопросмотровdxg:GridColumn>

dxg:GridColumnFieldName=«Rating»>Рейтингdxg:GridColumn>

dxg:GridColumnFieldName=«PublishDate»>Датапубликацииdxg:GridColumn>

dxg:GridControl.Columns>

dxg:GridControl.View>

dxg:TableView

Name=«view»ShowGroupPanel=«False»ShowColumnHeaders=«False»NavigationStyle=«Row»DataRowTemplate="{DynamicResourceDetailCoreTemplate}"AutoWidth=«True»MouseDoubleClick=«view_MouseDoubleClick»>

dxg:TableView>

dxg:GridControl.View>

dxg:GridControl>

ButtonHorizontalAlignment=«Right»Margin=«0,2,8,0»Name=«btnAdd»Width=«22»Height=«22»Click=«btnAdd_Click»>



Image.Source>pack://application:,,,/Images/window_add.pngImage.Source>

Image>

Button>

ButtonHorizontalAlignment=«Right»Margin=«0,2,37,0»Name=«btnEdit»Width=«22»Click=«btnEdit_Click»>



Image.Source>pack://application:,,,/Images/window_edit.pngImage.Source>

Image>

Button>

ButtonHorizontalAlignment=«Right»Margin=«0,2,66,0»Name=«btnDelete»Width=«22»Click=«btnDelete_Click»>



Image.Source>pack://application:,,,/Images/window_delete.pngImage.Source>



Image>

Button>

ButtonHorizontalAlignment=«Right»Margin=«0,2,95,0»Name=«btnView»Width=«22»Click=«btnView_Click»>



Image.Source>pack://application:,,,/Images/window_view.pngImage.Source>

Image>

Button>

Grid>

Window>
    продолжение
--PAGE_BREAK--InfoMaterialsWindow.xaml.cs
usingSystem.Collections.Generic;

usingSystem.Windows.Forms;

usingSystem.Windows.Input;

usingASDC.Model.InfoMaterials;

usingInfoMaterial=ASDC.Model.InfoMaterials.InfoMaterial;

namespaceWpfRDB

{

///

///Interaction logic for InfoMaterialWindow.xaml

///

publicpartialclassInfoMaterialsWindow

{

// TODO: Написать Convertor для Image.Source, который будет переводить байты в BitmapSource и подвязать его на Binding

privateInfoMaterialsDataManager_dataManager;

privateCategory_category;


publicInfoMaterialsWindow()

{

InitializeComponent();

}


publicInfoMaterialsWindow(InfoMaterialsDataManagerdataManager, Categorycategory): this()

{

_dataManager = dataManager;

_category = category;

}


publicvoidInitGrid()

{

grdInfoMaterials.DataSource = _dataManager.InfoMaterialRepository.GetShortInfoMaterialsByCategory(_category.ID_Category);

grdInfoMaterials.RefreshData();

}


privatevoidWindow_Loaded(objectsender, System.Windows.RoutedEventArgse)

{

if(_dataManager == null)

_dataManager = newInfoMaterialsDataManager();

InitGrid();

}


privatevoidview_MouseDoubleClick(objectsender, MouseButtonEventArgse)

{



introwHandle = grdInfoMaterials.View.GetRowHandleByMouseEventArgs(e) ;

if(grdInfoMaterials.IsValidRowHandle(rowHandle))

{

ViewMaterial((InfoMaterial) grdInfoMaterials.GetRow(rowHandle));

}

}


privatevoidbtnAdd_Click(objectsender, System.Windows.RoutedEventArgse)

{

varnewInfoMaterial = newInfoMaterial{Category = _category};

varimAddEditWindow = newInfoMaterialAddEditWindow(newInfoMaterial);

imAddEditWindow.Title = «Добавление информационного материала»;

if(imAddEditWindow.ShowDialog() == true)

{

grdInfoMaterials.BeginDataUpdate();

((ListInfoMaterial>) grdInfoMaterials.DataSource).Add(newInfoMaterial);

grdInfoMaterials.EndDataUpdate();

_dataManager.InfoMaterialRepository.InsertInfoMaterial(newInfoMaterial);

Save();

}

}


privatevoidSave()

{

_dataManager.InfoMaterialRepository.SaveChanges();

}


privatevoidbtnEdit_Click(objectsender, System.Windows.RoutedEventArgse)

{

if(grdInfoMaterials.View.SelectedRows.Count > 0)

{

grdInfoMaterials.BeginDataUpdate();

varimAddEditWindow = newInfoMaterialAddEditWindow(((InfoMaterial)grdInfoMaterials.GetFocusedRow()));

imAddEditWindow.Title = «Редактирование информационного материала»;

imAddEditWindow.ShowDialog();

grdInfoMaterials.EndDataUpdate();

Save();

}

}


privatevoidbtnDelete_Click(objectsender, System.Windows.RoutedEventArgse)

{

if(grdInfoMaterials.View.SelectedRows.Count > 0)

{

if (MessageBox.Show(«Вы действительно хотите удалить выбранный материал?», «Сообщение»,

MessageBoxButtons.OKCancel) == System.Windows.Forms.DialogResult.OK)

{

grdInfoMaterials.BeginDataUpdate();


varinfoMaterial = (InfoMaterial) grdInfoMaterials.GetFocusedRow();



_dataManager.InfoMaterialRepository.DeleteInfoMaterial(infoMaterial);

((ListInfoMaterial>)(grdInfoMaterials.DataSource)).Remove(infoMaterial);


grdInfoMaterials.EndDataUpdate();

Save();

}

}

}


privatevoidbtnView_Click(objectsender, System.Windows.RoutedEventArgse)

{

if(grdInfoMaterials.View.SelectedRows.Count > 0)

{

ViewMaterial((InfoMaterial)grdInfoMaterials.GetFocusedRow());

}

}


privatevoidViewMaterial(InfoMaterialinfoMaterial)

{

varimWindow = newInfoMaterialWindow(infoMaterial);

imWindow.ShowDialog();

//_dataManager.InfoMaterialRepository.InsertComments(infoMaterial);

Save();

}

}

}
    продолжение
--PAGE_BREAK--InfoMaterialWindow.xaml
Windowx:Class=«WpfRDB.InfoMaterialWindow»

xmlns=«schemas.microsoft.com/winfx/2006/xaml/presentation»

xmlns:x=«schemas.microsoft.com/winfx/2006/xaml»

xmlns:dx=«clr-namespace:DevExpress.Wpf.Utils.Themes;assembly=DevExpress.Wpf.Core.v9.3»

xmlns:dxe=«schemas.devexpress.com/winfx/2008/xaml/editors»

xmlns:Core=«clr-namespace:DevExpress.Wpf.Core;assembly=DevExpress.Wpf.Core.v9.3»

Title="Информационныйматериал"Height=«888»Width=«764»Loaded=«Window_Loaded»Icon=«Images/yinyang.png»>

Window.Resources>

ResourceDictionary>

DataTemplatex:Key=«DetailCoreTemplate»>

Core:MeasurePixelSnapper>

Grid>

Grid.RowDefinitions>

RowDefinitionHeight=«4» />

RowDefinitionHeight=«Auto» />

RowDefinitionHeight=«4» />

Grid.RowDefinitions>

Grid.ColumnDefinitions>

ColumnDefinitionWidth=«4» />

ColumnDefinitionWidth=«64»/>

ColumnDefinitionWidth=«12»/>

ColumnDefinitionWidth=«200*»/>

Grid.ColumnDefinitions>

BorderGrid.Column=«1»Grid.Row=«1»BorderBrush=«Black»BorderThickness=«1»>



ImageSource="{BindingDataContext.BitmapSource}"Height=«64»Width=«64»Name=«imgInfoMat»Stretch=«Fill»HorizontalAlignment=«Left»VerticalAlignment=«Top»/>

Border>

GridGrid.Column=«3»Grid.Row=«1»>

Grid.RowDefinitions>

RowDefinitionHeight=«16»/>

RowDefinitionHeight=«2»/>

RowDefinition/>

Grid.RowDefinitions>


TextBlockGrid.Row=«0»Text="{BindingDataContext.AddingDate,StringFormat='hh:mmdd/MM/yyyy'}"FontSize=«10»Foreground=«DarkGray»HorizontalAlignment=«Left»Width=«159»/>

ButtonHorizontalAlignment=«Right»Name=«btnDelete»Width=«16»Height=«16»VerticalContentAlignment=«Center»Click=«btnDelete_Click»>

ImageToolTip="Удалитькомментарий">

Image.Source>pack://application:,,,/Images/cross.pngImage.Source>

Image>

Button>


TextBlockGrid.Row=«2»Text="{BindingDataContext.Text}"TextWrapping=«WrapWithOverflow» />

Grid>

Grid>

Core:MeasurePixelSnapper>

DataTemplate>

ResourceDictionary>

Window.Resources>

Griddx:ThemeManager.ThemeName=«Office2007Blue»x:Name=«grBase»>

Grid.ColumnDefinitions>

ColumnDefinitionWidth=«4» />

ColumnDefinition/>

ColumnDefinitionWidth=«4»/>

Grid.ColumnDefinitions>

Grid.RowDefinitions>

RowDefinitionHeight=«24» />

RowDefinitionHeight=«7» />

RowDefinitionHeight=«128» />

RowDefinitionHeight=«4» />

RowDefinitionHeight=«250*» />

RowDefinitionHeight=«4» />

RowDefinitionHeight=«16» />

RowDefinitionHeight=«4» />

RowDefinitionHeight=«171*» />

RowDefinitionHeight=«4» />

RowDefinitionHeight=«140» />

RowDefinitionHeight=«4» />

RowDefinitionHeight=«28» />

RowDefinitionHeight=«4» />

Grid.RowDefinitions>

TextBlockGrid.Column=«1»Margin=«0,0,8,2»Name=«txtHeader»VerticalAlignment=«Bottom»Text="{BindingName}"FontSize=«14»FontWeight=«Bold»TextDecorations=«None» />

BorderGrid.Column=«1»Grid.Row=«1»VerticalAlignment=«Top»Height=«1»BorderThickness=«1»BorderBrush=«Black»>Border>

GridGrid.Row=«2»Grid.Column=«1»>

Grid.ColumnDefinitions>

ColumnDefinitionWidth=«128»/>

ColumnDefinitionWidth=«4»/>

ColumnDefinitionWidth=«200*»/>



Grid.ColumnDefinitions>

BorderGrid.Column=«0»BorderThickness=«1»BorderBrush=«Black»>

ImageWidth=«128»HorizontalAlignment=«Left»Name=«imgPicture»Stretch=«Fill»Source="{BindingBitmapSource}" />

Border>

TextBlockGrid.Column=«2»Name=«txtAnnotation»TextWrapping=«Wrap»Text="{BindingAnnotation}" />

Grid>

dxe:TextEditGrid.Row=«4»Grid.Column=«1»Name=«txtText»TextWrapping=«WrapWithOverflow»VerticalContentAlignment=«Top»Text="{BindingText}" />


TextBlockGrid.Row=«6»Grid.Column=«1»Text="Комментарии:" />


dxg:GridControlGrid.Row=«8»Grid.Column=«1»Name=«grdComments»xmlns:dxg=«schemas.devexpress.com/winfx/2008/xaml/grid»>

dxg:GridControl.Columns>

dxg:GridColumnFieldName=«Text» />

dxg:GridColumnFieldName=«AddingDate» />

dxg:GridControl.Columns>

dxg:GridControl.View>

dxg:TableView

Name=«view»ShowGroupPanel=«False»ShowColumnHeaders=«False»NavigationStyle=«Row»DataRowTemplate="{DynamicResourceDetailCoreTemplate}"AutoWidth=«True»>

dxg:TableView>

dxg:GridControl.View>

dxg:GridControl>


GridGrid.Row=«10»Grid.Column=«1»x:Name=«grAddComment»>

Grid.ColumnDefinitions>

ColumnDefinitionWidth=«4»/>

ColumnDefinitionWidth=«200*»/>

ColumnDefinitionWidth=«4»/>

Grid.ColumnDefinitions>

Grid.RowDefinitions>

RowDefinitionHeight=«18» />

RowDefinitionHeight=«4» />

RowDefinitionHeight=«24» />

RowDefinitionHeight=«4» />

RowDefinitionHeight=«40*» />

Grid.RowDefinitions>

TextBlockGrid.Row=«0»Grid.Column=«1»Text="Добавитьновыйкомментарий"FontSize=«11»FontWeight=«Bold» />

TextBlockGrid.Row=«2»Grid.Column=«1»Text="Текст:"HorizontalAlignment=«Left»VerticalAlignment=«Center»Width=«89» />

ButtonGrid.Row=«2»Grid.Column=«1»Name=«btnAddComment»HorizontalAlignment=«Right»Width=«71»Click=«btnAddComment_Click»ToolTip="Добавитьнаписанныйкомментарий">ДобавитьButton>

dxe:TextEditGrid.Row=«4»Grid.Column=«1»Name=«txtComment»TextWrapping=«WrapWithOverflow»VerticalContentAlignment=«Top» />

Grid>

ButtonGrid.Row=«12»Grid.Column=«1»HorizontalAlignment=«Right»Name=«btnOK»Width=«71»Margin=«0,2»Grid.RowSpan=«2»Click=«btnOK_Click»>OKButton>

Grid>

Window>
    продолжение
--PAGE_BREAK--InfoMaterialWindow.xaml.cs
usingSystem;



usingSystem.Collections.Generic;

usingSystem.Windows;

usingASDC.Model.InfoMaterials;

namespaceWpfRDB

{

///

///Interaction logic for InfoMaterial.xaml

///

publicpartialclassInfoMaterialWindow

{

privateInfoMaterial_infoMaterial;


publicInfoMaterialWindow()

{

InitializeComponent();

}


publicInfoMaterialWindow(InfoMaterialinfoMaterial): this()

{

_infoMaterial = infoMaterial;

}


privatevoidInitDataSources()

{

grBase.DataContext = _infoMaterial;

grdComments.DataSource = _infoMaterial.Comments;

grdComments.RefreshData();

}


privatevoidWindow_Loaded(objectsender, RoutedEventArgse)

{

InitDataSources();

}


privatevoidbtnAddComment_Click(objectsender, RoutedEventArgse)

{

varcomment = newComment{Text = txtComment.Text, AddingDate = DateTime.Now};

((ICollectionComment>) grdComments.DataSource).Add(comment);

_infoMaterial.Comments.Add(comment);

}


privatevoidbtnOK_Click(objectsender, RoutedEventArgse)

{

Close();

}


privatevoidbtnDelete_Click(objectsender, RoutedEventArgse)

{

grdComments.BeginDataUpdate();

varcomment = (Comment) grdComments.GetFocusedRow();

((ICollectionComment>) grdComments.DataSource).Remove(comment);

grdComments.EndDataUpdate();

}

}

}
Convertor.cs
usingSystem.Drawing;

usingSystem.IO;



usingSystem.Windows.Media.Imaging;

namespaceASDC.Model.Classes

{

publicstaticclassConvertor

{

publicstaticbyte[] ImageToByte(Imageimg)

{

varconverter = newImageConverter();

returnimg != null? (byte[])converter.ConvertTo(img, typeof(byte[])): null;

}


publicstaticImageByteToImage(byte[] bytes)

{

varconverter = newImageConverter();

returnbytes != null? (Image)converter.ConvertFrom(bytes): null;

}


publicstaticBitmapImageByteToBitmapSource(byte[] bytes)

{

varimg = ByteToImage(bytes);

returnImageToBitmapSource(img);

}


publicstaticBitmapImageImageToBitmapSource(Imageimg)

{

if(img == null)

returnnull;


varbi = newBitmapImage();

varms = newMemoryStream();


bi.BeginInit();

img.Save(ms, System.Drawing.Imaging.ImageFormat.Png);

ms.Seek(0, SeekOrigin.Begin);

bi.StreamSource = ms;

bi.EndInit();


returnbi;

}


publicstaticImageBitmapSourceToImage(BitmapImagebs)

{

if((bs == null) || (bs.StreamSource == null))

returnnull;


returnnewBitmap(bs.StreamSource);

}


publicstaticbyte[] BitmapSourceToBytes(BitmapImagebs)

{

varbitmap = (Bitmap)BitmapSourceToImage(bs);

returnImageToByte(bitmap);

}

}

}
    продолжение
--PAGE_BREAK--Filter.cs
usingSystem;

namespaceASDC.Model.Classes

{

publicenumSortDirectionType

{

Top = 0,

Low = 1

}
publicclassFilter

{

privatestring_name;

privatebool_byRating;

privatebool_byViewCount;

privateint_numberOfRows;

privateDateTime_dateFrom;

privateDateTime_dateTo;

privateSortDirectionType_sortDirection;


publicstringName

{

get{ return_name; }

set{ _name = value; }

}


publicboolByRating

{

get{ return_byRating; }

set{ _byRating = value; }

}


publicboolByViewCount

{

get{ return_byViewCount; }

set{ _byViewCount = value; }

}


publicintNumberOfRows

{

get{ return_numberOfRows; }

set{ _numberOfRows = value; }

}


publicDateTimeDateFrom

{

get{ return_dateFrom; }

set{ _dateFrom = value; }

}


publicDateTimeDateTo

{

get{ return_dateTo; }

set{ _dateTo = value; }

}


publicSortDirectionTypeSortDirection

{

get{ return_sortDirection; }

set{ _sortDirection = value; }

}

}

}
Category.cs
usingSystem.Collections.Generic;

usingSystem.Drawing;

usingSystem.Windows.Media.Imaging;

usingASDC.Model.Classes;

namespaceASDC.Model.InfoMaterials

{

publicpartialclassCategory

{

publicCategoryParent { get; set; }


publicListCategory> Children { get; set; }


publicImageBitmap { get; set; }


privateBitmapImage_bitmapSource;

publicBitmapImageBitmapSource

{

get{ return_bitmapSource; }

set

{

_bitmapSource = value;

Image = Convertor.BitmapSourceToBytes(_bitmapSource);

}

}

}

}
CategoryRepository.cs
usingSystem.Collections.Generic;

usingSystem.Linq;

usingASDC.Model.Classes;

namespaceASDC.Model.InfoMaterials

{

publicclassCategoryRepository

{

privateASDCEntities_entities;


///

///Конструкторкласса

///

///
Ссылканаобъект-хранилище(коннекшен, connection), включающеевсесущности(entities) промапленной(mapping) БД.


publicCategoryRepository(ASDCEntitiesentities)

{

_entities = entities;

}


///

/// Функция выбирает категорию по заданному идентификатору (id)

///

///
Идентификатор категории, которую нужно выбрать


///

publicCategoryGetCategory(longcategoryId)

{

Categorycategory = _entities.Categories.First(c => c.ID_Category == categoryId);



category.BitmapSource = Convertor.ByteToBitmapSource(category.Image);

return category;

}


///

/// Функция выбирает два уровня категорий

///

///

publicListCategory> GetCategories()

{

varcategories = GetSubCategories(0);


foreach(varcategory incategories)

{

category.Children = GetSubCategories(category.ID_Category);

}


return categories.ToList();

}


///

/// Функция рекурсивно выбирает все категории

///

///
Категория, подкатегории которой нужно выбрать


///

publicListCategory> GetCategories(longcategoryId)

{

varcategories = GetSubCategories(categoryId);

if(categories != null)

{

foreach(varcategory incategories)

{

category.Children = GetCategories(category.ID_Category);

}

}

return categories;

}


///

/// Функция выбирает подкатегории заданной категории

///

///
Категория, подкатегории которой нужно выбрать


///

publicListCategory> GetSubCategories(longcategoryId)

{

varcategories = (fromc in_entities.Categories

wherecategoryId == 0? (c.ParentCategory == categoryId || c.ParentCategory == null): (c.ParentCategory == categoryId)

selectc).ToList();


foreach(varcategory incategories)

{

category.BitmapSource = Convertor.ByteToBitmapSource(category.Image);

}

return categories;

}


///

/// Функция добавления новой категории

///



///
Новая категория в виде класса категории


///

publicCategoryInsertCategory(Categorycategory)

{

_entities.AddToCategories(category);

returncategory;

}


publicvoidDeleteCategory(Categorycategory)

{

_entities.DeleteObject(category);

}


publicvoidSaveChanges()

{

_entities.SaveChanges();

}

}

}
InfoMaterial.cs
usingSystem.Windows.Media.Imaging;

usingASDC.Model.Classes;

namespaceASDC.Model.InfoMaterials

{

publicpartialclassInfoMaterial

{

privateBitmapImage_bitmapSource;

publicBitmapImageBitmapSource

{

get{ return_bitmapSource; }

set

{

_bitmapSource = value;

Image.Image = Convertor.BitmapSourceToBytes(_bitmapSource);

}

}

}

}
InfoMaterialRepository.cs
usingSystem.Collections.Generic;

usingSystem.Linq;

usingASDC.Model.Classes;

namespaceASDC.Model.InfoMaterials

{

publicclassInfoMaterialRepository

{

privateASDCEntities_entities;


publicInfoMaterialRepository(ASDCEntitiesentities)

{

_entities = entities;

}


publicListInfoMaterial> GetInfoMaterialsByFilter(Filterfilter)

{



varinfoMaterials = fromim in_entities.InfoMaterials.Include(«Image»)

where(im.PublishDate >= filter.DateFrom && im.PublishDate

selectim;

if(filter.NumberOfRows

filter.NumberOfRows = int.MaxValue;


if(!string.IsNullOrEmpty(filter.Name))

infoMaterials = infoMaterials.Where(im => im.Name.Contains(filter.Name)).Take(filter.NumberOfRows);


if(filter.ByRating)

{

if(filter.SortDirection == SortDirectionType.Top)

infoMaterials = infoMaterials.OrderByDescending(im => im.Rating).Take(filter.NumberOfRows);

else

infoMaterials = infoMaterials.OrderBy(im => im.Rating).Take(filter.NumberOfRows);

}
if(filter.ByViewCount)

if(filter.SortDirection == SortDirectionType.Top)

infoMaterials = infoMaterials.OrderByDescending(im => im.ViewCount).Take(filter.NumberOfRows);

else

infoMaterials = infoMaterials.OrderBy(im => im.ViewCount).Take(filter.NumberOfRows);

returnConvertInfoMaterialImageToBitmapSource(infoMaterials.ToList());

}


publicListInfoMaterial> GetShortInfoMaterialsByCategory(longcategoryId)

{

varinfoMaterials = (fromim in_entities.InfoMaterials.Include(«Image»).Include(«Comments»)

whereim.Category.ID_Category == categoryId

selectim).ToList();

returnConvertInfoMaterialImageToBitmapSource(infoMaterials);

}


privateListInfoMaterial> ConvertInfoMaterialImageToBitmapSource(ListInfoMaterial> infoMaterials)

{

foreach(varinfoMaterial ininfoMaterials)

{

if(infoMaterial.Image != null)

infoMaterial.BitmapSource = Convertor.ByteToBitmapSource(infoMaterial.Image.Image);

}

returninfoMaterials;

}


publicInfoMaterialGetInfoMaterial(longmaterialId)

{

varinfoMaterial = (fromim in_entities.InfoMaterials.Include(«Image»).Include(«Comments»)

whereim.ID_InfoMaterial == materialId

selectim).First();

if(infoMaterial.Image != null)



infoMaterial.BitmapSource = Convertor.ByteToBitmapSource(infoMaterial.Image.Image);

returninfoMaterial;

}
publicInfoMaterialInsertInfoMaterial(InfoMaterialmaterial)

{

_entities.AddToInfoMaterials(material);

if(material.Image != null)

_entities.AddToInfoMat_Image(material.Image);

returnmaterial;

}


publicInfoMaterialInsertComments(InfoMaterialmaterial)

{

foreach(varcomment inmaterial.Comments.ToList())

{

_entities.AddToComments(comment);

}
returnmaterial;

}


publicvoidDeleteInfoMaterial(InfoMaterialmaterial)

{

_entities.DeleteObject(material);

}


publicvoidSaveChanges()

{

_entities.SaveChanges();

}

}
InfoMaterialsDataManager.cs
namespaceASDC.Model.InfoMaterials

{

publicclassInfoMaterialsDataManager

{

privateASDCEntities_entities;

privateCategoryRepository_categoryRepository;

privateInfoMaterialRepository_infoMaterialRepository;


publicInfoMaterialsDataManager()

{

_entities = newASDCEntities();

}


publicCategoryRepositoryCategoryRepository

{

get

{

if(_categoryRepository == null)

_categoryRepository = newCategoryRepository(_entities);


return_categoryRepository;

}

}


publicInfoMaterialRepositoryInfoMaterialRepository

{

get



{

if(_infoMaterialRepository == null)

_infoMaterialRepository = newInfoMaterialRepository(_entities);


return_infoMaterialRepository;

}

}

}

}


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

Поделись с друзьями, за репост + 100 мильонов к студенческой карме :

Пишем реферат самостоятельно:
! Как писать рефераты
Практические рекомендации по написанию студенческих рефератов.
! План реферата Краткий список разделов, отражающий структура и порядок работы над будующим рефератом.
! Введение реферата Вводная часть работы, в которой отражается цель и обозначается список задач.
! Заключение реферата В заключении подводятся итоги, описывается была ли достигнута поставленная цель, каковы результаты.
! Оформление рефератов Методические рекомендации по грамотному оформлению работы по ГОСТ.

Читайте также:
Виды рефератов Какими бывают рефераты по своему назначению и структуре.

Сейчас смотрят :

Реферат Содержание торгово-технологического процесса в розничной торговле
Реферат Современное развитие химической и нефтехимической отрасли
Реферат Сочетание потребностей и ресурсов как основа экономики
Реферат Система экономических показателей
Реферат Содержание предпринимательской деятельности
Реферат Анн Анселин Шутценбергер мои исследования геносоциограмм и синдрома годовщины
Реферат Система потребительской кооперации. Концепция социалистических общин Р. Оуэна
Реферат Совершенствование форм и методов поддержки малого и среднего бизнеса
Реферат 2 Сведения об обучающихся
Реферат Система нормативного регулирования аудиторской деятельности
Реферат Система управления регионом (на примере Ростовской области)
Реферат Системный анализ предприятия ОАО АВТОВАЗ
Реферат Системный подход к анализу рынка сотовой связи в Иркутской области
Реферат Соціально-орієнтована ринкова економіка як оптимальна модель ринку
Реферат Социально экономические и организационные формы предприятий и их особенности