jqgrid 上移下移單元格


在表格中常常需要調整表格中數據的顯示順序,我用的是jqgrid,實現原理就是將表中的行數保存到數據庫中,取數據時按行進行排序

1、上移,下移按鈕

 <a href="javascript:void(0)" onclick="operateWithOneRowById(up)" class="linkButton">上移</a>
 <a href="javascript:void(0)" onclick="operateWithOneRowById(down)" class="linkButton">下移</a>

2、上移下移 功能

function operateWithOneRowById(callback) {
            var selected = tableObj.jqGrid('getGridParam', 'selrow');
            if (selected == null) {
                alert("請用鼠標點擊選擇一行后再執行操作!");
                return;
            }
            return callback(selected);
        }

3、這里的callback是up和down 函數的合並,那么我們再看看這兩個函數

function up(selected) {
            if (selected == 1) return;
            else {
                gridHelper.moveRow("up", tableObj);
            }
        }

        function down(selected) {
            gridHelper.moveRow("down", tableObj);
        }

4、在這個函數中,我們都調用了一個函數movRow() 讓我們來看看這個函數,這個函數的原理就是把當前選中的行和我要移到至的行進行交換就行了。

   //移動一行
    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);
        //對調行號
        var tempRn = temp1.rn;
        temp1.rn = temp2.rn;
        temp2.rn = tempRn;
        //對調數據
        tableObj.setRowData(id, temp2);
        tableObj.setRowData(targetId, temp1);
        tableObj.setSelection(targetId);
    }

5、在4中調用了getTargetId()方法,我們再來看看這個方法

 //取得上移時的上一行的id,或下移時的下一行的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、增加數據庫字段Sequence  我用的nhibernate 還要在配置文件中進行修改,增加一行<property name="Order" column="Sequence"></property>  實體類中增加字段 order,在保存表時保存表中的行號
      保存數據說明:保存時是保存表中的所有數據,有已經在數據庫中的數據,有沒有存在數據庫中的數據,根據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、取數據時根據 Order 字段進行排序

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;
        }

      至此,表格中數據的上移下移就完成了。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM