Jump to content

Видимость данных в колонке типа ActionColumn


x11

Recommended Posts

Спасибо разработчикам, за то, что подсказали как скрывать значки в ActionColumn с помощью CSS

Но проблема в том, что в ActionColumn теперь не отображаются данные.

Т.е. цель такого функционала - это:

1. По умолчанию скрывать все кнопки и показывать только при наведении (это реализовано).

2. Отображать не просто пустую колонку, а колонку с данными (как реализовать этот функционал).

 

спасибо

Screenshot_10.jpg

Link to comment
Share on other sites

47 minutes ago, x11 said:

Отображать не просто пустую колонку

Здравствуйте,

Простите, а почему пустая строка? Вы имеете в виду пустую строку?

Link to comment
Share on other sites

Не строка, а колонка (столбец сетки).

Вот есть колонка ID. Я хотел бы отображать там ID объектов, а при наведении мышки показывать кнопки действий (редактировать, просмотреть, удалить и т.д.) вместо цифры. Но как только я включаю ActionColumn.Enabled (картинка 1), то данные уже в колонке отсутствуют (картинка 2).

 

И еще одна проблема всплыла. Если включено ActionColumn.Enabled, то автоматически отключается возможность изменять ширину колонку (стрелка на картинке 2).

Screenshot_11.jpg

Screenshot_12.jpg

Link to comment
Share on other sites

24 minutes ago, x11 said:

Вот есть колонка ID. Я хотел бы отображать там ID объектов, а при наведении мышки показывать кнопки действий (редактировать, просмотреть, удалить и т.д.) вместо цифры. Но как только я включаю ActionColumn.Enabled (картинка 1), то данные уже в колонке отсутствуют (картинка 2).

Теперь ясно.

Link to comment
Share on other sites

On 4/3/2021 at 7:26 PM, x11 said:

ну так получиться или нет?

Вот такой вид получается на данный момент, с использованием UniPanel (кнопки), mouseover событие ячейки...

actionGrid.png.4b4d56c66ca1c4ac71ce6b7f9327504e.png

Link to comment
Share on other sites

6 minutes ago, x11 said:

а как такое сделать?

Черновой код (JS):

MainForm.UniDBGrid1.getView().getEl().addListener('mouseover', function(event, target) {
    MainForm.UniPanel1.setWidth(Ext.get(target).getWidth());
    MainForm.UniPanel1.setHeight(Ext.get(target).getHeight());
    MainForm.UniPanel1.alignTo(Ext.get(target), 't-t', [0, 0])
}, null, {
    delegate: '.x-grid-cell-first .x-grid-cell-inner'
});

 

Link to comment
Share on other sites

3 hours ago, x11 said:

