如果单元格不可见,如何以编程方式打开行的编辑模式?

在我的例子中,由于有大量列,单元格不可见.Here是一个可复制的示例:

import 'ag-grid-community/dist/styles/ag-grid.css';
import 'ag-grid-community/dist/styles/ag-theme-alpine.css';
import 'ag-grid-enterprise';
import { AgGridVue } from 'ag-grid-vue';
import Vue from 'vue';

const VueExample = {
  template: `
        <div style="height: 100%">
            <div class="example-wrapper">
                <div style="margin-bottom: 5px;">
                    <button style="font-size: 12px" v-on:click="onBtStartEditing()">Start Editing Line 2</button>
                    <button style="font-size: 12px" v-on:click="onBtStopEditing()">Stop Editing</button>
                </div>
                <ag-grid-vue
                
                style="width: 100%; height: 100%;"
                class="ag-theme-alpine"
                :columnDefs="columnDefs"
                @grid-ready="onGridReady"
                :defaultColDef="defaultColDef"
                :editType="editType"
                :rowData="rowData"
                @cell-value-changed="onCellValueChanged"
                @row-value-changed="onRowValueChanged"></ag-grid-vue>
            </div>
        </div>
    `,
  components: {
    'ag-grid-vue': AgGridVue,
  },
  data: function () {
    return {
      columnDefs: [
        {
          field: 'make',
          cellEditor: 'agSelectCellEditor',
          cellEditorParams: {
            values: ['Porsche', 'Toyota', 'Ford', 'AAA', 'BBB', 'CCC'],
          },
        },
        { field: 'model' },
        { field: 'field4', headerName: 'Read Only', editable: true },
        { field: 'price', cellEditor: NumericCellEditor },
        {
          headerName: 'Suppress Navigable',
          field: 'field5',
          suppressNavigable: true,
          minWidth: 200,
        },
        { headerName: 'Read Only', field: 'field6', editable: true },
      ],
      gridApi: null,
      columnApi: null,
      defaultColDef: {
        flex: 1,
        editable: true,
      },
      editType: null,
      rowData: null,
    };
  },
  created() {
    this.editType = 'fullRow';
    this.rowData = getRowData();
    for(let i = 0; i < 1000; ++i) {
      this.columnDefs.push({ headerName: 'Read Only', field: 'field6', editable: true });
    }
  },
  methods: {
    onCellValueChanged(event) {
      console.log(
        'onCellValueChanged: ' + event.colDef.field + ' = ' + event.newValue
      );
    },
    onRowValueChanged(event) {
      var data = event.data;
      console.log(
        'onRowValueChanged: (' +
          data.make +
          ', ' +
          data.model +
          ', ' +
          data.price +
          ', ' +
          data.field5 +
          ')'
      );
    },
    onBtStopEditing() {
      this.gridApi.stopEditing();
    },
    onBtStartEditing() {
      this.gridApi.setFocusedCell(1, 'make');
      this.gridApi.startEditingCell({
        rowIndex: 1,
        colKey: 'make',
      });
    },
    onGridReady(params) {
      this.gridApi = params.api;
      this.gridColumnApi = params.columnApi;
    },
  },
};

window.getRowData = function getRowData() {
  var rowData = [];
  for (var i = 0; i < 10; i++) {
    rowData.push({
      make: 'Toyota',
      model: 'Celica',
      price: 35000 + i * 1000,
      field4: 'Sample XX',
      field5: 'Sample 22',
      field6: 'Sample 23',
    });
    rowData.push({
      make: 'Ford',
      model: 'Mondeo',
      price: 32000 + i * 1000,
      field4: 'Sample YY',
      field5: 'Sample 24',
      field6: 'Sample 25',
    });
    rowData.push({
      make: 'Porsche',
      model: 'Boxster',
      price: 72000 + i * 1000,
      field4: 'Sample ZZ',
      field5: 'Sample 26',
      field6: 'Sample 27',
    });
  }
  return rowData;
};

new Vue({
  el: '#app',
  components: {
    'my-component': VueExample,
  },
});

应用程序打开后,只需滚动到表的最右边.然后单击Start Editing Line 2按钮.结果是没有任何行被传输到编辑模式.这是因为make列已从DOM中删除.

现在,刷新页面并单击Start Editing Line 2按钮,不要在任何地方滚动.结果是第二行进入编辑模式.

那么,如果不是所有单元格都可见,如何将行转换为编辑模式?一、 e.在前一种情况下,我希望Start Editing Line 2按钮继续工作.

如果单元格不可见,我宁愿不聚焦任何单元格,仍然在编辑模式下传输行.

推荐答案

您可以固定"make"列(临时或永久)

onBtStartEditing() {
  this.gridColumnApi.applyColumnState({
    state: [{ colId: 'make', pinned: 'left' }],
    defaultState: { pinned: null },
  });
  this.gridApi.setFocusedCell(1, 'make');
  this.gridApi.startEditingCell({
    rowIndex: 1,
    colKey: 'make',
  });
},

onBtStopEditing() {
  this.gridColumnApi.applyColumnState({
    state: [{ colId: 'make', pinned: null }],
    defaultState: { pinned: null },
  });
  this.gridApi.stopEditing();
},

Vue.js相关问答推荐

点击屏幕的任何位置都会禁用v-overlay

如何向 添加方法和 v-model?

为什么将 name 与 router-link 一起使用比仅使用 to 与 path 更好?

更改 Vuetify 轮播高度

如何在 vue 路由中导航到 Bootstrap-vue 选项卡中的特定选项卡?

VueJS中的绑定函数含义

如何在 Vuetify v-data-table 上对齐标题

Vue.js 中有没有类似Jquery $(document).ready的功能?

在 Vuejs 中Watch观察 window.scrollY 的变化

在 vuejs 中将旧代码修改为 vue router 4

如何在 .js 文件中使用 Vue i18n 翻译?

vuejs中通过变量动态调用方法

从 Url 中删除查询字符串参数

Vue 如何使用 slot 和 slot-props 测试组件

如何使用 TypeScript 在 Vue.js 中指定非react性实例属性?

如何从 vue-apollo 中访问 this.$route?

Vue.js 的 $emit 和 $dispatch 有什么区别?

无法访问函数内的数据属性

在 Vue 中使用事件修饰符 .prevent 提交表单而不进行重定向

Mapbox 事件监听器