Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > .NET Frameworks (точка нет фреймворки) > C# (си шарп)
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 15.11.2012, 17:33   #1
fedakdenis
Пользователь
 
Регистрация: 10.06.2010
Сообщений: 11
По умолчанию Конвертирование данных при добавлении DataTable

Всем привет!

Вопрос у меня следующий.
Я реализовал добавление в DataTable из XML...
Код:
//беру xml
            XPathDocument xPathDocument = new XPathDocument(xmlPath);
            XslTransform xslDoc = new XslTransform();
            xslDoc.Load(xslPath);
            StringWriter stringWriter = new StringWriter();
//трансформирую
            xslDoc.Transform(xPathDocument, null, stringWriter);
//так чтобы она влезла в таблицу detailTable
            DataTable detailTable = new DataTable("Detail");
            detailTable.Columns.Add("PhoneNum", typeof(string));
            detailTable.Columns.Add("Direction", typeof(string));
            detailTable.Columns.Add("CallType", typeof(string));
            detailTable.Columns.Add("Cost", typeof(string));

            DataSet detailDataSet = new DataSet();
            detailDataSet.Tables.Add(detailTable);

            StringReader stringReader = new StringReader(stringWriter.ToString());
//засовываю полученный XML код в detailTable 
            detailDataSet.ReadXml(stringReader, XmlReadMode.IgnoreSchema);
Все ок, работает.

Но мне хочется чтобы данные в колонках приводились к нужному мне типу
Например Direction в xml-ке задается строкой "<--+" либо "+-->" либо "" а хочу чтобы колонка была моего типа, например
Код:
    public enum DirectionTypeEnum
    {
        [DescriptionAttribute("Входящие")]
        Input,
        [DescriptionAttribute("Исходящие")]
        Output,
        [DescriptionAttribute("")]
        NONE
    }
Код:
//а создание datatable будет выглядеть уже вот так вот
            DataTable detailTable = new DataTable("Detail");
            detailTable.Columns.Add("PhoneNum", typeof(string));
            detailTable.Columns.Add("Direction", typeof(DirectionTypeEnum)); //так ведь наверно круче)))
            detailTable.Columns.Add("CallType", typeof(string));
            detailTable.Columns.Add("Cost", typeof(string));

            DataSet detailDataSet = new DataSet();
            detailDataSet.Tables.Add(detailTable);
Только где реализовывать конвертацию String в DirectionTypeEnum непонятно
fedakdenis вне форума Ответить с цитированием
Старый 16.11.2012, 12:21   #2
dampirik
Форумчанин
 
Регистрация: 02.07.2009
Сообщений: 722
По умолчанию

для стринга Enum.Parse ведь есть.

по мне лучше так:

Код:
[Flags]
public enum DirectionTypeEnum
    {
        [DescriptionAttribute("Входящие")]
        Input=1,
        [DescriptionAttribute("Исходящие")]
        Outpu=2,
        [DescriptionAttribute("")]
        NONE=4
    }
А дальше,
Код:
(int)DirectionTypeEnum.NONE == 4 , (DirectionTypeEnum)4 == DirectionTypeEnum.NONE
dampirik вне форума Ответить с цитированием
Старый 20.11.2012, 08:21   #3
fedakdenis
Пользователь
 
Регистрация: 10.06.2010
Сообщений: 11
По умолчанию

Замечательно, а код конвертации
Код:
(int)DirectionTypeEnum.NONE == 4 , (DirectionTypeEnum)4 == DirectionTypeEnum.NONE
куда вставлять надо. что бы
Код:
            detailDataSet.ReadXml(stringReader, XmlReadMode.IgnoreSchema);
сразу формировал таблицу с полем типа DirectionTypeEnum чтобы мне фореч по строкам дататейбла не надо было запускать. Вот в чем вопрос.
fedakdenis вне форума Ответить с цитированием
Старый 20.11.2012, 11:26   #4
masax
Форумчанин
 
Регистрация: 01.10.2008
Сообщений: 248
По умолчанию

я бы расширил класс String на приведение к типу DirectionTypeEnum
хотя наверное это извращение)
Контакты
skype, почта: bm@kwax.ru
masax вне форума Ответить с цитированием
Старый 20.11.2012, 15:01   #5
fedakdenis
Пользователь
 
Регистрация: 10.06.2010
Сообщений: 11
По умолчанию

Да нееее(((. Я не вызываю код конвертации String->DirectionTypeEnum.

Код конвертации может быть хоть
Код:
private static DirectionTypeEnum KonvertimStringVDirectionTypeEnum(String stringi)
{
      swich(stringi)
      {
             case "<--":
                    return DirectionTypeEnum.Input;
                    breack;
             case "-->":
                    return DirectionTypeEnum.Outhut;
                    breack;
             case "":
                    return DirectionTypeEnum.EsheKakayzNibudHren;
                    breack;
      }
}
Как конвертируем - неважно.
Вопрос - где вызывается код конвертации и как сделать так чтобы вызывался мой код конвертации.

Вот например если я создам колонку
Код:
detailTable.Columns.Add("Cost", typeof(Double));
то данные из тега
Код HTML:
<Cost>2234.234</Cost>
запихнутся в столбец Cost, а если например данные в XML-ке будут такие
Код HTML:
<Cost>blablabla</Cost>
то
Код:
detailDataSet.ReadXml(stringReader, XmlReadMode.IgnoreSchema);
выкинет мне эксепшн тип строка не соответствует формату дабл. Вот где вызывается String -> Double? Там же и String->DirectionTypeEnum вызывается. Но по умолчанию DataTable не знает как String->DirectionTypeEnum - надо научить. Вопрос как и где учить?
fedakdenis вне форума Ответить с цитированием
Старый 21.11.2012, 00:29   #6
masax
Форумчанин
 
Регистрация: 01.10.2008
Сообщений: 248
По умолчанию

тут неявное приведение типов, я его имел ввиду
научить примерно так:

public static implicit operator DirectionTypeEnum (String s)
{
...
}
Контакты
skype, почта: bm@kwax.ru

Последний раз редактировалось masax; 21.11.2012 в 00:29. Причина: опечатка
masax вне форума Ответить с цитированием
Старый 21.11.2012, 06:42   #7
fedakdenis
Пользователь
 
Регистрация: 10.06.2010
Сообщений: 11
По умолчанию

masax, здоровья тебе и всех благ, спасибо.
fedakdenis вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Ошибка при добавлении данных в бд prizrak1390 PHP 3 29.07.2010 22:47
IE тормозит при добавлении данных на страницу Antonxaaa JavaScript, Ajax 4 27.07.2010 10:40
Ошибка при добавлении данных Ehha1234 БД в Delphi 0 19.06.2010 20:33
Замена кода на текст при добавлении данных L777SU БД в Delphi 1 25.05.2010 16:00
MSSQL Server>Delphi. Ошибка при добавлении данных POPOV БД в Delphi 1 20.04.2010 21:42