利用jqgrid實(shí)現(xiàn)上移下移單元格功能
前言
JQGrid是一個(gè)在jquery基礎(chǔ)上做的一個(gè)表格控件,以ajax的方式和服務(wù)器端通信。
在表格中常常需要調(diào)整表格中數(shù)據(jù)的顯示順序,我用的是jqgrid,實(shí)現(xiàn)原理就是將表中的行數(shù)保存到數(shù)據(jù)庫中,取數(shù)據(jù)時(shí)按行進(jìn)行排序
下面話不多說了,來一起看看詳細(xì)的介紹吧
jqgrid上移下移單元格
1、上移,下移按鈕
<a href="javascript:void(0)" rel="external nofollow" rel="external nofollow" onclick="operateWithOneRowById(up)" class="linkButton">上移</a> <a href="javascript:void(0)" rel="external nofollow" rel="external nofollow" onclick="operateWithOneRowById(down)" class="linkButton">下移</a>
2、上移下移 功能
function operateWithOneRowById(callback) {
var selected = tableObj.jqGrid('getGridParam', 'selrow');
if (selected == null) {
alert("請(qǐng)用鼠標(biāo)點(diǎn)擊選擇一行后再執(zhí)行操作!");
return;
}
return callback(selected);
}
3、這里的callback是up和down 函數(shù)的合并,那么我們?cè)倏纯催@兩個(gè)函數(shù)
function up(selected) {
if (selected == 1) return;
else {
gridHelper.moveRow("up", tableObj);
}
}
function down(selected) {
gridHelper.moveRow("down", tableObj);
}
4、在這個(gè)函數(shù)中,我們都調(diào)用了一個(gè)函數(shù)movRow() 讓我們來看看這個(gè)函數(shù),這個(gè)函數(shù)的原理就是把當(dāng)前選中的行和我要移到至的行進(jìn)行交換就行了。
//移動(dòng)一行
this.moveRow = function(moveMethod, grid) {
if (grid) tableObj = grid;
var id;
// if(selRow) id=selRow;
// else id = getSelRow();
id = this.getSelRow();
tableObj.restoreRow(id);
if (id == null) return;
var targetId = this.getTargetId(id, moveMethod)
if (targetId == -1) return;
var temp1 = tableObj.getRowData(id);
var temp2 = tableObj.getRowData(targetId);
//對(duì)調(diào)行號(hào)
var tempRn = temp1.rn;
temp1.rn = temp2.rn;
temp2.rn = tempRn;
//對(duì)調(diào)數(shù)據(jù)
tableObj.setRowData(id, temp2);
tableObj.setRowData(targetId, temp1);
tableObj.setSelection(targetId);
}
5、在4中調(diào)用了getTargetId()方法,我們?cè)賮砜纯催@個(gè)方法
//取得上移時(shí)的上一行的id,或下移時(shí)的下一行的id
this.getTargetId = function(selId, method, grid) {
if (grid) tableObj = grid;
var ids = tableObj.getDataIDs();
for (var i = 0; i < ids.length; i++) {
if (selId == ids[i] && method == "up") {
if (i == 0) return -1;
else return ids[i - 1];
}
if (selId == ids[i] && method == "down") {
if (i == ids.length - 1) return -1;
else return ids[i + 1];
}
}
}
6、增加數(shù)據(jù)庫字段Sequence 我用的nhibernate 還要在配置文件中進(jìn)行修改,增加一行<property name="Order" column="Sequence"></property> 實(shí)體類中增加字段 order,在保存表時(shí)保存表中的行號(hào)
保存數(shù)據(jù)說明:保存時(shí)是保存表中的所有數(shù)據(jù),有已經(jīng)在數(shù)據(jù)庫中的數(shù)據(jù),有沒有存在數(shù)據(jù)庫中的數(shù)據(jù),根據(jù)IDj是否為0來判斷的。
public void UpdatePlan(PlanToReport plan, List<PlanPerson> list)
{
NHibernate.ISession session = NHibernateSessionManager.Instance.GetSession();
try
{
PlanToReportService.UpdatePlan(plan);
for (int i = 0; i < list.Count; i++)
{
PlanPerson item = list[i];
if (item.ID != 0)
{
PlanPerson itemnew = PlanToReportService.GetPlanPersonById(item.ID);
itemnew.JobName = item.JobName;
itemnew.ApprovalResults = item.ApprovalResults;
itemnew.Attachments = item.Attachments;
itemnew.CountryCode = item.CountryCode;
itemnew.CountryName = item.CountryName;
itemnew.MissionType = item.MissionType;
itemnew.Position = item.Position;
itemnew.Remark = item.Remark;
itemnew.StartDate = item.StartDate;
itemnew.Status = item.Status;
itemnew.Explain = item.Explain;
itemnew.Order = i;
PlanToReportService.AddNewPlanPerson(itemnew);
}
else
{
item.PlanID = plan.ID;
item.Order = i;
PlanToReportService.AddNewPlanPerson(item);
}
}
session.Transaction.Commit();
}
catch (Exception ep)
{
session.Transaction.Rollback();
throw ep;
}
}
7、取數(shù)據(jù)時(shí)根據(jù) Order 字段進(jìn)行排序
public List<PlanPersonShowInGrid> GetShowPersonInPlan(int planID)
{
ISession session = NHibernateSessionManager.Instance.GetSession();
ICriteria criteria = session.CreateCriteria(typeof(PlanPersonShowInGrid));
criteria.Add(Expression.Eq("PlanID", planID)).AddOrder(Order.Asc("Order"));
List<PlanPersonShowInGrid> list = new List<PlanPersonShowInGrid>();
try
{
IList l = criteria.List();
list = PlanToReportDao.IListToList<PlanPersonShowInGrid>(l);
}
catch { }
return list;
}
至此,表格中數(shù)據(jù)的上移下移就完成了。
總結(jié):
以上就是這篇文章的全部?jī)?nèi)容了,希望本文的內(nèi)容對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,如果有疑問大家可以留言交流,謝謝大家對(duì)腳本之家的支持。
- jqgrid 簡(jiǎn)單學(xué)習(xí)筆記
- JQGrid的用法解析(列編輯,添加行,刪除行)
- jQuery中jqGrid分頁實(shí)現(xiàn)代碼
- jqGrid用法匯總(全經(jīng)典)
- jquery下動(dòng)態(tài)顯示jqGrid以及jqGrid的屬性設(shè)置容易出現(xiàn)問題的解決方法
- jqGrid隨窗口大小變化自適應(yīng)大小的示例代碼
- Bootstrap嵌入jqGrid,使你的table牛逼起來
- 一個(gè)關(guān)于jqGrid使用的小例子(行按鈕)
- jqGrid 學(xué)習(xí)筆記整理——進(jìn)階篇(一 )
- 給jqGrid數(shù)據(jù)行添加修改和刪除操作鏈接(之一)
相關(guān)文章
Jquery通過Ajax方式來提交Form表單的具體實(shí)現(xiàn)
提交Form表單的方法有很多,在本文為大家介紹下Jquery通過Ajax方式是如何提交Form表單的2013-11-11
jquery pagination插件實(shí)現(xiàn)無刷新分頁代碼
首先,我們要準(zhǔn)備的文件有jquery.js,jquery.pagination.js,pagination.css,還有一個(gè)就是經(jīng)常用的table布局的css文件。這些文件都會(huì)在后面的文件中包含。2009-10-10
jQuery實(shí)現(xiàn)仿QQ在線客服效果的滾動(dòng)層代碼
這篇文章主要介紹了jQuery實(shí)現(xiàn)仿QQ在線客服效果的滾動(dòng)層代碼,可實(shí)現(xiàn)實(shí)時(shí)讀取屏幕高度并顯示的功能,涉及jQuery響應(yīng)滾動(dòng)事件及定時(shí)操作的相關(guān)技巧,需要的朋友可以參考下2015-10-10
jquery創(chuàng)建并行對(duì)象或者合并對(duì)象的實(shí)現(xiàn)代碼
如果有對(duì)象A ,B 現(xiàn)在我想要合并成對(duì)象C 從C里面可以找到A , B 及其子對(duì)象 怎么做2012-10-10
使用jquery mobile做幻燈播放效果實(shí)現(xiàn)步驟
使用jquery mobile,可以很容易實(shí)現(xiàn)幻燈播放效果,擺脫繁雜的步驟輕松實(shí)現(xiàn),接下來介紹,有需要的朋友可以參考下2013-01-01
jQuery向上遍歷DOM樹之parents(),parent(),closest()之間的區(qū)別
這篇文章主要是對(duì)jQuery向上遍歷DOM樹之parents(),parent(),closest()之間的區(qū)別進(jìn)行了詳細(xì)的介紹,需要的朋友可以過來參考下,希望對(duì)大家有所幫助2013-12-12
jQuery基于當(dāng)前元素進(jìn)行下一步的遍歷
通過jQuery方法選中了元素,如何基于這些已經(jīng)選中的元素進(jìn)行下一步的遍歷呢?下面有個(gè)不錯(cuò)的示例,大家可以參考下2014-05-05