мда, слишком сложно для меня :(

без полностью готового примера, я не справлюсь.

Надеюсь, что есть более простой способ, проанализируем...

Link to comment
Share on other sites

24 minutes ago, x11 said:

ждем решения

Попробуйте следующие шаги:

1. CustomCSS (если несколько гридов, то можно добавить cls...)

.x-grid-cell-inner-action-col {
    line-height: inherit;
    font-size: inherit;
}

.x-grid-cell-inner-action-col:hover {
    line-height: 0;
    font-size: 0;
}

.x-action-col-icon {
    margin-right: 10px;
}

2. UniDBGrid1->ClientEvents->ExtEvents->

(также, можно модифицировать код, для всех actionColumns)

function reconfigure(sender, store, columns, oldStore, oldColumns, eOpts)
{
    var actionColIndx = 6;
    
    columns[actionColIndx].items.forEach(function(actioncol) {
        actioncol.getClass = function(value, metadata, record) {
            return "x-hidden"
        }
    });
}

3. UniDBGrid1->ClientEvents->ExtEvents->

(при использовании иконок, не проверял...) (тестировано на демо примере \FMSoft\Framework\uniGUI\Demos\Desktop\Grid - ActionColumn)

function afterrender(sender, eOpts) 
{
    var me = sender.getView().getEl();
    me.addListener('mouseout', function(event, target) {
        Ext.get(target).select('img').elements.forEach(function(img) {
            Ext.get(img).addCls('x-hidden')
        })
    }, null, {
        delegate: '.x-action-col-cell'
    });
    me.addListener('mouseover', function(event, target) {
        Ext.get(target).select('img').elements.forEach(function(img) {
            Ext.get(img).removeCls('x-hidden')
        })
    }, null, {
        delegate: '.x-action-col-cell'
    });
}

4. UniDBGrid1.Columns[ActionCol].FieldName = 'xx'

    UniDBGrid1.Columns[ActionCol].Alignment = ...

Link to comment
Share on other sites

22 minutes ago, Sherzod said:

var actionColIndx = 6;

 

но ведь в разных сетках положение колонки почти всегда разное

т.е. нужно отдельный код для каждой сетки?

Link to comment
Share on other sites

3 minutes ago, x11 said:

но ведь в разных сетках положение колонки почти всегда разное

т.е. нужно отдельный код для каждой сетки?

Тогда, попробуйте такой код:

function reconfigure(sender, store, columns, oldStore, oldColumns, eOpts)
{
    //var actionColIndx = 6;
    
    //columns[actionColIndx].items.forEach(function(actioncol) {
    //    actioncol.getClass = function(value, metadata, record) {
    //        return "x-hidden"
    //    }
    //});
    
    columns.forEach(function(col){
       if (col.xtype && col.xtype == 'actioncolumn') {
           col.items.forEach(function(actioncol) {
               actioncol.getClass = function(value, metadata, record) {
                   return "x-hidden"
               }
           })
       }
    });
}

 

Link to comment
Share on other sites

Ну, так и что там указать?

Я так понял, что вы специально обратили внимание на это свойство, что там что-то надо указать. Но что именно? Там возможны только три значения. Пустое значение недопустимо ведь.

Link to comment
Share on other sites

Еще 2 вопроса. Как разрешить менять ширину ActionColumn? Зачем вообще запрещать менять ширину этой колонки?

И второй. Как добавить меню в заголовке такое же, как и остальных обычных колонок?

 

спасибо

Link to comment
Share on other sites

1 hour ago, Sherzod said:

Ext.get(target).select('img').elements.forEach(function(img)

 

Подскажите, а если используются иконки fontawesome font? Должно работать или не будет?

Screenshot_9.jpg

Link to comment
Share on other sites

1 hour ago, Sherzod said:

(при использовании иконок, не проверял...) (тестировано на демо примере \FMSoft\Framework\uniGUI\Demos\Desktop\Grid - ActionColumn)

 

3 minutes ago, x11 said:

Подскажите, а если используются иконки fontawesome font? Должно работать или не будет?

Не тестировал.

Link to comment
Share on other sites

1 hour ago, Sherzod said:

var me = sender.getView().getEl();

 

приложение не запускается

 

function afterrender(sender, eOpts)
{
	//фильтры
	let fp = sender.addPlugin('gridfilters');
    fp.setConfig({menuFilterText: 'Фільтр'});


    var me = sender;	
    if (me.editingPlugin.isRowEditor) {
		
		me.editingPlugin.saveBtnText   = 'Підтвердити';
		me.editingPlugin.cancelBtnText = 'Відмінити';
		
        me.editingPlugin.editorCfg.cls = "_roweditor";
        me.addCls('_roweditor');
        
        me.editingPlugin.editorCfg.listeners = {
            show: function() {
                if (me.activeTD) {
                    me.getEl().select('.x-grid-row-editor-buttons').setX(Ext.get(me.activeTD).getX());
                }
            }
        };
    }

	var me = sender.getView().getEl();
    me.addListener('mouseout', function(event, target) {
        Ext.get(target).select('img').elements.forEach(function(img) {
            Ext.get(img).addCls('x-hidden')
        })
    }, null, {
        delegate: '.x-action-col-cell'
    });
    me.addListener('mouseover', function(event, target) {
        Ext.get(target).select('img').elements.forEach(function(img) {
            Ext.get(img).removeCls('x-hidden')
        })
    }, null, {
        delegate: '.x-action-col-cell'
    });

}

 

Quote

Cannot read property 'getView' of undefined

 

Screenshot_10.jpg

Link to comment
Share on other sites

Please sign in to comment

You will be able to leave a comment after signing in



Sign In Now
×
×
  • Create New...