请教如何获取easyui-combobox下拉菜单的多个选中值

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了请教如何获取easyui-combobox下拉菜单的多个选中值相关的知识,希望对你有一定的参考价值。

参考技术A 操作前可以先执行pvs,lvs命令,看看是否能够正常显示节点1端创建的物理卷和逻辑卷信息,如果看不到(先尝试lvscan),则说明并未使用共享存储,或者配置有异常,仍然需要排查,需要等问题解决后,再执行下列的命令。

如何使用 Angular 在 AgGrid 中获取多选下拉菜单

【中文标题】如何使用 Angular 在 AgGrid 中获取多选下拉菜单【英文标题】:How to get multiselect dropdown in AgGrid using Angular 【发布时间】:2019-12-22 16:16:37 【问题描述】:

我们有 AgGrid,我们需要一个用于其中一列的多选下拉菜单,我们使用的是 Angular 7。

我能够找到多选下拉菜单,但不能找到 agGrid Cell。

请帮忙。

我能够制作agGrid,尝试使用下面的链接但无法获取。

https://www.c-sharpcorner.com/blogs/how-to-add-combobox-in-aggrid-or-edit-grid-coloumn-with-combobox

预期:agGrid 单元格中的多选下拉菜单

【问题讨论】:

我的回答解决了你的问题吗?如果是,请在回答中标记我。 【参考方案1】:

我已经使用 Ag-grid 工作了几个月,我可以告诉你,将自定义的东西放到 Aggrid 单元格上是非常困难的。

首先,您可以使用属于相关Ag-grid表的GridOptions的frameworkComponents参数。

使用说明: 您有一个独立的组件,可让您在下拉元素中选择多个项目。我们将此组件命名为 MultiSelectComponent

首先,从任何类型的 Ag-grid 模块中导入 GridOptons。我正在使用企业版。

import  GridOptions, ...  from '@ag-grid-enterprise/all-modules';
import  MultiSelectComponent from './multi-select-component';

在 Component 类中,声明细节。

export class Component implements OnInit 
...
columnDefs: any;
...
gridOptions: GridOptions;
this.gridOptions = 
 frameworkComponents: 
  cellCustomComponent: MultiSelectComponent
 

在这里我们定义列和我们想要的选项。第一列定义包含我们的自定义组件。根据我的 自定义组件可以通过两种方式在 Ag-grid 上显示:

1) 可以在网格准备就绪时显示。cellRenderer一起使用。

2) 可以在点击单元格后直接显示出来进行编辑。为此,您必须将列声明为可编辑为 true。它也与cellEditorcellEditorParams 一起使用。

现在我们使用第一个选项。我的意思是,cellRenderer 一个。我也向您推荐同样的方法。

this.columnDefs = [
  
    headerName: 'Names', field: 'names',
    cellRenderer: 'cellDatePicker', pinned: 'left',
  ,
  // other columns definitions here
]

现在几乎可以在我们刚刚定义的“名称”列下的单元格内显示我们自己的自定义组件了。如果我们的自定义组件是一个日期选择器,那么它会显示为那个日期选择器。如果它是一个表情符号选择器选择器,那么它就是这样。 (例如,click the link 用于 cellEditor 和 cellRenderer)

我自己的自定义组件,datepicker:

Click resource on Aggrid site

【讨论】:

如果我的回答解决了您的问题,您可以将其标记为答案@akshay-krishna。【参考方案2】:

我会让它变得简单。我花了 2 天时间用纯 JavaScript 制作一个。您可以根据自己的 Angular 需求对其进行调整。

包括

<script type="text/javascript" src="/assets/themes/frt/vendors/custom/bootstrap-multiselect/js/bootstrap-multiselect.js"></script>
<script type="text/javascript" src="/assets/themes/frt/vendors/custom/bootstrap-multiselect/js/bootstrap-multiselect.js"></script>

风格

<style> #commentSelection  width: 100%;  .input-widget-popup  width: 250px; height: 100px;  table  width: 100%; height: 100%;  td, th  text-align: center; padding: 8px;  </style>

自定义

var selectedComments = [];

