Публикация

Добавить ID в грид

К идее http://www.community.terrasoft.ru/ideas/9586
А вот вам и решение :cool:
Не уверен, что не вызовет где-нибудь конфликта, но пока полет нормальный
Модифицировал scr_BaseGridArea.
Обращаю внимание, что это затронет только гриды на базе BaseGridArea.

1. Добавляем функции в scr_BaseGridArea

function UpdateGridForIDFields(Window) {
        if (!Connector.CurrentUser.IsAdmin) return;
       
        var Grid = GetGrid(Window);
        if (Assigned(Grid)) {
                var Count = Grid.Count;
                for (var i = 0; i Count; i++) {
                        var GridView = Grid.Items(i);
                var ComponentName = 'col' + 'ID' + GridView.Name;
                if (Assigned(Window.ComponentsByName(ComponentName))) return
                var DataGridColumn = Window.CreateComponent('DataGridColumn', ComponentName);
                DataGridColumn.DataFieldName = 'ID';
                DataGridColumn.IsVisible = false;
                GridView.Add(DataGridColumn);  
                }
        }
}

function GetGrid(Window) {
        var Count = Window.ComponentCount;
        for (var i = 0; i Count; i++) {
                var Component = Window.Components(i);
                if ((Component.TypeCode == 'DataGrid') || (Component.TypeCode == 'DataTreeGrid')) {
                        return Component;
                }
        }
        return null;
}

2. Добавляем вызов UpdateGridForIDFields на OnPrepare

function wnd_BaseGridAreaOnPrepare(Window) {
        InitializeGridArea(Window, BaseGridArea, dlData);
        InitializeGridAreaHotKeyList(Window);
        UpdateGridForIDFields(Window); // test
}

Нравится

Поделиться

2 комментария

исправление:
надо еще проверку добавить
if (Assigned(Window.ComponentsByName(ComponentName))) return

Справочники используют свое окно (где грид пересоздается). Чтобы это сработало и с ними, надо в wnd_DictionaryGridAreaScript в функцию добавить UpdateGridForIDFields(Window):

function wnd_DictionaryGridAreaOnPrepare(Window) {
	wnd_BaseGridAreaOnPrepare(Window);
	Initialize(Window);
	UpdateGridForIDFields(Window);
/* 3.4.0	if (!DictionaryGridArea.ExternalOpening) {	
		BaseGridArea.GridDataset.Open();
	}
*/
}

если код функции у вас не в scr_BaseGridArea - не забудьте подключить

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