Всем доброго времени суток.
Есть MemoryDataset, в котором динамически создаются столбцы
var Dataset = Services.GetNewItemByUSI('mds_ResStill');
var DataField = Dataset.DataFields.CreateStringDataField();
Dataset.DataFields.Add(DataField);
DataField.Name = ds.Values("ID");;
DataField.Caption = ds.Values("Name");
Dataset.Open();
Dataset.Append();
Dataset.Values(ds.Values("ID")) = ds.Values("Name");
Dataset.Post();
Вопрос, как в DataGridView отобразить созданные в Dataset столбцы???
Нравится
Точно так же - создать колонки в гриде динамически, для нужных полей датасета.
--------------------------------------------
Лабитек
Центр разработки приложений
У колонок есть свойство DataFieldName, в которое нужно внести название поля датасета
--------------------------------------------
Лабитек
Центр разработки приложений
Column = Window.CreateComponent('DataGridColumn', ds.Values("ID"));
Column.Width = 125;
Column.DataFieldName = ds.Values("ID");
DataGridView.Add(Column);
После этого отображаются пустые столбцы. Что я пропустил???
Column = Window.CreateComponent('DataGridColumn', "colID"); // Column.DataFieldName = "ID";
--------------------------------------------
Лабитек
Центр разработки приложений
А датасет к гриду привязан?
У грида свойство DatasetLink (как правило dlData).
dlData.Dataset должен указывать на этот MemoryDataset
--------------------------------------------
Лабитек
Центр разработки приложений
Привязать датасет к гриду надо после того, как в нем созданы колонки.
--------------------------------------------
Лабитек
Центр разработки приложений
Может, у грида не заполнено свойство ActiveView?
Олег Лабьяк,
разработчик,
3-я линия Службы поддержки Terrasoft.
вот полный код процедуры
var slectQuery = Services.GetNewItemByUSI('sq_ResStill');
var ds = slectQuery.Open();
ds.GotoFirst();
while (!ds.IsEOF){
var Dataset = Services.GetNewItemByUSI('mds_ResStill');
var DataField = Dataset.DataFields.CreateStringDataField();
Dataset.DataFields.Add(DataField);
DataField.Name = ds.Values("ID");
DataField.Caption = ds.Values("Name");
Dataset.Open();
Dataset.Append();
Dataset.Values(ds.Values("ID")) = ds.Values("Name");
Dataset.Post();
Column = Window.CreateComponent('DataGridColumn', "col"+ds.Values("ID"));
Column.Width = 125;
Column.DataFieldName = ds.Values("ID");
DataGridView.Add(Column);
ds.GotoNext();
}
Честно говоря, я не совсем понимаю логику :smile: (в результате в гриде будут столько строк, столько записей в исходном запросе, а заполнена только одна колонка в каждой строке - так и надо?), но технически еще не хватает в конце процедуры такого:
dlData.Dataset = Dataset;
Да, и еще надо вынести за пределы цикла вот это:
var Dataset = Services.GetNewItemByUSI('mds_ResStill');
--------------------------------------------
Лабитек
Центр разработки приложений
Да логика такая, только кол-во не строк, а столбцов.
Всё заработало помогло dlData.Dataset = Dataset;
Анатолий Олегович, Вы заполняете MemoryDataset на событие AfterOpen? Если нет, то посмотрите что будет если Вы в реестре выполните Refresh.
Да, и в цикле лишнее Dataset.Open();