В DataGridView не отображается информация

Всем доброго времени суток.
Есть 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 столбцы???

Нравится

15 комментариев

Точно так же - создать колонки в гриде динамически, для нужных полей датасета.
--------------------------------------------
Лабитек
Центр разработки приложений

а как привязывать???

У колонок есть свойство 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();

Показать все комментарии