RUS  ENG 

Не возвращается значение от IZbDataset.FieldDisplayValue[i]

Страницы: 1
RSS
Не возвращается значение от IZbDataset.FieldDisplayValue[i]
 
Здравствуйте!
Пишу WPF-приложение на C# для вывода данных из Zulu в текстовый файл.
Подключил библиотеки ZB и ZuluLib для 8-ой версии.

Хочу получить все данные по определённому элементу. Название поля выводит, но вместо значения - пустая строка.
Привожу код
Код
public static Dictionary<string, string> GetAllTheValues(this Element oElement, Layer oLayer)
        {
            //создаём словарь для занесения названия поля и значения
            var definitionAndValueDict = new Dictionary<string, string>();
            var db = new ZbDatabase();
            bool isDbOpen = db.Open(oLayer.ObjectTypes.GetItemByIndex(oElement.TypeID).BaseName);
            var dataSet = db.SelectByKey(oElement.Key);
            dataSet.MoveFirst();
            for (int fieldIndex = 0; fieldIndex < dataSet.FieldCount; fieldIndex++)
            {
                //здесь возвращает название поля, например, "Наименование"
                var fieldName = dataSet.GetFieldInfo(fieldIndex).UserName;
                //а здесь вместо значения - пустая строка ("")
                var fieldDisplayValue = dataSet.FieldDisplayValue[fieldIndex];
                definitionAndValueDict.Add(fieldName, fieldDisplayValue);
            }
            return definitionAndValueDict;
        }
 
1. Применяя GetItemByIndex нужно подставлять индекс, а не ID
2. Нужно проверять, что dataset не пустой (DataSet.Eof)

Пример ниже на VBScript из Zulu работает

Код
Sub DisplayVal

Set L = zulu.ActiveMapDoc.Layers.Active         

if L.CurrentID = -1 then exit sub

Set db = CreateObject ("Zb.Database")

db.Open L.ObjectTypes.Item (L.Elements.Item(L.CurrentID).TypeID).BaseName

set ds = db.SelectByKey(L.CurrentID)

   ds.MoveFirst

   If ds.Eof = True Then 

      msgbox "Нет данных"
      Exit Sub      
        
   End IF
    
   For i = 0 To ds.FieldCount - 1

   msgbox ds.GetFieldInfo(i).UserName + ": " + ds.FieldDisplayValue(i)

   next


End Sub
 
Цитата
Станислав Павловицкий написал:
Здравствуйте!
Пишу WPF-приложение на C# для вывода данных из Zulu в текстовый файл.
Подключил библиотеки ZB и ZuluLib для 8-ой версии.

Хочу получить все данные по определённому элементу. Название поля выводит, но вместо значения - пустая строка.
Привожу код
Код
 public static Dictionary<string, string> GetAllTheValues(this Element oElement, Layer oLayer)
        {
            //создаём словарь для занесения названия поля и значения
            var definitionAndValueDict = new Dictionary<string, string>();
            var db = new ZbDatabase();
            bool isDbOpen = db.Open(oLayer.ObjectTypes.GetItemByIndex(oElement.TypeID).BaseName);
            var dataSet = db.SelectByKey(oElement.Key);
            dataSet.MoveFirst();
            for (int fieldIndex = 0; fieldIndex < dataSet.FieldCount; fieldIndex++)
            {
                //здесь возвращает название поля, например, "Наименование"
                var fieldName = dataSet.GetFieldInfo(fieldIndex).UserName;
                //а здесь вместо значения - пустая строка ("")
                var fieldDisplayValue = dataSet.FieldDisplayValue[fieldIndex];
                definitionAndValueDict.Add(fieldName, fieldDisplayValue);
            }
            return definitionAndValueDict;
        } 
Спасибо, всё заработало :)
Никак не мог найти метод Item, оказывается нужно обращаться к нему через квадратные скобки.
Код
db.Open(oLayer.ObjectTypes[oElement.TypeID].BaseName);
Страницы: 1