# win.ui.grid 库模块帮助文档

## win.ui 成员列表 <a id="win.ui" href="#win.ui">&#x23;</a>

### win.ui.grid() <a id="win.ui.grid" href="#win.ui.grid">&#x23;</a>
参数必须指定一个 listview 控件对象。  
返回一个可编辑单元格的列表视图对象，返回对象继承了 listview 控件的所有属性与方法。  

鼠标左键单击单元格、或者按<kbd>空格键</kbd>开始编辑,  
按<kbd>回车</kbd>完成编辑,<kbd>ESC</kbd> 键撤消编辑,<kbd>回车+上下方向键</kbd>快速移动到其他项,  
用户完成编辑后会触发onEditChanged事件.  

[返回对象:listviewObject](https://www.aardio.com/zh-cn/docs/library-reference/win/ui/ctrl/listview.html#listviewObject)

[返回对象:winUiGridObject](#winUiGridObject)

## winUiGridObject 成员列表 <a id="winUiGridObject" href="#winUiGridObject">&#x23;</a>

### winUiGridObject.autoComplete() <a id="winUiGridObject.autoComplete" href="#winUiGridObject.autoComplete">&#x23;</a>
[返回对象:ComAompleteObject](#ComAompleteObject)

### winUiGridObject.autoComplete(strings) <a id="winUiGridObject.autoComplete" href="#winUiGridObject.autoComplete">&#x23;</a>
编辑器启用自动完成功能（用户自定义列表），返回 com.autoComplete 对象。  
参数 @strings 使用一个字符串数组自定义自动完成列表的数据。  
必须提前导入 com.autoComplete 库才能使用此函数。

### winUiGridObject.beginEdit(行,列) <a id="winUiGridObject.beginEdit" href="#winUiGridObject.beginEdit">&#x23;</a>
切换到编辑状态

### winUiGridObject.clear() <a id="winUiGridObject.clear" href="#winUiGridObject.clear">&#x23;</a>
清空所有行

### winUiGridObject.clear(true) <a id="winUiGridObject.clear" href="#winUiGridObject.clear">&#x23;</a>
清空所有行,并且清空所有列

### winUiGridObject.columnCount <a id="winUiGridObject.columnCount" href="#winUiGridObject.columnCount">&#x23;</a>
列总数

### winUiGridObject.columns <a id="winUiGridObject.columns" href="#winUiGridObject.columns">&#x23;</a>
读取或设置所有的列。  
值为由所有列配置信息的数组，每个列的配置也是一个数组。  
表示单个列的数组格式为 `[标题,列宽,对齐格式]`,  
写入列配置时对齐格式可省略。

### winUiGridObject.delColumn() <a id="winUiGridObject.delColumn" href="#winUiGridObject.delColumn">&#x23;</a>
删除指定列

### winUiGridObject.each(起始索引,选项) <a id="winUiGridObject.each" href="#winUiGridObject.each">&#x23;</a>

```aardio
for itemIndex in winUiGridObject.each(){
	/*遍历所有项*/
}
```

### winUiGridObject.eachSelected(col) <a id="winUiGridObject.eachSelected" href="#winUiGridObject.eachSelected">&#x23;</a>

```aardio
for item,value in winUiGridObject.eachSelected(){
	/*从后向前倒序遍历所有选中项,  
迭代变量 item 为选中项目的行号。  
迭代变量 value 为  @col 参数所指定列的文本值  
@col 参数省略则默认为1。  

也可以使用 listview 控件的 selected 属性直接返回所有已选中的行号。*/
}
```

### winUiGridObject.editBox <a id="winUiGridObject.editBox" href="#winUiGridObject.editBox">&#x23;</a>
实现编辑功能的edit控件  
此功能需要扩展listview并实现了编辑功能的的控件才能支持  

[返回对象:editObject](https://www.aardio.com/zh-cn/docs/library-reference/win/ui/ctrl/edit.html#editObject)

### winUiGridObject.getColumnText() <a id="winUiGridObject.getColumnText" href="#winUiGridObject.getColumnText">&#x23;</a>
取指定列文本

### winUiGridObject.getItemData(行序号) <a id="winUiGridObject.getItemData" href="#winUiGridObject.getItemData">&#x23;</a>
获取指定行绑定的数据。  
可用 setItemData 方法绑定数据到指定行。  
 setTable 方法也会自动绑定源数据表。

### winUiGridObject.getItemText(行,列,缓冲区长度) <a id="winUiGridObject.getItemText" href="#winUiGridObject.getItemText">&#x23;</a>
返回指定项指定列文本，列默认值为1,  
如果列指定为-1，则返回一个包含所有列文本的数组,  
缓冲区最大字符数默认为520,  
不指定行序号则默认取当前选中焦点行,  
不指定列则默认设为 1

### winUiGridObject.getSelected(项索引) <a id="winUiGridObject.getSelected" href="#winUiGridObject.getSelected">&#x23;</a>
指定项是否选中状态

### winUiGridObject.getTable() <a id="winUiGridObject.getTable" href="#winUiGridObject.getTable">&#x23;</a>
返回数据表。  
如果参数 @1 指定列名数组（被复制为返回表的 fields 字段），  
则返回的每行数据都是名值对，否则返回的每行数据都是文本数组。  

如果参数 @1 为 true，则返回的文本数组第一行为列标题文本数组。

### winUiGridObject.selected <a id="winUiGridObject.selected" href="#winUiGridObject.selected">&#x23;</a>
获取或设置所有选中项，这是包含所有选中的项目行索引的数组。  
设为 null 或空表清除所有选中项。  

也可以使用 eachSelected 方法创建迭代器并且 for in 循环遍历所有选中项。

### winUiGridObject.sendNotify(code,row,col) <a id="winUiGridObject.sendNotify" href="#winUiGridObject.sendNotify">&#x23;</a>
发送 _WM_NOTIFY 消息。  
参数 @code 指定 _LVN_ 前缀的通知代码。  
参数 @row 指定行号，起始行为 1，0 表示列标题。  
参数 @col 指定列号，起始列为 1。

### winUiGridObject.setColumn({cx=100},列序号) <a id="winUiGridObject.setColumn" href="#winUiGridObject.setColumn">&#x23;</a>
改变列宽，参数@1必须是个表对象

### winUiGridObject.setColumn(列参数表,列序号) <a id="winUiGridObject.setColumn" href="#winUiGridObject.setColumn">&#x23;</a>
参数一指定 wLVCOLUMN 结构体成员键值的参数表,  
也可以是LVCOLUMN结构体对象,自动设置掩码参数.

### winUiGridObject.setColumnText(位置,文本) <a id="winUiGridObject.setColumnText" href="#winUiGridObject.setColumnText">&#x23;</a>
设置指定列文本

### winUiGridObject.setColumnWidth(列宽,列序号,...) <a id="winUiGridObject.setColumnWidth" href="#winUiGridObject.setColumnWidth">&#x23;</a>
设置列宽，可指定一个或多个列序号。  
这里不能指定宽度为  -1 。

### winUiGridObject.setColumns() <a id="winUiGridObject.setColumns" href="#winUiGridObject.setColumns">&#x23;</a>
用一个字符串数组指定要显示的列  
如果参数为空则清空所有列

### winUiGridObject.setItemData(行序号,数据) <a id="winUiGridObject.setItemData" href="#winUiGridObject.setItemData">&#x23;</a>
绑定数据到指定行。  
数据仅与行号关联，与具体的列表项无关。  
删除或改变列表项不会修改绑定的数据表。  
但清空控件，设置 items 属性都会清除关联的数据表，  
调用 setTable 方法也会绑定新的源数据表。

### winUiGridObject.setItemText(文本,行,列) <a id="winUiGridObject.setItemText" href="#winUiGridObject.setItemText">&#x23;</a>
设置项目指定列文本,  
参数一也可是指定多列文本的数组  
设置的文本如果不是指针或空值则自动转换为字符串,  
不指定行序号则默认取当前选中焦点行,  
不指定列则默认设为1

### winUiGridObject.setReadonlyColumns() <a id="winUiGridObject.setReadonlyColumns" href="#winUiGridObject.setReadonlyColumns">&#x23;</a>
可以使用一个或多个参数指定要禁止编辑的列序号，  
也可以用一个数组参数指定多个列序号。  

如果参数为 -1，则禁止编辑所有列

### winUiGridObject.setSelected(项索引) <a id="winUiGridObject.setSelected" href="#winUiGridObject.setSelected">&#x23;</a>
选中项,注意是选中列表项而不是勾选复选框

### winUiGridObject.setSelected(项索引,false) <a id="winUiGridObject.setSelected" href="#winUiGridObject.setSelected">&#x23;</a>
取消选中项,注意是选中而不是勾选复选框

### winUiGridObject.setTable <a id="winUiGridObject.setTable" href="#winUiGridObject.setTable">&#x23;</a>
用 listview 控件显示数据表（包含名值对的对象或数组组成的数组）。  
此函数会自动清空控件之前的所有项。  
如果没有创建任何列，则自动创建标题列。  
如果要重新创建列，请先调用 clear 函数并指定参数为 true 以清空原来的列。

### winUiGridObject.setTable(dataTable) <a id="winUiGridObject.setTable" href="#winUiGridObject.setTable">&#x23;</a>
参数 @dataTable 指定要加载的数据表。  
数据表应当包含行组成的数组。  
数据行可以是数组，也可以是名值，值用 tostring 转为文本显示。  
可选通过数据表的 fields 字段指定要显示的索引数组（键名或索引数值）。  

如果视图控件的标题列为空，则用显示键名（或数组值）创建标题列。  
如果数据行为数组，第一行填充到标题列以后，默认从第二行加载数据。  

可用 startIndex 属性或元属性自定义要加载的起始行。  
可用 length 属性自定义要加载的行数，默认加载所有行。  

sqlite,access,sqlServer 等数据库对象，  
提供的 getTable 函数可获取通过 fields 字段指定列名数组的数据表。

### winUiGridObject.sortColumn(col,desc) <a id="winUiGridObject.sortColumn" href="#winUiGridObject.sortColumn">&#x23;</a>
排序指定列（触发排序回调函数 onSortColumn ）。  
参数 @col 指定列号，起始列为 1。  
可选参数 @desc 指定是否倒序。

## winUiGridObject 事件列表 <a id="winUiGridObjectEvent" href="#winUiGridObjectEvent">&#x23;</a>

### winUiGridObject.onCheckedChanged <a id="winUiGridObject.onCheckedChanged" href="#winUiGridObject.onCheckedChanged">&#x23;</a>

```aardio
winUiGridObject.onCheckedChanged = function(checked,item){
	/*勾选状态变更触发此事件。  
checked 为是否勾选，item 为变更项序号*/
}
```

### winUiGridObject.onClick <a id="winUiGridObject.onClick" href="#winUiGridObject.onClick">&#x23;</a>

```aardio
winUiGridObject.onClick = functionitem,subItem,nmListView){
	/*左键单击项目触发此事件。  
item 为变更为焦点的项序号，subItem 为列序号，nmListView 为 NMLISTVIEW 结构体*/
}
```

### winUiGridObject.onDoubleClick <a id="winUiGridObject.onDoubleClick" href="#winUiGridObject.onDoubleClick">&#x23;</a>

```aardio
winUiGridObject.onDoubleClick = function(item,subItem,nmListView){
	/*左键双击项目触发此事件。  
item 为变更为焦点的项序号，subItem 为列序号，nmListView 为 NMLISTVIEW 结构体*/
}
```

### winUiGridObject.onEditBegin(iItem,iSubItem) <a id="winUiGridObject.onEditBegin" href="#winUiGridObject.onEditBegin">&#x23;</a>

```aardio
winUiGridObject.onEditBegin = function(iItem,iSubItem){
	/*列表项切换到编辑框模式*/
}
```

### winUiGridObject.onEditChanged(text,iItem,iSubItem) <a id="winUiGridObject.onEditChanged" href="#winUiGridObject.onEditChanged">&#x23;</a>

```aardio
winUiGridObject.onEditChanged = function(text,iItem,iSubItem){
	/*编辑框文本已变更（并已隐藏），  
正在准备更新列表项，返回 false 可阻止将编辑框文本更新到列表项中。  
text 为改变后的文本,iItem 为行号,iSubItem 为列号  
此功能需要扩展 listview 并实现了编辑功能的的控件才能支持*/
}
```

### winUiGridObject.onEditEnd(iItem,iSubItem) <a id="winUiGridObject.onEditEnd" href="#winUiGridObject.onEditEnd">&#x23;</a>

```aardio
winUiGridObject.onEditChanged = function(iItem,iSubItem){
	/*列表项已完成编辑，此事件在 onEditChanged 后触发。  
如果 onEditChanged 事件返回 false（阻止了更新），则会跳过 onEditEnd 事件。*/
}
```

### winUiGridObject.onFocusedChanged <a id="winUiGridObject.onFocusedChanged" href="#winUiGridObject.onFocusedChanged">&#x23;</a>

```aardio
winUiGridObject.onFocusedChanged = function(item,subItem,nmListView){
	/*焦点项变更触发此事件。  
item 为变更为焦点的项序号，subItem 为列序号，nmListView 为 NMLISTVIEW 结构体*/
}
```

### winUiGridObject.onGetDispItem <a id="winUiGridObject.onGetDispItem" href="#winUiGridObject.onGetDispItem">&#x23;</a>

```aardio
winUiGridObject.onGetDispItem = function(item,row,col){
	/*处理 _LVN_GETDISPINFOW 通知消息  
参数 @item 为 LVITEM 结构体,@row 为当前行号,@col 为当前列号,  
返回 item 或包含 item 部分字段则更新 LVITEM 结构体*/
	return {text="要显示的文本"}; 
}
```

### winUiGridObject.onItemChanged <a id="winUiGridObject.onItemChanged" href="#winUiGridObject.onItemChanged">&#x23;</a>

```aardio
winUiGridObject.onItemChanged = function(item,subItem,nmListView){
	/*项目变更触发此事件。  
item 为变更为焦点的项序号，subItem 为列序号，nmListView 为 NMLISTVIEW 结构体*/
}
```

### winUiGridObject.onRightClick <a id="winUiGridObject.onRightClick" href="#winUiGridObject.onRightClick">&#x23;</a>

```aardio
winUiGridObject.onRightClick = function(item,subItem,nmListView){
	/*右键点击项目触发此事件。  
item 为变更为焦点的项序号，subItem 为列序号，nmListView 为 NMLISTVIEW 结构体*/
}
```

### winUiGridObject.onSelChanged <a id="winUiGridObject.onSelChanged" href="#winUiGridObject.onSelChanged">&#x23;</a>

```aardio
winUiGridObject.onSelChanged = function(selected,item,subItem,nmListView){
	/*选中项更触发此事件。  
selected 为是否选中，item 为变更项序号，  
subItem 为列序号，nmListView 为 NMLISTVIEW 结构体*/
}
```

### winUiGridObject.onSortColumn(column,desc) <a id="winUiGridObject.onSortColumn" href="#winUiGridObject.onSortColumn">&#x23;</a>

```aardio
winUiGridObject.onSortColumn = function(column,desc){
	/*点击列排序时回调此函数  
@column参数为列序号，1为首列，@desc参数指定是否倒序  
返回true排序，否则不排序*/
	return true;
}
```