class CommentCellRenderer 
    init(params) 
        this.eGui = document.createElement('span');
        if (params.value !== "" && params.value !== undefined && params.value !== null) 
            this.eGui.innerHTML = params.value;
        
    

    getGui() 
        return this.eGui;
    


class CommentPopupCellEditor 
    init(params) 
        this.container = document.createElement('div');
        this.container.setAttribute('class', 'input-widget-popup');
        this._createTable(params);
        this.params = params;

        var commentUids = '';
        var commentNames = '';
        var rowSelectedComments = selectedComments.filter(comment => comment.rowId === params.node.id);
        for (var i = 0; i < rowSelectedComments.length; i++) 
            if (i > 0) 
                commentUids += ',';
                commentNames += ',';
            
            commentUids += rowSelectedComments[i].uid;
            commentNames += rowSelectedComments[i].name;
        
        this.selectComment(commentUids, commentNames);
    

    selectComment(commentUids, commentNames) 
        this.commentList = commentNames;

        var rowNode = gridOptions.api.getRowNode(this.params.node.id);
        rowNode.setDataValue('comment_uid', commentUids);
        rowNode.setDataValue('comment_name', commentNames);
        setTimeout(() => 
            App.autoSizeAll(gridOptions);
        , 1000);
    

    getGui() 
        return this.container;
    

    afterGuiAttached() 
        var that = this;
        $('#commentSelection').multiselect(
            buttonWidth: '100%',
            onChange: function(element, checked) 
                var x = element[0];
                var commentUid = $(x).val().toString();
                var commentName = $(x).text().toString();

                if (checked) 
                    var index = selectedComments.filter(comment => comment.rowId === that.params.node.id).map(function(e)  return e.uid; ).indexOf(commentUid);
                    if (index === -1) 
                        selectedComments.push(
                            rowId: that.params.node.id,
                            uid: commentUid,
                            name: commentName
                        );
                    
                
                else 
                    selectedComments = selectedComments.filter(comment => comment.rowId !== that.params.node.id || comment.uid !== commentUid);
                

                var commentUids = '';
                var commentNames = '';
                var rowSelectedComments = selectedComments.filter(comment => comment.rowId === that.params.node.id);
                for (var i = 0; i < rowSelectedComments.length; i++) 
                    if (i > 0) 
                        commentUids += ',';
                        commentNames += ',';
                    
                    commentUids += rowSelectedComments[i].uid;
                    commentNames += rowSelectedComments[i].name;
                
                that.selectComment(commentUids, commentNames);
            
        );
        this.container.focus();
    

    getValue() 
        return this.commentList;
    

    isPopup() 
        return true;
    

    _createTable(params) 
        this.container.innerHTML = `
  <table>
    <tr>
        <th><?php echo COMMENTS; ?></th>
    </tr>
    <tr>
        <td>
            <select id="commentSelection" multiple="multiple">
            </select>
        </td>
    </tr>
  </table>
`;
        this.commentDropdown = this.container.querySelector('#commentSelection');
        for (let i = 0; i < comments.length; i++) 
            const option = document.createElement('option');
            option.setAttribute('value', comments[i].uid.toString());
            var index = selectedComments.filter(comment => comment.rowId === params.node.id).map(function(e)  return e.uid; ).indexOf(comments[i].uid);
            if (index !== -1) 
                option.selected = true;
            
            option.innerText = comments[i].name;
            this.commentDropdown.appendChild(option);
        
    

参考

headerName: '', field: 'comment_name', editable: true, cellEditor: 'commentPopupCellEditor', cellRenderer: 'commentCellRenderer',

选项

components: 
    commentCellRenderer: CommentCellRenderer,
    commentPopupCellEditor: CommentPopupCellEditor,
,

How it looks like

【讨论】:

以上是关于请教如何获取easyui-combobox下拉菜单的多个选中值的主要内容,如果未能解决你的问题,请参考以下文章

easyui-combobox下拉菜单自动补全功能,Ajax获取远程数据源

如何能实现easyui-combobox中的值change事件?

请教Excel如何去除下拉菜单空白区域的问题,空白区域有公式。

怎么给easyui-combobox赋值

selenium下拉菜单无法选择

怎么给easyui-combobox 赋值