Подскажите плс, каким образом можно получить набор selected строк в datagrid?

Нравится

1 комментарий

Валентин, здравствуйте.

Если Ваш грид унаследован от wnd_BaseGridArea, то можно вот так:

var SelectedIDs = Window.ComponentsByName('grdData').SelectedIDs.CommaText.split(',');

В итоге SelectedIDs - массив идентификаторов.

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

какое свойство компонентов позволить по-умолчанию отображать данные которые уже есть в таблице, через данные компоненты?

Нравится

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

Здравствуйте, Максим!

Вопрос задан несколько туманно.

Для того, чтобы определить отображаемые в DataGridView колонки датасета, воспользуйтесь функционалом Определить колонки (Define Columns).

Для этого необходимо войти в Terrasoft Administrator, открыть карточку реестра (например, wnd_ContractsGridArea), нажать правой кнопкой на представлении и выбрать "определить колонки":

01

Затем в появившемся окне выбрать те поля, которые должны отображаться в данном представлении и нажать кнопку сохранения настроек:

02

Прямой связи с содержимым базы данных нет, для добавления в реестр колонки из базы данных необходимо предварительно добавить ее в запрос и датасет.

В случае, если Вам необходима дополнительная информация, пожалуйста, уточните на конкретном примере, что именно нужно реализовать.

Эту процедуру я делать умею, я хочу заставить DataGridView при запуске окна выводить записи которые уже были до этого вбиты при прошлом запуске. Т.е. вбил я несколько фамилий сотрудников и их даты рождения, а затем закрыл окно, при следующем открытии я хочу чтобы те фамилии которые я забивал, я не искал через фильтр, а они сразу выводились.

Максим, содержимое грида всегда заново перерисовывается при загрузке системы. Это связано с тем, что при интенсивной работе с системой записи могут быть удалены или перемещены другими сотрудниками, и сохранять список проблематично.

В случае, если Вам необходимо сохранять фильтры, рекомендуем использовать функционал динамических групп.

Теоретически, можно попробовать сохранять содержимое грида с профиле и отображать его в отдельном представлении, однако этот функционал необходимо реализовывать с нуля.

Уточните, пожалуйста, для каких задач необходим данный функционал?

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

О динамических группах можно прочесть в руководстве Быстрый Старт: http://training.terrasoft.ru/sites/default/files/document/TS_QS_3.3.1.p…

Документация по программе есть на портале Terrasoft Training http://training.terrasoft.ru/resources/document

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

Всем доброго времени суток.
Есть 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();

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