Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > WPF и Silverlight > Использование БД в WPF приложении


Автор: Anyone 17.11.2009, 16:09
В моем WPF приложении необходимо использовать базу данных. Поскольку в ней будет хранится не много данных, то использовать для этих целей отдельную БД не имеет смысла.
Подскажите как в таком случае лучше хранить данные? Я планирую работать с данными через датасет, который потом сериализовать в XML, но может это не оптимальный вариант.
Второй вопрос. Как лучше в WPF отобразить данные БД? Насколько я понял, проще всего в ItemsControl'е (или производных от него), написать шаблоны данных и селектор шаблонов (стилей)?

Автор: Partizan 17.11.2009, 18:52
DataGrid - не вариант?

Автор: DenWPF 17.11.2009, 20:34
я так и не понял откуда ты БД берешь, если ХМЛ то проще template.

Автор: Anyone 18.11.2009, 20:31
Цитата(Partizan @  17.11.2009,  18:52 Найти цитируемый пост)
DataGrid - не вариант?

Может и вариант.
Имеется в виду http://dev.net.ua/blogs/servicedeveloper/archive/2008/10/26/6829.aspx?
Не очень хочется качать либы, а в списках стандартных классов не нахожу. Нужно попробывать.


Цитата(DenWPF @  17.11.2009,  20:34 Найти цитируемый пост)
я так и не понял откуда ты БД берешь, если ХМЛ то проще template.

Вот именно по поводу этого мне и нужен совет. Не хочу использовать отдельные приложения, планирую либо в xml, либо программно создавать датасет и сериализировать его. Как лучше всего поступить, если достаточно нескольких таблиц (а может даже и одной) и ко-во записей врядли будет больше чем пару десятков? 

Автор: Partizan 18.11.2009, 20:54
Anyone, в 10-й студии он уже есть искаропки...

Код

Как лучше всего поступить, если достаточно нескольких таблиц (а может даже и одной) и ко-во записей врядли будет больше чем пару десятков? 


Конечно лучше XML...тем более можно набросать XSD схему и сгенерить классы для маппинга

Автор: Anyone 18.11.2009, 21:18
Цитата(Partizan @  18.11.2009,  20:54 Найти цитируемый пост)
Anyone, в 10-й студии он уже есть искаропки...

Пока ставить 10ку не буду, попробую заюзать либу.


Цитата(Partizan @  18.11.2009,  20:54 Найти цитируемый пост)
Конечно лучше XML...тем более можно набросать XSD схему и сгенерить классы для маппинга

Второе предложение мне не понятно, буду разбираться, спасибо за совет.

Автор: Anyone 18.11.2009, 22:20
Цитата(Partizan @  18.11.2009,  20:54 Найти цитируемый пост)
ем более можно набросать XSD схему и сгенерить классы для маппинга

А чем ее бросать, или руцями придется, а то ничего внятного не нахожу по этому поводу?

Автор: Partizan 19.11.2009, 01:51
http://msdn.microsoft.com/en-us/library/ms171945(VS.80).aspx

Автор: Anyone 19.11.2009, 10:20
MSDN гласит:
Цитата

If not already open, double-click the XMLSchema1.xsd file to bring up the XML Designer.

Click the XML Schema tab of the Toolbox and drag a simpleType onto the design surface.

Но мой тулбокс пустой, что я делаю не так?
А вообще, я так понял, проще всего будет сгенерировать схему используя xml файл.

Цитата(Partizan @  18.11.2009,  20:54 Найти цитируемый пост)
и сгенерить классы для маппинга

А по поводу этого можно подробней, мне ничего не понятно из того что я нашел, что мне вообще дает эта схема, если xml-файл я формирую программно (имею в виду, что я уверен в том что структура правильная)?

Автор: Partizan 19.11.2009, 14:28
по XML схеме утилиткой xsd.exe можно сгенерить cs файлы с классами, соответствующими схеме, которые обычно можно сериализовать/десериалозовать XmlSerializer-ом.

Автор: Anyone 19.11.2009, 15:54
Я правильно понял, что этот класс служит именно для того чтоб можно было выполнять сериализацию\десериализацию xml-документа? Но, к примеру, выборку гораздо проще выполнить с помощью LINQ to XML, чем с помощью методов класса, не совсем понимаю что мне он дает.

Автор: Partizan 19.11.2009, 16:25
Ну собственно говоря, тут выбирать Вам - что удобнее под задачу, то и нужно использовать...

Цитата

Подскажите как в таком случае лучше хранить данные?


При указанных количествах данных XML вполне себе подойдёт...а как с ним работать - выбирайте наиболее удобный вариант...я лишь предложил один из них.

Автор: Anyone 19.11.2009, 17:09
Цитата(Partizan @  19.11.2009,  16:25 Найти цитируемый пост)
При указанных количествах данных XML вполне себе подойдёт...а как с ним работать - выбирайте наиболее удобный вариант...я лишь предложил один из них.

Ясно, спасибо, этот вариант с классом мне не очень нравится, но буду иметь в виду что такое существует.

Автор: Anyone 20.11.2009, 22:02
Я сделал так:
1. Создал класс Variable со свойствами - колонками таблицы
2. Создал класс VariablesCollection: System.Collections.ObjectModel.ObservableCollection<Variable>,  который служит источником для таблицы (DataGrid)
3. Сериализация коллекции:
Код

        private static XElement SerializeVariables(UgeDrawingCanvas canvas)
        {
            var str = System.Windows.Markup.XamlWriter.Save(canvas.Variables);
            var xElelment = new XElement("Variables");
            xElelment.Add(XElement.Parse(str));
            return xElelment;
        }

4. Десериализация коллекции:
Код

        private static void DeserializeVariables(XElement xElement, ref UgeDrawingCanvas canvas)
        {
            if (xElement != null && xElement.FirstNode!=null)
            {
                var str = xElement.FirstNode.ToString();
                canvas.Variables = XamlReader.Parse(str) as VariablesCollection;
            }
        }


Все отлично работает при использовании небольшого ко-ва элементов коллекции (не более 1000), но мне очень не нравятся мои функции сериализации\десериализации, можно их переписать так, чтобы увеличилось быстродействие?

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)