列表 DataGrid
1.说明
展示行列数据。
加载数据方式有两种一种是传url,另一种为手动传数据.
手动传数据,那么就要设置 pageIndex,pageSize,total,data这四个字段,以及绑定updateHandler这个事件来更新数据
何时使用
当有大量结构化的数据需要展现时;
当需要对数据进行排序、搜索、分页、自定义操作等复杂行为时。
2.API
| 属性名称 | 数据类型 | 是否必填 | 默认值 | 回传参数 | 说明 |
|---|---|---|---|---|---|
| width | number,string | 否 | null | 空 | 宽度 |
| height | number,string | 否 | null | 空 | 高度 |
| selectAble | bool | 否 | false | 空 | 是否显示选择 |
| singleSelect | bool | 否 | false | 空 | 是否单选 |
| detailAble | bool | 否 | false | 空 | 是否显示详情 |
| focusAble | bool | 否 | true | 空 | 是否显示焦点行 |
| moveAble | bool | 否 | true | 空 | 鼠标经过表格是否标记当前行 |
| editAble | bool | 否 | false | 空 | 双击是否允许编辑 |
| borderAble | bool | 否 | false | 空 | 是否显示表格边框 |
| clearChecked | bool | 否 | true | 空 | 刷新数据时是否清除之前的选择 |
| selectChecked | bool | 否 | null | 空 | 选择行的时候是否同时选中 |
| selectAbleTextField | string | 否 | "" | 空 | 当前行是否支持选择的判断依据的字段名,通过当前行数据的具体情况,判断列表行头是否可选择(selectAble==true时) |
| selectAbleValueField | string | 否 | "" | 空 | 当前行是否支持选择的判断依据的值,selectAbleTextField==selectAbleValueField时,当前行可支持选择 |
| pagination | bool | 否 | true | 空 | 是否分页 |
| pageIndex | number | 否 | 1 | 空 | 当前页号 |
| pageSize | number | 否 | 20 | 空 | 分页大小 |
| sortName | string | 否 | id | 空 | 排序字段 |
| sortOrder | enum | 否 | asc | 空 | 排序方式,asc,desc |
| keyField | string | 否 | id | 空 | 关键字段 |
| headers | HeaderModel Array | 否 | null | 空 | 表头设置 |
| footer | FooterModel的Array | 否 | null | 空 | 页脚的统计 |
| total | number | 否 | 0 | 空 | 总条目数(有url,这个没用) |
| data | Array | 否 | null | 空 | 当前页数据,(有url,这个没用) |
| url | string | 否 | null | 空 | ajax地址 |
| dataSource | string | 否 | null | data | ajax的返回的数据中哪个属性作为数据源 |
| footerSource | string | footer | null | 空 | ajax的返回的数据中哪个属性作为页脚 |
| totalSource | string | 否 | null | total | ajax的返回的数据中哪个属性作为总记录 |
| params | Object | 否 | null | 空 | 查询条件,注意在参数相同的情况下组件是不会重新查询数据的,目的是为了防止父组件任何状态值改变导致频繁渲染,如果需要刷新要么直接点击组件本身的刷新图标,要么通过调用reload只读方法 |
| onClick | string | 否 | null | rowIndex,rowData | 单击事件 |
| onDoubleClick | string | 否 | null | rowIndex,rowData, | 双击事件 |
| onChecked | string | 否 | null | checkedData | 监听表格中某一行被选中/取消 |
| updateHandler | func | 否 | null | pageSize, pageIndex, sortName, sortOrder | 页面更新事件,有url这个没用 |
| detailHandler | func | 否 | 空 | rowData | 展示详情的函数,父组件一定要有返回值,返回详情组件 |
| pasteUrl | string | 否 | null | 空 | 当粘贴时,向后台请求的地址 |
| pasteParamsHandler | string | 否 | null | data(粘贴的数据) | 当粘贴时,向后台请求时的参数处理函数 |
| headerUrl | string | 否 | null | 空 | 向后台请求列的数据,将会与headers表头合并 |
| defaultHeaderUrl | string | 否 | null | 空 | 如果headerUrl查询无数据(OMS权限问题),则会再请求defaultHeaderUrl,然后与headers表头合并 |
| updateUrl | string | 否 | null | 空 | 表格列编辑后的提交地址,第一列青羊会自动显示保存按钮,在editAble为true,双击其他行则自动保存当前编辑的行 |
| draggable | bool | 否 | false | 空 | 是否允许拖拽 |
| dropEnd | func | 否 | null | data | 拖拽结束后的回调函数 |
只读属性
| 方法名 | 参数名 | 参数说明 | 返回值类型 | 说明 |
|---|---|---|---|---|
| reload | params,url | 查询条件 | 空 | 按条件查询数据,参数为空则刷新数据,url不空时则以新的url作为请求地址 |
| clearData | 空 | 空 | null | 清空数据 |
| getFocusIndex | 空 | 空 | focusIndex | 获取当前行下标 |
| getFocusRowData | 空 | 空 | rowData | 获取当前行数据 |
| getChecked | 空 | 空 | checkedData | 获取所有选择的行 |
| getFooterData | 空 | 空 | checkedData | 获取得页脚的统计值 |
| addRow | rowData,editAble | 空 | null | 新增一条数据,editAble为true表示插入后是否处理可编辑状态 |
| deleteRow | rowIndex | 空 | null | 删除指定行数据 |
| editRow | rowIndex | 空 | null | 让指定行处于编辑状态 |
| updateRow | rowIndex,rowData | 空 | null | 更新某一行数据 |
| getAddData | 空 | 空 | addData | 获取新增的数据 |
| getDeleteData | 空 | 空 | deleteData | 获取删除的数据 |
| getUpdateData | 空 | 空 | updatedData | 获取更新的数据,包括使用updateData更新的数据及列表内编辑过的数据但因为没有updateUrl提交到后台的数据 |
| clearDirtyData | 空 | 空 | addData | 清除脏数据,增,删,改的数据的记录清除,并不是还原列表的data1 |
| setHeaderTable | 空 | 空 | 空 | 打开设置表头的弹出层 |
2.代码演示

