Copyright © 1999-2020, CSDNNET, All Rights Reserved
打开APP
Tianya_追心
关注
jgGrid实现 左移、右移、上移、下移 转载
2018-06-21 15:52:05
1点赞
Tianya_追心
码龄10年
关注
摘要:
最近在项目需求中通过jqGrid实现表格中的数据:左移、右移、上移、下移和置顶 等 *** 作。
下面记录实现的方法。
1
2
3
下面是代码片段:
右移(其实就是向一个grid容器中插入一行数据):
//这个方法是获取ztree节点内容,插入到grid表中
function BindBtnRightMethod() {
//获取ztree对象
var zTreeObj = $fnzTreegetZTreeObj("ztreeId");
//获取光标选中的tree节点
var selectedNodes = zTreeObjgetSelectedNodes();
if (selectedNodeslength == 0) {
$modalAlert(" *** 作失败!未选中节点。");
return; } else {
//新增一行
var data = { KSID:"10", FLKSID:"101", KSMC: "消化科" };
addRowDataByGridElementId("jqGridId", data); }}
//摘要://内容:向grid表中添加一行记录
function addRowDataByGridElementId(id, data) {
//获取当前grid中的表ID集合
var jqGrid = $('#' + id); var IDs = jqGridgetDataIDs();
//定义标量,记录IDs中的rowid的最大值
var maxId = 0; if (IDslength > 0) {
for (var i = 0; i < IDslength; i++) {
var tmpId = jqGridgetInd(IDs[i]);
if (maxId < tmpId) {
maxId = tmpId;
} } }
//这里是在给新增的rowid自定义一个有序值
var rowid= maxId + 1;
//执行新增 *** 作
jqGridaddRowData(rowid, data, rowid);
}
左移(其实是从grid表中删除一行):
//摘要://内容:按钮左移
function BindBtnLeftMethod() {
//删除选中行
var rowid = $("#jqGridId")jqGrid('getGridParam', 'selrow');
if (rowid == "" || rowid == undefined || rowid == null) {
$modalAlert("移除行未选中!");
return; } else {
var flag = $("#jqGridId")jqGrid("delRowData", rowid);
if (!flag) {
$modalAlert("移除 *** 作失败!");
}
}}
上移:
//摘要:
//内容:按钮上移
function BindBtnUpMethod() {
var obj = $("#jiGouGridList");
var IDs = objgetDataIDs();
var rowid = objjqGrid('getGridParam', 'selrow');
if (rowid == "" || rowid == null || rowid == undefined) {
$modalAlert("未选中行!");
return false;
}
var rowIndex = getRowIndexByRowId(IDs, rowid);
if (rowIndex == 0) {
$modalAlert('已经置顶,不能上移!');
} else {
var srcrowid = getRowIdByRowIndex(IDs, rowIndex - 2);
var rowUpId = getRowIdByRowIndex(IDs, rowIndex - 1);
var rowData = objjqGrid('getRowData', rowid);
var rowUpData = objjqGrid('getRowData', rowUpId);
//删除当前行
objdelRowData(rowid);
objdelRowData(rowUpId);
//新插入一行
objaddRowData(rowid, rowData, "after", srcrowid);
objaddRowData(rowUpId, rowUpData, "after", rowid);
//默认再选中新增的这个行
objsetSelection(rowid);
}
}
//摘要:
//内容:根据rowid,获取索引值
function getRowIndexByRowId(Ids, id) {
var index = 0;
for (var i = 0; i < Idslength; i++) {
if (Ids[i] == id) {
index = i;
}
}
return index;
}
//摘要:
//内容:根据索引值获取rowid值
function getRowIdByRowIndex(Ids, index) {
var rowid = "";
for (var i = 0; i < Idslength; i++) {
if (i == index) {
rowid = Ids[i];
}
}
return rowid;
}
下移:
//摘要:
//内容:按钮下移
function BindBtnDownMethod() {
var obj = $("#jqGridId");
var IDs = objgetDataIDs();
var rowid = objjqGrid('getGridParam', 'selrow');
if (rowid == "" || rowid == null || rowid == undefined) {
$modalAlert("未选中行!");
return false;
}
var rowIndex = getRowIndexByRowId(IDs, rowid);
if (rowIndex == (IDslength - 1)) {
$modalAlert('已经置底,不能下移!');
} else {
var srcrowid = getRowIdByRowIndex(IDs, rowIndex - 1);
var rowDownId = getRowIdByRowIndex(IDs, rowIndex + 1);
var rowData = objjqGrid('getRowData', rowid);
var rowDownData = objjqGrid('getRowData', rowDownId);
//删除当前行
objdelRowData(rowid);
objdelRowData(rowDownId);
//新插入一行
objaddRowData(rowDownId, rowDownData, "after", srcrowid);
objaddRowData(rowid, rowData, "after", rowDownId);
//默认再选中新增的这个行
objsetSelection(rowid);
}
}
打开CSDN APP,看更多技术内容
ListBox实现上移,下移,左移,右移的简单实例
主要介绍了ListBox实现上移,下移,左移,右移的简单实例。需要的朋友可以过来参考下,希望对大家有所帮助
JS与jQuery实现ListBox上移,下移,左移,右移 *** 作功能示例
主要介绍了JS与jQuery实现ListBox上移,下移,左移,右移 *** 作功能,涉及javascript与jQuery的事件响应、页面元素动态 *** 作等相关实现技巧,需要的朋友可以参考下
易语言汇编实现左移右移模块
易语言汇编实现左移右移模块源码系统结构:asm_rol,asm_ror,asm_rcl,asm_rcr,asm_shl,asm_shr,asm_not, ======程序集1 || ||------_启动子程序 || ||------_临时子程序 || ||------asm_rol || ||------asm_ror || ||-
易语言源码易语言汇编实现左移右移模块源码rar
EXPLAIN 命令,可以查看TiDB执行sql时的执行计划,用法和mysql一样,跟上sql即可
执行计划以一个树形结构展示出来,来说说每一列的含义吧:
算子是为返回查询结果而执行的特定步骤
扫表类 *** 作的算子有如下几类:
一般查询条件中没有用到索引或者索引失效了,执行计划中就会出现 TableFullScan
TableFullScan栗子 :
这个sql,没有用到索引肯定就全表扫描了,执行计划如下:
看的到执行计划中,出现 TableFullScan ,id为 TableFullScan + 了一个序号,说明,这一步执行的子任务进行全表扫描
IndexFullScan栗子1:聚合查询IndexFullScan栗子,使用COUNT :
这个sql,对于索引列 user_id 使用了 COUNT函数 ,导致了执行时需要对所有索引数据进行扫描,会出现 IndexFullScan 算子,执行计划如下:
看的到执行计划中,出现 IndexFullScan ,id为 IndexFullScan + 了一个序号,说明,这一步执行的子任务进行对索引列 user_id 进行了全索引数据的扫描
IndexFullScan栗子2:聚合查询IndexFullScan栗子,使用group by :
这个sql,对于索引列 user_id 使用了 group by ,导致了执行时需要对所有索引数据进行扫描,会出现 IndexFullScan 算子,执行计划如下:
看的到执行计划中,出现 IndexFullScan ,id为 IndexFullScan + 了一个序号,说明,这一步执行的子任务进行对索引列 user_id 进行了全索引数据的扫描
IndexFullScan栗子3:聚合查询IndexFullScan栗子,使用min函数 :
这个sql,对于索引列 user_id 使用了 min函数 ,导致了执行时需要对所有索引数据进行扫描,会出现 IndexFullScan 算子,执行计划如下:
看的到执行计划中,出现 IndexFullScan ,id为 IndexFullScan + 了一个序号,说明,这一步执行的子任务进行对索引列 user_id 进行了全索引数据的扫描
IndexFullScan栗子4:子查询IndexFullScan栗子,使用索引IN 子查询,当子查询为全量时 :
这个sql,对于索引列 user_id 使用了in,子查询为全表扫描,所以会导致外层查询会对索引列 user_id 进行全索引数据进行扫描,会出现 IndexFullScan 算子,执行计划如下:
来看看执行计划,首先,子查询没有加条件,是一个全表扫描,看执行计划2的地方,出现了一个 TableFullScan_49 ,由于子查询是全量数据,所以当外层sql对索引列 user_id 进行In时候,会对索引列 user_id 进行全索引数据的扫描,出现 IndexFullScan
IndexFullScan栗子5:join查询IndexFullScan栗子,使用left join,当左联表为全量数据时 :
这个sql,使用了索引列 user_id 进行了 left join ,当左联表为全表扫描时,会导致对索引列 user_id 进行全索引数据进行扫描,会出现 IndexFullScan 算子,执行计划如下:
来看看执行计划,左联表是一个全表扫描,所以会对索引列 user_id 进行全索引数据的扫描,出现 IndexFullScan
根据上层传递下来的 rowId 扫描表数据,通俗的讲,就是查询先走索引获取到 rowId ,在根据 rowId 读取数据,执行计划中就会出现 TableRowIDScan ,举个栗子
TableRowIDScan栗子 :
就一个简单的sql来看一下,执行计划如下:
因为使用了索引列 user_id ,所以,查询方式是从索引获取到了 rowId ,通过 rowId 去读取表数据,所以看到执行计划中,出现 TableRowIDScan ,id为 TableRowIDScan + 了一个序号,说明,这一步执行的子任务是通过送索引获取到的 rowId 扫描表数据
带有范围的索引数据扫描,还是用这个栗子吧
TableRowIDScan栗子 :
就一个简单的sql来看一下,执行计划如下:
因为对索引列 user_id 使用范围查询,所以看到执行计划中,出现 IndexRangeScan ,id为 IndexRangeScan + 了一个序号,说明,这一步执行的子任务是带有范围的索引数据扫描
数据汇聚类的算子有如下几类:
将上底层扫表算子 TableFullScan 或 TableRangeScan 得到的数据进行汇总
TableReader汇聚全表扫描TableFullScan的栗子 :
这个sql,没有用到索引肯定就全表扫描了,执行计划如下:
看的到执行计划中,因为没有使用索引查询,进行了全表扫描,出现了 TableFullScan ,所以最终使用了 TableReader 算子,对于全表扫描的数据进行了汇总
将上底层扫表算子 IndexFullScan 或 IndexRangeScan 得到的数据进行汇总
IndexReader汇聚全量索引扫描IndexFullScan的栗子 :
还是使用这个sql,由于对索引列使用min函数,所以会对对全量索引进行扫描,出现了 IndexFullScan 算子,所以会有 IndexReader 算子对于 IndexFullScan 算子得到数据进行汇总,执行计划如下:
先汇总 Build端TiKV扫 描上来的 RowID ,再去 Probe端 上根据这些 RowID 精确地读取 TiKV 上的数据。Build 端是 IndexFullScan 或 IndexRangeScan 类型的算子, Probe端 是 TableRowIDScan 类型的算子,用sql举栗子吧
IndexLookUp栗子 :
执行计划如下:
看这个sql,是一个通过索引列 user_id 进行了索引范围扫描,和上面讲的一样,他的执行逻辑是,先通过对于索引列 user_id 进行了一个范围扫描,得到所有符合条件的 rowId ,然后通过 rowId 扫描表获得数据,看执行也是,首先在 Build 端,通过 IndexRangeScan 算子,对于索引列 user_id 进行了范围扫描,扫描到的 rowId ,在 Probe 端,在通过 TableRowIDScan 算子,通过 rowId 扫描表获取数据,最终通过 IndexLookUp 算子来汇聚最终的数据
执行计划如下:
每一层级上, Build端 总是先于 Probe端 执行,并且 Build端 总是出现在 Probe端 前面
使用rownum标志行的序号,但要记住rownum的生成是在order by之前
你要查第三条到第六条必然是有一个顺序的, 假设这个顺序是 rowid (物理存储地址)
select from
(
select rownum rn , a -- 这里使用rownum给每行添加一个伪列(行号)
from (select from tab a order by rowid) a -- 这里是将原数据按想要的顺序排列好
)
where rn >= 3 and rn <= 6
通用的
select
from (select A, (select count(1) from A where id <= tid) as rk from A t) t2
where rk between 31 and 40
以上就是关于jqgrid设置某列靠右全部的内容,包括:jqgrid设置某列靠右、TiDB执行计划(一)、SQL语句中 我想查找从第三条开始到第六条怎么写等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)