Считывание данных из семейства

Автор Тема: Считывание данных из семейства  (Прочитано 3030 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Тема содержит сообщение с Решением. Нажмите здесь чтобы посмотреть его.

Оффлайн BazingaАвтор темы

  • ADN Club
  • ***
  • Сообщений: 101
  • Карма: 4
При считывании значений параметров семейства не забираются строковые данные.
Мой метод в лоб:
Код - C# [Выбрать]
  1.  foreach (FamilyType _type in fmg.Types)
  2.             {
  3.  
  4.                 if (_type.Name != " ")
  5.                 {
  6.                     listView1.Items.Add("\n"+_type.Name);
  7.                     //get type's parameters
  8.                     foreach (FamilyParameter fam in fmg.Parameters)
  9.                     {
  10.                         //_type.AsValueString(fam);
  11.                         listView1.Items.Add(fam.Definition.Name + "= " + _type.AsValueString(fam));// read parameters
  12.                        
  13.                     }
  14.                 }}
И что странно, но реализация Джеремми также не считывает строковые данные
Код - C# [Выбрать]
  1.  Dictionary<string, FamilyParameter> dicParam = new Dictionary<string, FamilyParameter>(fmg.Parameters.Size);
  2.             foreach (FamilyParameter fp in fmg.Parameters)
  3.             {
  4.                 string defs = fp.Definition.Name;
  5.                 dicParam.Add(defs, fp);
  6.             }
  7.             List<string> keys = new List<string>(dicParam.Keys);
  8.             keys.Sort();
  9.  
  10.             string ty = " ";
  11.             string ppr = "";
  12.  
  13.             foreach (FamilyType _type in fmg.Types)
  14.             {
  15.                 ppr = "";
  16.                 ty = "";
  17.                 if (_type.Name != " ")
  18.                 {
  19.                     ty = _type.Name + "\n";
  20.                     foreach (string _key in keys)
  21.                     {
  22.                         FamilyParameter fp = dicParam[_key];
  23.                         if (_type.HasValue(fp))
  24.                         {
  25.                             ppr += _key + "= " + FamParameterValue(_type, fp, doc) + "\n";
  26.                         }
  27.                     }
  28.                     ppr += "\n";
  29.                     wf.MessageBox.Show(ty + ppr);
  30.                 }
  31.             }
Код - C# [Выбрать]
  1.         static string FamParameterValue(FamilyType _type, FamilyParameter fp, Document doc)
  2.         {
  3.             string value = _type.AsValueString(fp);
  4.             return value;
  5.         }
В чем может быть проблема?

Оффлайн Александр Пекшев aka Modis

  • ADN Club
  • *****
  • Сообщений: 1658
  • Карма: 366
  • Отец modplus.org
    • ModPlus
Re: Считывание данных из семейства
« Ответ #1 : 26-12-2017, 13:04:12 »
Ну во-первых - не делайте так:
Код - C# [Выбрать]
  1. if (_type.Name != " ")
а делайте так:
Код - C# [Выбрать]
  1. if(!string.IsNullOrEmpty(_type.Name))
Во-вторых - проверяйте какой тип данных у параметра. Это свойство StorageType. Потому-что, если у вас StorageType, допустим Integer и значение равно нулю, то метод AsValueString() ничего не вернет. Так что проверяйте тип данных и в зависимости от него используйте нужный метод

Оффлайн BazingaАвтор темы

  • ADN Club
  • ***
  • Сообщений: 101
  • Карма: 4
Re: Считывание данных из семейства
« Ответ #2 : 26-12-2017, 13:10:02 »
Александр Пекшев aka Modis, так в том то и дело, если StorageType (Double/Integer) все считывает, а string нет.
Строку пустой видит и все

Отмечено как Решение Bazinga 27-12-2017, 08:53:40

Оффлайн Александр Пекшев aka Modis

  • ADN Club
  • *****
  • Сообщений: 1658
  • Карма: 366
  • Отец modplus.org
    • ModPlus
Re: Считывание данных из семейства
« Ответ #3 : 26-12-2017, 13:11:53 »
Александр Пекшев aka Modis, так в том то и дело, если StorageType (Double/Integer) все считывает, а string нет.
Строку пустой видит и все
Если StorageType == String, тогда используйте метод AsString() вместо AsValueString()

Оффлайн BazingaАвтор темы

  • ADN Club
  • ***
  • Сообщений: 101
  • Карма: 4
Re: Считывание данных из семейства
« Ответ #4 : 27-12-2017, 08:50:50 »
Александр Пекшев aka Modis, получилось! Спасибо за совет ;)

Оффлайн Алексей Кузин

  • ADN OPEN
  • ***
  • Сообщений: 116
  • Карма: 8
Re: Считывание данных из семейства
« Ответ #5 : 23-01-2018, 15:15:06 »
Вдогонку - может пригодится так же проверка на HasValue. Например поля типо Integer не имеющие значения вернут 0. а это как никак но уже значение.

Оффлайн Алексей Кузин

  • ADN OPEN
  • ***
  • Сообщений: 116
  • Карма: 8
Re: Считывание данных из семейства
« Ответ #6 : 23-01-2018, 15:36:17 »
Извиняюсь. в коде это уже это было.