diff --git a/lib/ui/grid/grid.js b/lib/ui/grid/grid.js index 222328b..4862c8a 100644 --- a/lib/ui/grid/grid.js +++ b/lib/ui/grid/grid.js @@ -379,6 +379,7 @@ class GridColumnDefinition { /** * 大于 0 则设置为该宽度,否则根据列内容自动调整列宽 * @type {number} + * @default 50 * @ignore */ width; @@ -750,6 +751,7 @@ const GridColumnDirection = { * @property {string} [langs.requirePrompt=All sort criteria must have...] * @property {string} [langs.duplicatePrompt={column} is being sorted more than once...] * @property {number} [virtualCount=100] - 行数大于等于该值则启用虚模式 + * @property {boolean} [autoResize=true] - 未设置宽度的列自动调整列宽 * @property {number} [rowHeight=36] - 表格行高 * @property {number} [lineHeight=24] - 文本行高(多行文本列计算高度时使用) * @property {string} [filterIcon=filter] - 列头过滤图标,旧版本样式(横着三个点)需修改为 `"ellipsis-h"` @@ -1151,6 +1153,13 @@ export class Grid { * @ignore */ virtualCount = 100; + /** + * 未设置宽度的列自动调整列宽 + * @type {boolean} + * @default true + * @ignore + */ + autoResize = true; /** * 表格行高 * @type {number} @@ -1431,9 +1440,6 @@ export class Grid { */ get source() { return this._var.currentSource?.map(s => s.values) } set source(list) { - if (this._var.el == null) { - throw new Error('grid has not been initialized.') - } if (!Array.isArray(list)) { throw new Error('source is not an Array.') } @@ -1664,7 +1670,7 @@ export class Grid { this._var.scrollLeft = 0; this._var.rowCount = -1; - this.resize(true, null, () => { + this.resize(true, false, () => { if (this.sortIndex >= 0) { this.sortColumn(true); } else if (this.sortArray?.length > 0) { @@ -1865,7 +1871,7 @@ export class Grid { if (parent == null) { return; } - const rowIndex = parent.classList.contains('ui-grid-total-row') ? -1 : indexOfParent(parent); + const rowIndex = parent.classList.contains('ui-grid-total-row') ? -1 : this._tableRows.indexOf(parent); let colIndex = indexOfParent(target) - (this.expandable ? 1 : 0); if (colIndex >= this.columns.length) { colIndex = -1; @@ -1921,7 +1927,7 @@ export class Grid { } else if (this.sortArray?.length > 0) { this.sort(true); } else { - this.reload(); + this.resize(true, true); } } } @@ -1955,7 +1961,7 @@ export class Grid { return; } const body = this._var.refs.body; - const top = this.headerVisible === false ? 0 : this._var.refs.header.offsetHeight; + const top = this.headerVisible === false ? 0 : this.rowHeight; // this._var.refs.header.offsetHeight; let height = this.height; if (height === 0) { @@ -2061,10 +2067,10 @@ export class Grid { } }); } else { - const children = this._var.refs.table.children; - this._var.headerHeight = children[0].offsetHeight; - if (children.length > 2) { - this._var.footerHeight = children[2].offsetHeight; + // const children = this._var.refs.table.children; + this._var.headerHeight = this.rowHeight; // children[0].offsetHeight; + if (this.total != null) { + this._var.footerHeight = this._var.refs.table.children[2].offsetHeight; } } } @@ -2469,8 +2475,11 @@ export class Grid { type ??= GridColumn; this._var.colTypes[col.key] = type; } - if (col.width > 0 || col.shrink || typeof type.createCaption === 'function') { + if (col.width > 0 || col.shrink || !this.autoResize || typeof type.createCaption === 'function') { // col.autoResize = false; + if (isNaN(col.width) || col.width <= 0) { + col.width = 50; + } } else { this._set(col.key, 'autoResize', true); this._var.needResize = true; @@ -3060,7 +3069,7 @@ export class Grid { } } // footer - const children = this._var.refs.table.children; + // const children = this._var.refs.table.children; const hasTotal = this.total != null; if (hasTotal) { const footerCells = this._footerCells; @@ -3080,9 +3089,9 @@ export class Grid { } } } - this._var.headerHeight = children[0].offsetHeight; + this._var.headerHeight = this.rowHeight; // children[0].offsetHeight; if (hasTotal) { - this._var.footerHeight = children[2].offsetHeight; + this._var.footerHeight = this._var.refs.table.children[2].offsetHeight; const footerOffset = this._var.refs.table.offsetHeight - this._var.el.clientHeight; if (this._var.footerOffset !== footerOffset) { this._var.footerOffset = footerOffset;