/**
* Created by ZhiRongYuan on 17/6/5.
*/
let React =require( "react");
let ReactDOM=require("react-dom");
let wasabi=require("wasabiD");
let DataGrid=wasabi.DataGrid;
let Button=wasabi.Button;
let HeaderModel=wasabi.HeaderModel
var alogUtil = require("../libs/alogUtil.js");
class Demo extends React.Component {
constructor(props) {
super(props);
this.setHeaderHandler = this.setHeaderHandler.bind(this);
this.detailHandler = this.detailHandler.bind(this);
this.onChecked = this.onChecked.bind(this);
}
setHeaderHandler(){
this.refs.datagrid.setHeaderTable();
}
detailHandler(currentData){
return (
<div>
展开详情...
</div>
)
}
headerModelInit(){
return [
new HeaderModel("orderCode","订单ID",(rowData,rowIndex)=>{
return <div className="ellipsis">{rowData.orderCode}</div>
}),
new HeaderModel("sourceOrderCode","原订单号"),
new HeaderModel("wayBillNo","快递单号"),
new HeaderModel("orderSourceName","订单来源"),
new HeaderModel("control","操作",(rowData,rowIndex)=>{
return <a>编辑</a>
},false,false,null,"fixedRight")
];
}
onChecked(data) {//监听表格中某一行被选中/取消
}
render(){
var url = alogUtil.orderUrl() + "/sell-portal/saleorder/querySO.htm"+alogUtil.getOMSParams();
var headerUrl=alogUtil.orderUrl()+"/boss/operator/queryCustomHeader.htm"+alogUtil.getOMSParams()+"&targetUrl=/sell-portal/saleorder/querySO.htm";
var updateUrl=alogUtil.orderUrl()+"/boss/operator/updateCustomHeader.htm"+alogUtil.getOMSParams();
var defaultHeaderUrl=alogUtil.orderUrl()+"/boss/operator/queryDefaultHeader.htm"+alogUtil.getOMSParams()+"&targetUrl=/sell-portal/saleorder/querySO.htm";
return (
<div>
<Button name="set" title="设置表头" theme="green" onClick={this.setHeaderHandler}/>
<DataGrid ref="datagrid" selectAble={true} onChecked={this.onChecked} updateUrl={updateUrl} headerUrl={headerUrl} defaultHeaderUrl={defaultHeaderUrl} headers={this.headerModelInit()} url={url} detailAble={true} detailHandler={this.detailHandler}/>
</div>
)
}
}
ReactDOM.render(<Demo/>,document.getElementById("root"));