Jump to content

Search the Community

Showing results for tags 'TUniDBGrid'.

  • Search By Tags

    Type tags separated by commas.
  • Search By Author

Content Type


Forums

  • uniGUI Public
    • Announcements
    • General
    • Feature Requests
    • Installation
    • Deployment
    • Other Platforms
  • Licensing
    • Licensing
    • Ordering uniGUI
  • Bug Reports
    • Active Reports
    • Closed Reports
    • Old Bug Reports
  • uniGUI Development
    • General Development
    • uniGUI Releases & Roadmaps
    • Utilities
  • Mobile Platform
    • uniGUI Mobile
    • Mobile Browsers
  • Users Area
    • Sample Projects
    • Components and Code Samples
    • Third Party Components
  • Non-English
    • Non-English
  • Miscellaneous
    • Hosting
    • Server Security
    • Jobs

Find results in...

Find results that contain...


Date Created

  • Start

    End


Last Updated

  • Start

    End


Filter by number of...

Joined

  • Start

    End


Group


AIM


MSN


Website URL


ICQ


Yahoo


Jabber


Skype


Location


Interests

  1. Hello, unfortunateley I cannot upload any files here nor post to the bugs subforum. As I've set up a demo project to show it, feel free to drop me an email or contact me otherwise if you want me to supply it. To reproduce this yourself you will need a simple Master/Detail setup. * Take two TFDMemTables for example. * Now link a Detail Table Field to any DB aware control like a TUniDBEdit or just link the whole Table to TUniDBGrid. * Drop a TUniDBNavigator to navigate the Master * Edit content in a Detail Field (but do not Post) * After the editing: Create a TUniDBGrid instance and link it to the Master. ***** * Use the Navigator to move the master forth and back. The non posted update will now be lost due to (*****). (*****): The reason for this is in TUniCustomDBGrid.MoveCursor which is called during construction. It basically does the following logic: DataSet.DisableControls; DataSet.First; MoveDataSetBy(APos); DataSet.EnableControls; Which causes a state change to dsSetKey and a deDataSetChange notification to the detail, leading it to get into Modified=False but still staying in dsEdit mode. For our use case I've added a Master.CheckBrowseMode; before creating the Grid, which essentially saves all pending detail changes. However this would not be a proper fix for the grid, as you expect the Detail to stay in dsEdit with Modified=True. Regards, Thomas.
  2. Adding a Button to the TUniDBGrid Header UniDBGrid1 -> ClientEvents -> ExtEvents -> afterrender function afterrender(sender, eOpts) { // Определение индексов столбцов, в которых мы хотим иметь кнопки var ButtonColumnIndices = [1, 3, 5]; setTimeout(function() { var columns = sender.getColumns(); if (columns && columns.length > 0) { for (var j = 0; j < ButtonColumnIndices.length; j++) { var colIndex = ButtonColumnIndices[j]; if (colIndex < columns.length) { var column = columns[colIndex]; var columnId = column.id; var textEl = Ext.get(columnId + '-textEl'); if (textEl) { var buttonId = columnId + '-my-filter-' + colIndex; var existingBtn = Ext.get(buttonId); if (existingBtn) { existingBtn.remove(); } // Создание кнопки с иконкой информации и темно-синим цветом. var btnHtml = '<div id="' + buttonId + '" style="cursor:pointer; width:24px; height:100%; display:inline-flex; align-items:center; justify-content:center; background-color:transparent; margin:0 2px 0 0; padding:0; border-left:none; outline:none; position:relative; z-index:10; float:left;" data-column-index="' + colIndex + '">' + '<span class="x-fa fa-info-circle" style="color:#1E90FF; font-size:14px;"></span>' + // Темно-синий (насыщенный) '</div>'; Ext.DomHelper.insertBefore(textEl, btnHtml); textEl.setStyle({ 'float': 'left', 'margin-left': '0px' // Расстояние от иконки до текста }); var myButton = Ext.get(buttonId); if (myButton) { myButton.setStyle('display', 'inline-flex'); myButton.on('click', function(e) { e.stopEvent(); var colIdx = this.getAttribute('data-column-index'); var btnId = this.id; ajaxRequest(sender, 'HeaderButtonClick', [ 'columnIndex=' + colIdx, 'buttonId=' + btnId ]); }); // Установка всплывающей подсказки для кнопки Ext.QuickTips.register({ target: myButton, title: '', text: 'Для получения дополнительной информации нажмите...' }); // Эффект при наведении с оранжевым цветом myButton.on('mouseover', function() { this.setStyle('background-color', 'transparent'); var span = this.down('span'); if (span) span.setStyle('color', '#FFA500'); // Оранжевый }); myButton.on('mouseout', function() { this.setStyle('background-color', 'transparent'); var span = this.down('span'); if (span) span.setStyle('color', '#1E90FF'); // Возврат к темно-синему }); } } } } } }, 250); } ِDelphi procedure TMainForm.UniDBGrid1AjaxEvent(Sender: TComponent; EventName: string; Params: TUniStrings); var ClickedColumnIndex, ClickedButtonId: string; begin if EventName = 'HeaderButtonClick' then begin ClickedColumnIndex := Params.Values['columnIndex']; ClickedButtonId := Params.Values['buttonId']; ShowMessage('Нажмите на кнопку столбца с индексом: ' + ClickedColumnIndex + sLineBreak + 'Идентификатор кнопки: ' + ClickedButtonId); end; end;
  3. Based on the explanations provided in the links below, I have written a comprehensive, complete, and optimized code for this purpose. https://examples.sencha.com/extjs/6.7.0/examples/kitchensink/?classic#grid-filtering It works by having separate functions for each data type: applyFilterToNumber // for numbers applyFilterToString // for strings applyFilterToDate // for dates applyFilterToMoney // for currency applyFilterToBoolean // for booleans applyFilterToList // for lists You simply need to pass the column index to the function. Regarding the applyFilterToList function, it is designed to automatically generate the list. MainForm -> Scipt function applyFilterToNumber(column) { if (!column) return; if (column.titleEl) { column.filter = column.filter || {}; column.filter.type = "number"; column.filter.itemDefaults = { emptyText: 'Число...' }; } else if (column.columns) { column.columns.forEach(function(subCol) { if (subCol.titleEl) { subCol.filter = subCol.filter || {}; subCol.filter.type = "number"; subCol.filter.itemDefaults = { emptyText: 'Число...' }; } }); } } function applyFilterToString(column) { if (!column) return; if (column.titleEl) { column.filter = column.filter || {}; column.filter.type = "string"; column.filter.itemDefaults = { emptyText: 'Искать...' }; } else if (column.columns) { column.columns.forEach(function(subCol) { if (subCol.titleEl) { subCol.filter = subCol.filter || {}; subCol.filter.type = "string"; subCol.filter.itemDefaults = { emptyText: 'Искать...' }; } }); } } function applyFilterToDate(column) { if (!column) return; if (column.titleEl) { column.filter = column.filter || {}; column.filter.type = "date"; column.filter.fields = { lt: { text: 'До' }, gt: { text: 'После' }, eq: { text: 'В' } }; } else if (column.columns) { column.columns.forEach(function(subCol) { if (subCol.titleEl) { subCol.filter = subCol.filter || {}; subCol.filter.type = "date"; subCol.filter.fields = { lt: { text: 'До' }, gt: { text: 'После' }, eq: { text: 'В' } }; } }); } } function applyFilterToBoolean(column) { if (!column) return; if (column.titleEl) { column.filter = column.filter || {}; column.filter.type = "boolean"; column.filter.value = true; column.filter.yesText = 'Тру'; column.filter.noText = 'Фолс'; } else if (column.columns) { column.columns.forEach(function(subCol) { if (subCol.titleEl) { subCol.filter = subCol.filter || {}; subCol.filter.type = "boolean"; subCol.filter.value = true; subCol.filter.yesText = 'Тру'; subCol.filter.noText = 'Фолс'; } }); } } function applyFilterToList(column) { if (!column) return; if (column.titleEl) { column.filter = column.filter || {}; column.filter.type = "list"; } else if (column.columns) { column.columns.forEach(function(subCol) { if (subCol.titleEl) { subCol.filter = subCol.filter || {}; subCol.filter.type = "list"; } }); } } function applyFilterToMoney(column) { if (!column) return; if (column.titleEl) { column.formatter = 'usMoney'; column.filter = 'number'; } else if (column.columns) { column.columns.forEach(function(subCol) { if (subCol.titleEl) { subCol.formatter = 'usMoney'; subCol.filter = 'number'; } }); } } procedure TMainForm.UniFormCreate(Sender: TObject); begin UniDBGrid1.ClientEvents.UniEvents.Add( 'afterCreate=function afterCreate(sender)' + '{' + ' sender.addPlugin("gridfilters");' + '}' ); UniDBGrid1.ClientEvents.ExtEvents.Add( 'afterrender=function afterrender(sender, eOpts)' + '{' + ' let fp = sender.addPlugin("gridfilters");' + ' fp.setConfig({menuFilterText: "Фильтр"});' + '}' ); UniDBGrid1.ClientEvents.ExtEvents.Add('reconfigure=function reconfigure(sender, store, columns, oldStore, oldColumns, eOpts) ' + '{ ' + ' var targetColumnIndex = 0; ' + ' if (columns.length > targetColumnIndex) { ' + ' var column = columns[targetColumnIndex]; ' + ' applyFilterToNumber(column); ' + ' } ' + ' ' + ' var targetColumnIndex = 1; ' + ' if (columns.length > targetColumnIndex) { ' + ' var column = columns[targetColumnIndex]; ' + ' applyFilterToString(column); ' + ' } ' + ' ' + ' var targetColumnIndex = 2; ' + ' if (columns.length > targetColumnIndex) { ' + ' var column = columns[targetColumnIndex]; ' + ' applyFilterToString(column); ' + ' } ' + ' ' + ' var targetColumnIndex = 3; ' + ' if (columns.length > targetColumnIndex) { ' + ' var column = columns[targetColumnIndex]; ' + ' applyFilterToString(column); ' + ' } ' + ' var targetColumnIndex = 4; ' + ' if (columns.length > targetColumnIndex) { ' + ' var column = columns[targetColumnIndex]; ' + ' applyFilterToDate(column); ' + ' } ' + ' ' + ' var targetColumnIndex = 5; ' + ' if (columns.length > targetColumnIndex) { ' + ' var column = columns[targetColumnIndex]; ' + ' applyFilterToMoney(column); ' + ' } ' + ' ' + ' var targetColumnIndex = 6; ' + ' if (columns.length > targetColumnIndex) { ' + ' var column = columns[targetColumnIndex]; ' + ' applyFilterToBoolean(column); ' + ' } ' + ' ' + ' var targetColumnIndex = 8; ' + ' if (columns.length > targetColumnIndex) { ' + ' var column = columns[targetColumnIndex]; ' + ' applyFilterToList(column); ' + ' } ' + '}'); end; procedure TMainForm.UniButton1Click(Sender: TObject); begin // Clear Filters UniSession.AddJS( 'var grid = ' + UniDBGrid1.JSName + ';' + 'if (grid.filters) {' + ' grid.filters.clearFilters();' + '}' + 'if (grid.clearFilter) grid.clearFilter();' + 'grid.getStore().clearFilter();' + '' + 'var columns = grid.headerCt.getGridColumns();' + 'columns.forEach(function(col) {' + ' if (col.filterEl && col.filterEl.dom) col.filterEl.dom.value = "";' + ' if (col.filtered) col.filtered = false;' + ' if (col.el) {' + ' col.el.removeCls("x-grid-header-filtered");' + ' col.el.removeCls("x-column-header-filtered");' + ' }' + '});' + '' + 'grid.getView().refresh();' ); end; It doesn't work properly when GroupHeader is enabled. I'm working on this problem. I'll post the code once it's fixed.
  4. I have the following a TUniDateTimePicker with kind: tUniTime a TUniQuery with the time field from the db TUuniDBGrid with column representing a time field in from the query The column's Editor is set to the TUniDateTimePicker When implementing the OnGetText of the TUniQuery the grid disappears. Versions FMSoft uniGUI Complete - Professional Edition v1.95.0.1574 FMSoft uniGUI HyperServer OS Config v1.95.0.1574 FMSoft uniGUI Runtime v1.0.0.1421 FMSoft uniGUI Theme Pack v1.95.0.1574 Delphi 10.2
  5. I have a TUniDBGrid with the following options enabled: [dgTitles,dgIndicator,dgColumnResize,dgColLines,dgRowLines,dgRowSelect,dgCheckSelect,dgCheckSelectCheckOnly,dgMultiSelect,dgAutoRefreshRow,dgDontShowSelected] Each row has a checkbox next to it. How do I check specific checkboxes inside the grid based on some value ? Or how to check or uncheck all rows ?
  6. Hello, How to make the filter editors in TUniDBGrid work only after you press Enter? What property to set in the TUniDBGrid? Thank you
  7. Hello, I hope you can help me out to resolve the issue with locking TUniDBGrid columns in runtime when the end user using browser zoom. When the end user uses Google Chrome zoom 100%, 150%, 75%, 80%, 90% the program works fine, but if user set another zoom like: 110%, 125%, 67% and etc.. The program blows up without showing any error in the debug mode it's just screen stalls and you have to restart it. It could be replicated if you run in the debug mode (stand alone) or if the program is deployed on IIS server. I have developed the complex PLM system and noticed that issue when system was developed using FMSoft_uniGUI_Complete_Professional_1.90.0.1560.exe version. That time it worked fine on browser zoom: 100%, 75%, 125%, 150%. I implemented the function that catch the user browser zoom and if the zoom is a list (100%, 75%, 125%, 150%) the system locks the columns, but if other zoom is used, the system doesn't lock the columns. That solution wasn't ideal, but it was difficult to create the test case as the system is complicated and the functionality is loaded based on a lot of parameters and conditions, so that time I did not reported this issue to you. Recently, our customers reported that the system stopped working on zoom 125% as well (system was developed using software FMSoft_uniGUI_Complete_Professional_1.90.0.1565.exe that time). I have installed the latest version FMSoft_uniGUI_Complete_Professional_1.95.0.1575.exe, but the issue still exists. We can't keep saying to the customers that now is the other valid zoom list. We really need the issue to be resolved. I have created the test case based on FMSoft_uniGUI_Complete_Professional_1.95.0.1575.exe software (the latest one). Brief explanation how to replicate the issue: 1. Build and run the ZoomError.dpr: Then, please click on "Create Frame and Load Grid" button. If you select a Google Chrome zoom 100%, 150%, 75%, 80%, 90% It will create a frame without any issue, please see screen below. The grid will have locked "PRODUCTCODE" and "DESCRIPTION" columns. I have implemented two methods to lock columns: 2.1 when "Lock columns using JS" checkbox is unchecked, it uses code inside procedure TUpdateGridFrame.BuildDBGrid; …… if not FLockcolumnsUsingJS then begin ColumnDB.Locked := True; end; ……. 2.2 when "Lock columns using JS" checkbox is checked, it uses code: procedure TUpdateGridFrame.DoLockProductDescription; var grid: TUniDBGrid; begin grid := UniDBGridUpdateGrid; with grid do begin Columns[0].Locked := True; Columns[1].Locked := True; TExUniCustomDBGrid(grid).DoConfigureJSColumns(grid.DataSource.DataSet); grid.JSInterface.JSCall('view.refresh', []); end; end; Those data will be loaded from Data folder, file MemTBValues_zoom.json: Those two methods fail when browser zoom is not in this list: 100%, 150%, 75%, 80%, 90% Here is testcase: ZoomError.zip We really need your help to sort it out. Thank you in advance. Kind Regards. ZoomError.zip
  8. This message is constantly displayed on the TUniDBGrid and is annoying. How can I remove it or change its text?
  9. Создал новый проект. Подключил таблицу к набору данных. Почему-то заголовок одного из столбцов пустой. Хотя свойство Title.Caption у столбца заполнено - картинка 1. Это уже не первый раз такое. Откройте проект. Добавьте на форму сетку uniDBGrid, подключите сетку к DataSource, откройте редактор столбцов у сетки и нажмите кнопку Add all fields (картинка 2). Затем уменьшите размеры столбцов и будет видно, что заголовок столбца REMARK пустой. На картинке 3 видно, что у набора данных FDQuery столбец REMARK имеет имя (DisplayLabel). uniGUI 1555, D 10.4.2. unigui_DBGridTitle.zip
  10. А может ли сетка uniDBGrid быть с "бесконечной" прокруткой? Попытаюсь объяснить. Внизу сетки есть пагинатор. Так вот, чтобы пользователь не нажимал каждый раз Next page, можно ли сделать так, чтобы был не переход а следующую страницу, а просто дозаагрузка данных прямо в таблицу. Например, в сетке видны 100 записей. Пользователь прокручивает-прокручивает-прокручивает, а когда курсор доходит до 90ой записи, то в таблицу догружаются ещё, например, 50 записей, таким образом в сетке видных уже 150 записей. Но... в базе может быть миллион записей и не все их надо дозагружать, иначе памяти не хватит, поэтому верхние записи можно "уничтожать", чтобы в сетке было одновременно не более 200-300 записей. Типа RecyclableList: в сетке создаётся столько строк, сколько видно на экране + ещё небольшой запас, а при прокрутке предыдущие невидимые удаляются, а вместо них добавляются другие вниз или вверх сетки, в зависимости от направления прокрутки. В базе имеем огромный массив , а в интерфейсе рисуем только необходимое для отображения кол-во, соответственно и TDataSet тоже имеет такое количество записей. Надеюсь понятно пояснил.
  11. Hi Apologies for what might be a beginner question, but is there an obvious/easy/trivial way to respond to the runtime resizing of the client side browser and consequently anchored (or aligned) DBGrid, so that the page size used by the DBGrid matches the visible size in the browser? Thanks.
  12. I have a secondary (not main) form that contains a UniDBGrid with align=alClient. The form RESIZE only works if the Grid has less than 50 records displaying, or 49 records plus a summary record. If 50 or more records are being displayed in the grid, then I can resize the form ONCE, but the grid inside the form will not resize. This happens whether or not the grid is "paged." If I then close the form, but don't exit the session, then when I try to open the form again it does not render properly, but just shows a "blue" colored blank form. I'm trying to display 350 records, which works fine as long as I don't resize the form. If I filter a column to only show <50 records, the resize works, so the issue has to do with how many records are being displayed, not how many total records there are in the underlying dataset. One strange issue is that even though I am not using the "paging" feature of the grid, when I change the PageSize to something greater than 25, then I can resize the form when there are 50 records being displayed, but it still fails when displaying a few more than 50. I am on V 1.90.0.1554 Thanks for any help
  13. Я не могу понять, чем отличаются свойства ColID и Index. В справке описания этих свойств не нашёл. http://www.unigui.com/doc/online_help/api/!!MEMBEROVERVIEW_uniDBGrid_TUniCustomDBGridColumn.html http://www.unigui.com/doc/online_help/api/!!MEMBEROVERVIEW_uniDBGrid_TUniDBGridColumn.html http://www.unigui.com/doc/online_help/api/!!MEMBERTYPE_Properties_uniDBGrid_TUniDBGridColumn.html Например, для сохранения и восстановления настроек столбцов. Ну или в других случаях что и для чего правильно использовать? Спасибо
  14. При установке свойства TUniDBGrid.WebOptions.PageSize в браузере намертво подвисает приложение и появляется ошибка в консоли. Как воспроизвести ошибку: 1. Нажмите в браузере слева вверху Open для наполнения таблиц данными. 2. Изменить размеры панелей, т.е. переместить разделитель ВНИЗ (как на картинке 3). В консоли появится ошибка (картинка 1) и видно на картинке 2, что приложение застыло, подвисло. И больше ничего нельзя нигде нажать. Ошибки нет, если в не открывать таблицы. Ошибки нет, если перемещать разделитель вверх. Подскажите, как исправить проблему? Спасибо. uniGUI_PageSize_err.zip
  15. в этой теме есть сетка, в которой есть очень полезный функционал - фильтры. http://forums.unigui.com/index.php?/topic/11857-grid-filters-list/&tab=comments#comment-63164 Вопрос такой: как прикрутить эти фильтры именно к стандартной сетке uniDBGrid, чтобы не создавать новую компоненту. У меня не получается. Ошибок нет, приложение работает, но пункт Filters в выпадающем меню колонок отсутствует. Хотя бы потому что, у этой сетки не работают итоги и не хочется каждый раз тратить время на переустановку одной компоненты при переустановке (при обновлении) uniGUI. CustomDBGridFilter.rar
  16. Hello, I have just seen What's New in Ext JS 7.4.0 https://docs.sencha.com/extjs/7.4.0/guides/whats_new/whats_new.html They have introduced multi grouping on dbgrid. Would it be possible to implement it in uniGui please? Thank you in advance. Kind Regards, J
  17. Hello, I am using OnDropRowsEvent for moving rows inside the same Grid. It works nice and smooth. What issue I have got is if you assigned true to DragDrop.Enabled at design time it will always allow you to drag drop, despite I created a button with OnClick where there is a code: uniDBGrid1.DragDrop.Enabled := not uniDBGrid1.DragDrop.Enabled; Changing uniDBGrid1.DragDrop.Enabled at runtime doesn't make any difference. If it was False at design time or OnCreateForm it will always disallow to drag&drop and if True - always allows. Could you please advise how to work it around? Is there some trick to work around? Thank you in advance
  18. Подскажите, пожалуйста по множественной сортировке в браузере (т.е. когда setRemoteSort(false) ). код JS: function beforeInit(sender, config) { config.multiColumnSort = true; } и код Delphi: uniDBGrid1.multiColumnSort := True; это одно и то же или нет? Почему возникает такой вопрос. Потому что множественная сортировка не работает, хотя маркеры-треугольники в заголовках есть. Нажимаю на Столбец2 - сортировка есть, нажимаю на Столбец1 и сортировка по Столбец2 уже сбросилась и данные отсортировались только по Столбец1, хотя маркеры видны в заголовках обоих столбцов. Т.е. получается несоответствие маркеров и сортировки (сортировка по одному столбцу, а маркеров два). Как должно быть правильно: один из маркеров должен исчезнуть, по которому уже нет сортировки, или тогда уже сортировка должна быть по двум столбцам. Обратите внимание на 2 снимка. На втором снимке (справа) видно, что маркера два, но Столбец2 не отсортирован. Может я забыл еще что-то включить/отключить? Спасибо.
  19. There are pop-up buttons in gmail when you move the mouse cursor to the edge of the table. Is it possible to do something similar in the TuniDBrid column?
  20. Внизу сетки куча свободного места. Можно ли перед пагинатором или после него вставить навигатор? Было бы вообще хорошо, если бы у сети был свой собственный встроенный навигатор.
  21. Hi, I want the selected row/cell in a TUniDBGrid to be displayed in a particular way. I have found that this can be done with this code: .x-grid-row-selected .x-grid-cell-inner { font-weight: bold; background-color:red; } Where should this be entered ? I guess in the UniEvents-property of the UniDBGrid, but there I can select Ext.grid.Panel, Ext.data.Store, Ext.selection.CellModel, Ext.selection.RowModel, Ext.selection.ChekboxModel and Ext.toolbar.Paging. And in what event should I put this code ? Thank you
  22. x11

    uniDBGrid Summary

    Не могу понять, что я делаю не так. Нужно просто показать общую сумму в колонке. procedure TfmMain.dbgPurchasesColumnSummaryResult(Column: TUniDBGridColumn; GroupFieldValue: Variant; Attribs: TUniCellAttribs; var Result: string); Var v: variant; begin if SameText(Column.FieldName, 'SUMA') or SameText(Column.FieldName, 'KEYS_QUANTITY') then begin v := Column.AuxValue; if not VarIsNull(v) then result := v; end; end; условие выполняется, но суммы пустые У колонок свойство Summary включено, у сетки - тоже. Что я еще забыл? В качестве набора данных использую DevArt uniDAC (TUniQuery) Спасибо.
  23. Не могу понять, как программно выделить некоторые строки в сетке TuniDBGrid зная ID записей датасета? Заранее благодарен за пример.
  24. Предисловие. Есть события, которые касаются изменения внешнего вида сетки TUniDBGrid, т.е. когда пользователь столбцы перемещает (меняет местами), меняет размер, прячет или показывает. И после изменения программист должен предоставить пользователю возможность сохранить настройки сетки. Я так и делаю - показываю кнопку Сохранить настройки таблицы. Да, можно кнопку "Сохранить настройки" держать всё время видимой, но зачем нагружать интерфейс и показывать пользователю кнопку, которой он пользуется раз в месяц? Поэтому я показываю кнопку "Сохранить настройки таблицы" только, если пользователь изменил настройки таблицы. Теперь вопрос. У сетки есть события ColumnMove, ColumnResize, но нету события ColumnVisiblity. Т.е. программист не знает, что пользователь скрыл/показал какой-то столбец. Как узнать, что пользователь скрыл или показал столбец? Хотелось бы, чтобы разработчики фрейморка добавили событие, которое отвечает за показ и за скрытие столбца. Или какое-то одно единое событие, например, ColumnChange, которое будет срабатывать во всех этих трех случаях: Move, Resize, Visiblity. Спасибо.
  25. Не могу понять, какие свойства отвечают за панель с этими кнопками? Вопросы вдогонку. Можно ли менять положение этой панели, чтобы кнопки были поближе к редактируемой ячейке? Можно ли их локализовать на другие языки?
×
×
  • Create New...