Вопрос

Не отображаются столбцы MemoryDataset

Здравствуйте.
Создала окно на основе wnd_BaseMemDSGridArea
Добавила DataLink, привязанный к MemoryDataset, у которого есть несколько полей.
Привязала грид к этому даталинку.
Добавила к даталинку DataGridView и у него определила колонки и указала у колонок в качестве DataFieldName поля из MemoryDataset, установила, чтобы они были видимые.
Но само разделение на колонки не отображаются и не отобрадаются их заголовки, и при запуске окна при добавлении строк в грид, появляется строка, но пустая.
Хотя данные, вводимые в нее заведомо не пустые (проверяла при помощи ShowInformationDialog).

Что я сделала не так? И что нужно поправить?

Спасибо

Нравится

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

На всякий случай привожу код добавления строк в датасет.

function PrepareSelectQueryByID(SelectQueryUSI, ID)
{
	var SelectQuery = Services.GetNewItemByUSI(SelectQueryUSI);
	ApplySelectQueryFilter(SelectQuery, 'ID', ID, true);
	DisableAllColumns(SelectQuery.Columns, false, true);
	for(var i=0; i<OfferingFields.length; ++i)
	{
		EnableColumn(SelectQuery.Columns, OfferingFields[i], true);
	}                        
	return SelectQuery.Open();
}
 
function GetSelectedOffering(Sender, Message)
{
	var OfferingID = GetSelectDataResultKeyValue(Sender, Message);
	if (OfferingID == null) {
		return;
	}
 
	BaseMemDSGridArea.GridDataset.Open();
	BaseMemDSGridArea.GridDataset.DisableEvents();
	BaseMemDSGridArea.GridDataset.Append();
	BaseMemDSGridArea.GridDataset.Values('ID') = OfferingID;
 
	var Dataset = PrepareSelectQueryByID('sq_Offering',OfferingID);
	Dataset.GotoFirst();
	for(var i=0; i<OfferingFields.length; ++i)
	{	
		var DataField = Dataset.DataFields.ItemsByName(OfferingFields[i]);
		BaseMemDSGridArea.GridDataset.Values(OfferingFields[i]) = DataField.Value;
	}
 
	Dataset.Close();	
 
	BaseMemDSGridArea.GridDataset.Post();
	BaseMemDSGridArea.GridDataset.EnableEvents();
	RefreshDataset(BaseMemDSGridArea.GridDataset);
}

Здравствуйте, Валерия.
MemoryDataset необходимо всегда заполнять на событие OnAfterOpen. А в Вашем случае Вы сначала заполняете данными датасет, а потом вызываете

...
RefreshDataset(BaseMemDSGridArea.GridDataset);
...

, при этом данные теряются...

я думаю что Вы не установили у компонента DataGrid свойство
ActiveView (Ваш DataGridView)

Проблема появилась еще на этапе создания окна.
В редакторе окна не отображается разделение на столбцы и названия столбцов.

Мне не нужно заполнять датасет на событие OnAfterOpen.

У меня он заполняется данными из формы справочника. Она передает ID элемента справочника в форму датасета,
и происходит вставка строки.

Денис, спасибо, проблема была именно в этом.

"Цыбульникова Валерия" написал:
Мне не нужно заполнять датасет на событие OnAfterOpen.

Для нормального функционирования MemoryDataset в DataGrid заполнять необходимо именно в событии AfterOpen. Попробуйте нажать кнопку refresh в гриде после того как у Вас появяться данные.

Александр, закомментировала строку с RefreshDataset, теперь все работает, как и должно.

Валерия, этого не достаточно, когда у Вас появиться окно выбора данных, и там нажать refresh или сортировку по колонкам, то данные пропадут если Вы их не наполняете в событии OnAfterOpen.

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