import { GridColumnDefinition } from "./column" /** 列数据接口 */ export interface GridItem { /** 值 */ Value: any; /** 显示值 */ DisplayValue: string; } /** 列数据行包装接口 */ export interface GridItemWrapper { /** 真实数据对象 */ values: { [key: string]: GridItem | any }; /** 下拉数据源缓存对象 */ source: { [key: string]: Array }; } /** 下拉框列数据源接口 */ export interface GridSourceItem { /** 值 */ value: string; /** 显示文本 */ text: string; } /** 列排序枚举 */ interface GridColumnDirection { /** 倒序 */ [-1]: Number, /** 升序 */ 1: Number } /** 列事件枚举 */ interface GridColumnColumnEventMap { /** 重排事件 */ "reorder": string, /** 宽调整事件 */ "resize": string, /** 排序事件 */ "sort": string } /** Grid 控件基础类 */ export class Grid { /** 列类型枚举 */ static ColumnTypes: { /** 通用列(只读) */ Common: 0, /** 单行文本列 */ Input: 1, /** 下拉选择列 */ Dropdown: 2, /** 复选框列 */ Checkbox: 3, /** 图标列 */ Icon: 4, /** 多行文本列 */ Text: 5, /** 日期选择列 */ Date: 6, /** * 判断列是否为复选框列 * @param type 列类型 */ isCheckbox(type: Number): boolean; }; /** 列定义的数组 */ columns: Array; /** 多语言资源对象 */ langs?: { all: string, ok: string, reset: string }; /** 行数大于等于该值则启用虚模式,默认值 100 */ virtualCount?: Number; /** 表格行高,默认值 36 */ rowHeight?: Number; /** 文本行高,默认值 24 */ lineHeight?: Number; /** 列表底部留出额外行的空白,默认值 0 */ extraRows?: Number; /** 过滤条件列表的行高,默认值 30 */ filterRowHeight?: Number; /** 列表高度值,为 0 时列表始终显示全部内容(自增高),为非数字或者小于 0 则根据容器高度来确定虚模式的渲染行数,默认值 null */ height?: Number; /** 列表是否为只读,默认值 false */ readonly?: boolean; /** 是否允许多选,默认值 false */ multiSelect?: boolean; /** 为 false 时只有点击在单元格内才会选中行,默认值 true */ fullrowClick?: boolean; /** 单元格 tooltip 是否禁用,默认值 false */ tooltipDisabled?: boolean; /** 列头是否显示,默认值 true */ headerVisible?: boolean; /** 监听事件的窗口载体,默认值 window */ window?: Window /** 排序列的索引,默认值 -1 */ sortIndex?: Number; /** 排序方式,正数升序,负数倒序,默认值 1 */ sortDirection?: keyof GridColumnDirection; /** * Grid 控件构造函数 * @param container Grid 控件所在的父容器,可以是 string 表示选择器,也可以是 HTMLElement 对象

* 构造时可以不进行赋值,但是调用 init 函数时则必须进行赋值 * @param getText (可选参数)获取多语言文本的函数代理 */ constructor(container: string | HTMLElement, getText?: (id: string, def?: string) => string); /** * 即将选中行时触发,返回 false、null、undefined、0 等则取消选中动作 * @param index 即将选中的行索引 * @param colIndex 即将选中的列索引 */ willSelect?: (index: Number, colIndex: Number) => boolean; /** * 单元格单击时触发,colIndex 为 -1 则表示点击的是行的空白处,返回 false 则取消事件冒泡 * @param index 点击的行索引 * @param colIndex 点击的列索引 */ cellClicked?: (index: Number, colIndex: Number) => boolean; /** * 选中行发生变化时触发的事件 * @param index 选中的行索引 */ onSelectedRowChanged?: (index?: Number) => void; /** * 单元格双击时触发的事件,colIndex 为 -1 则表示点击的是行的空白处 * @param index 双击的行索引 * @param colIndex 双击的列索引 */ onCellDblClicked?: (index: Number, colIndex: Number) => void; /** * 行双击时触发的事件 * @param index 双击的行索引 */ onRowDblClicked?: (index: Number) => void; /** * 列发生变化时触发的事件 * @param type 事件类型

* "reorder" 为发生列重排事件,此时 value 为目标列索引
* "resize" 为发生列宽调整事件,此时 value 为列宽度值
* "sort" 为发生列排序事件,此时 value 为 1(升序)或 -1(倒序) * @param colIndex 发生变化事件的列索引 * @param value 变化的值 */ onColumnChanged?: (type: keyof GridColumnColumnEventMap, colIndex: Number, value: Number | keyof GridColumnDirection) => void; /** * 列滚动时触发的事件 * @param e 滚动事件对象 */ onBodyScrolled?: (e: Event) => void; /** 获取数据数组 */ get source(): Array; /** 设置数据,并刷新列表 */ set source(list: Array); /** 获取当前选中的行索引的数组 */ get selectedIndexes(): Array; /** 设置当前选中的行索引的数组,并刷新列表 */ set selectedIndexes(indexes: Array); /** 获取 Grid 当前是否处于加载状态 */ get loading(): boolean; /** 使 Grid 进入加载状态 */ set loading(flag: boolean); /** 获取 Grid 当前滚动的偏移量 */ get scrollTop(): Number; /** 设置 Grid 滚动偏移量 */ set scrollTop(top: Number); /** 获取 Grid 的页面元素 */ get element(): HTMLElement; /** 获取当前 Grid 是否已发生改变 */ get changed(): boolean; /** 获取当前是否为虚模式状态 */ get virtual(): boolean; /** 获取当前排序的列关键字,为 null 则当前无排序列 */ get sortKey(): string | undefined; /** 获取当前选中行的索引,为 -1 则当前没有选中行 */ get selectedIndex(): Number | -1; /** * 初始化Grid控件 * @param container 父容器元素,若未传值则采用构造方法中传入的父容器元素 */ init(container?: HTMLElement): void; /** * 设置数据列表,该方法为 set source 属性的语法糖 * @param source 待设置的数据列表 */ setData(source: Array): void; /** * 设置单行数据 * @param index 行索引 * @param item 待设置的行数据值 */ setItem(index: Number, item: GridItem | any): void; /** * 添加行数据 * @param item 待添加的行数据值 * @param index 待添加的行索引 */ addItem(item: GridItem | any, index?: Number): void; /** * 删除行数据 * @param index 待删除的行索引 */ removeItem(index: Number): void; /** * 滚动到指定行的位置 * @param index 待滚动至的行索引 */ scrollToIndex(index: Number): void; /** * 调整 Grid 元素的大小,一般需要在宽度变化时(如页面大小发生变化时)调用 * @param force 是否强制reload,默认只有待渲染的行数发生变化时才会调用reload * @param keep 是否保持当前滚动位置 */ resize(force?: boolean, keep?: boolean): void; /** * 重新计算需要渲染的行,并载入元素,一般需要在高度变化时调用 * @param keep 是否保持当前滚动位置 */ reload(keep?: boolean): void; /** * 重新填充Grid单元格数据 */ refresh(): void; /** * 把所有行重置为未修改的状态 */ resetChange(): void; /** * 根据当前排序字段进行列排序 * @param reload 为 true 则在列排序后调用 reload 方法 */ sortColumn(reload?: boolean): void; /** * 清除列头复选框的选中状态 */ clearHeaderCheckbox(): void; }