【问题标题】:How to get selected row in slickgrid from outside slickgrid event如何从外部 slickgrid 事件中获取 slickgrid 中的选定行
【发布时间】:2022-01-09 11:36:52
【问题描述】:

我在 slickgrid 中的行主要使用箭头键选择(突出显示),但允许鼠标选择。我在 slickgrid 之外有一个按钮,按下该按钮时,将获取 slickgrid 中突出显示(选择)的行。进行选择(突出显示)后(例如 grid.onClick、grid.onKeyDown 等)在 slickgrid 中没有发生任何事件,所以我不知道如何找到突出显示(选择)的行,特别是在单击时一个按钮。可以以编程方式将事件生成到 slickgrid 中来执行此操作吗?任何帮助将不胜感激。

【问题讨论】:

    标签: row slickgrid


    【解决方案1】:

    我只能假设您没有使用 slick.checkboxselectcolumnslick.rowselectionmodel.js 的专用插件,并且您可以看到此 Example 并且从中您将可以访问 onSelectedRowsChanged 事件,如果您选择使其单击,然后单击行上的任意位置将触发事件(但是,如果您使用多行选择,则它将仅从左列复选框触发)

    import '../plugins/slick.checkboxselectcolumn.js';
    import '../plugins/slick.rowselectionmodel.js';
    
    grid = new Slick.Grid("#myGrid", data, columns, options);
    grid.setSelectionModel(new Slick.RowSelectionModel({selectActiveRow: false}));
    grid.registerPlugin(checkboxSelector2);
    
    grid.onSelectedRowsChanged.subscribe(function (e, args) {
      // debugging to see the active row in response to questions
      // active row has no correlation to the selected rows
      // it will remain null until a row is clicked and made active
      // selecting and deselecting rows via checkboxes will not change the active row
      var rtn = args.grid.getActiveCell();
      var x = args.rows;
    });
    

    从行索引中,有多种方法可以检索关联的项目对象,在我的情况下,我使用 SlickGrid DataView 并使用以下方法检索它

    for (const row of args.rows) {
      const itemObj = dataView.getItem(row);
      // do something
    }
    

    在 SlickGrid 和 DataView 中有多种不同行为的方法

    // -- DataView --//
    /** Get DataView item at specific index */
    getItem(index: number) => any;
    
    /** Get an item in the DataView by its Id */
    getItemById(id: string | number) => any | null;
    
    /** Get an item in the DataView by its row index */
    getItemByIdx(idx: number) => any;
    
    /** Get row index in the DataView by its Id */
    getIdxById(id: string | number): number | undefined;
    
    // -- SlickGrid --//
    /**
     * Returns the databinding item at a given position.
     * @param index Item row index.
     */
    getDataItem(rowIndex: number): any;
    

    【讨论】:

    • 我找到了部分解决方案。当按下箭头键时,我拉事件然后获取行。问题是因为 slcikgrid 已经对其进行了排序,所以突出显示的行与数据库中的“真实”行不对应。我通过在数据库中搜索正确的数据解决了这个问题,虽然有些复杂且效率低下,但它确实有效。我说的是部分解决方案,因为当数据首次加载到 slickgrid 并突出显示顶行时,我无法获得与顶部突出显示的行相对应的“真实”数据。但我会尝试你的解决方案。
    • 更新答案并提供更多选项供您尝试,我是 SlickGrid DataView 的大佬,也是我使用的,还有更多可用的方法,您应该可以使用dataView.getItem(row);
    • 我使用了 Slickgrid,因为它似乎有一些不错的功能,但我永远无法让 dataView 正常工作。对于这个项目,网格很重要,但只是很小的一部分,我不认为我可以抽出时间来弄清楚所有事情。我有一个用于数据的多维数组(数组数组),并且来自 C、VB 和 dBase 编程,我发现 dataView 难以实现,并且找不到太多文档。
    • 是的,SlickGrid 和 DataView 不太支持不是对象数组的数据,其中列作为对象属性。有什么方法可以将您的数据转换为那种形式?
    猜你喜欢
    • 2011-12-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-11-24
    • 2023-03-23
    相关资源
    最近更新 更多