Модераторы: gambit, Partizan
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> DataTable сериализация 
:(
    Опции темы
gambit
Дата 19.10.2010, 10:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***
Награды: 1



Профиль
Группа: Комодератор
Сообщений: 1359
Регистрация: 25.6.2006
Где: я?

Репутация: нет
Всего: 40



Добрый день. Есть задача, сериализовать DataTable. У него есть метод WriteXml, но:
1. Как записать только отфильтрованные записи? Он пишет все, независимо он наличия фильтра.

Фильтрую:
Код

string f = StringResources.LocalTableColumSurname + " LIKE '*" + value + "*'";
Marks.DefaultView.RowFilter = f;

Где 
StringResources.LocalTableColumSurname -имя столбца
Marks - нужный нам DataTable

2. При открытии файла, я должен заранее в таблице создать все столбцы которые есть в xml, иначе падаем по эксепшену NullReferenceException
как зписать файл, что бы потом его открыть? так как столбцы читаются из базы, могут отличаться от того что было в прошлый раз при записи. В таком случае само действие сериализации безумно, ибо мы сохранили файл,  произошли изменения в базе, файл не открывается.
PM MAIL ICQ Skype   Вверх
mrbrooks
Дата 19.10.2010, 16:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


трололомен
****


Профиль
Группа: Завсегдатай
Сообщений: 4259
Регистрация: 4.10.2006
Где: Дол Гулдур

Репутация: 2
Всего: 306



Цитата(gambit @  19.10.2010,  11:06 Найти цитируемый пост)
Как записать только отфильтрованные записи? Он пишет все, независимо он наличия фильтра.

он фильтрует не DataTable, а DataView. У них на самом деле "мостик" достаточно зыбкий. Тут можно выйти из ситуации к примеру так:

Код

var dw = Marks.DefaultView;
dw.RowFilter = f;
Marks = dw.ToTable();


Цитата(gambit @  19.10.2010,  11:06 Найти цитируемый пост)
2. При открытии файла, я должен заранее в таблице создать все столбцы которые есть в xml, иначе падаем по эксепшену NullReferenceException
как зписать файл, что бы потом его открыть? так как столбцы читаются из базы, могут отличаться от того что было в прошлый раз при записи. В таком случае само действие сериализации безумно, ибо мы сохранили файл,  произошли изменения в базе, файл не открывается. 


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

Marks.WriteFile("gambit.xml", XmlWriteMode.WriteSchema);

Тогда проблем со чтением из файла не будет. Необходимо помнить (на всякий пожарный), что для успешной сериализации DataTable должна иметь имя (DataTable.TableName != "")
PM MAIL   Вверх
gambit
Дата 19.10.2010, 16:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***
Награды: 1



Профиль
Группа: Комодератор
Сообщений: 1359
Регистрация: 25.6.2006
Где: я?

Репутация: нет
Всего: 40



mrbrooks, по обоим пунктам точно в цель. Спасибо. +1
PM MAIL ICQ Skype   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
mr.DUDA
THandle

Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов.
Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :)
Так же не забывайте отмечать свой вопрос решенным, если он таковым является :)


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, THandle.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Разработка Windows Forms | Следующая тема »


 




[ Время генерации скрипта: 0.0541 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.