2010-08-10 20 views
0

讓jqGrid正常運行並且運行良好,其中包含一些標記的隱藏字段,僅包含數據表格,以及當我將鼠標懸停在網格行上時隱藏列的標記行出現在工具提示中。我希望能夠複製網格項目,並且要這樣做,我想清除網格並僅填充重複的記錄和原始數據。將標記插入到隱藏的jqGrid列中

​​

這裏是我的網格定義:

不幸的是,重裝網格時,我得到這個問題

$('#RequestGrid').jqGrid({ 
    url: GetUrl(), 
    datatype: 'json', 
    mtype: 'POST', 
    colNames: ['ID', 'AOM', 'Start Date', 'End Date', 'Coordinator 1', 'Coordinator 2', 'Driver?', 'Status', 'Assigned To', 'RequestHours'], 
    colModel: [ 
     { name: 'ResourceRequestID', index: 'ResourceRequestID', width: 20, key: true }, 
     { name: 'AOM', index: 'AOM.Surname', width: 70 }, 
     { name: 'StartDate', index: 'StartDate', width: 50 }, 
     { name: 'EndDate', index: 'EndDate', width: 50 }, 
     { name: 'Coordinator1', index: 'Coordinator.Surname', width: 60 }, 
     { name: 'Coordinator2', index: 'Coordinator1.Surname', width: 60 }, 
     { name: 'DriverPreference', index: 'DriverPreference.Description', width: 40 }, 
     { name: 'Status', index: 'Status', sortable: false, width: 40 }, 
     { name: 'AssignedResourceID', index: 'AssignedResourceID', width: 50 }, 
     { name: 'RequestHours', index: 'RequestHours', hidden: true } 
    ], 
    ... 
    loadui: 'block', 
    width: 750, 
    ondblClickRow: function (rowid, iRow, iCol) { 
     window.location = '/Request/Edit/' + rowid; 
    },     
    gridComplete: function() { 
     $("tr.jqgrow").mouseover(function(e) { 
      var requestHours = $(this).find('td').eq(9).html(); 
      $(this).tipTip({ activation: "hover", edgeOffset: 5, content: requestHours, keepAlive: false, fadeIn: 0, maxWidth: "250px" }); 
     }); 
    } 
}); 

的隱藏字段的標記是建立在我的控制器如下:

public string BuildRequestPlan(ResourceRequest req) 
{ 
    string requestPlan = "<p>Request #" + req.ResourceRequestID.ToString() + "</p>"; 
    requestPlan += "<p>Location: " + req.Location.LocationName + "</p>"; 
    requestPlan += "<table id=toolTipAvailability><tr><td>Day</td><td>8-9</td><td>9-10</td><td>10-11</td><td>11-12</td><td>12-1</td><td>1-2</td><td>2-3</td><td>3-4</td><td>4-5</td><td>5-6</td><td>6-7</td><td>7-8</td><td>8-9</td><td>9-10</td><td>O/S</td></tr>"; 

    string[] days = { "Mon", "Tue", "Wed", "Thu", "Fri", "Sat", "Sun" }; 
    int[] hrs = { 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22 }; 

    for (int day = 1; day <= days.Length; day++) 
    { 
     requestPlan += "<tr><td oncontextmenu=return false;>" + days[day - 1] + "</td>"; 

     for (int hour = 8; hour < 23; hour++) 
     { 
      requestPlan += "<td class=toolTipAvailabilityCell day=" + day + " hour=" + hour + ">"; 

      var requestHour = req.RequestHours.SingleOrDefault(h => h.Hour == hour && h.WeekDay == day); 

      if (requestHour != null) 
      { 
       requestPlan += requestHour.Minutes.ToString(); 
      } 

      requestPlan += "</td>"; 
     } 

     requestPlan += "</tr>"; 
    } 

    requestPlan += "</table>"; 

    return requestPlan; 
} 

在重複列表中的每個項目都會調用此方法:

[HttpPost] 
public JsonResult Duplicate(int cloneRequestID, int cloneCount) 
{ 
    ResourceRequest resourceRequest = this._resourceRequestService.GetByID(cloneRequestID); 

    // get the assignedResourceID of resourceRequest to clone 
    int? assignedResourceID = resourceRequest.AssignedResourceID; 

    // nullify the assignedResourceID 
    resourceRequest.AssignedResourceID = null; 

    List<ResourceRequest> clones = new List<ResourceRequest>(); 

    for (int i = 0; i < cloneCount; i++) 
    { 
     ResourceRequest temp = (ResourceRequest)resourceRequest.Clone(); 
     this._resourceRequestService.Add(temp); 
     clones.Add(temp); 
    } 

    // reinstate the assignedResourceID 
    resourceRequest.AssignedResourceID = assignedResourceID; 

    // add original erquest to clones collection 
    clones.Add(resourceRequest); 

    try 
    { 
     this._unitOfWork.Commit(); 
     int totalRecords = clones.Count(); 
     int totalPages = (int)Math.Ceiling((float)totalRecords/(float)10); 

     var jsonData = from req in clones 
      select new 
      { 
       ResourceRequestID = req.ResourceRequestID.ToString(), 
       AOM = string.Format("{0}, {1}", req.AOM.Surname, req.AOM.Forename), 
       StartDate = req.StartDate.ToString("dd/MM/yyyy"), 
       EndDate = req.EndDate.ToString("dd/MM/yyyy"), 
       Coordinator1 = string.Format("{0}, {1}", req.Coordinator.Surname, req.Coordinator.Forename), 
       Coordinator2 = req.SecondCoordinatorID == null ? "N/A" : string.Format("{0}, {1}", req.Coordinator1.Surname, req.Coordinator1.Forename), 
       DriverPreference = req.DriverPreference.Description, 
       Status = req.RequestCancelledDate.HasValue ? "Cancelled" : req.AssignedResourceID.HasValue ? "Assigned" : "Unassigned", 
       AssignedResourceID = req.Resource == null ? "N/A" : req.Resource.Employee.FullName, 
       RequestHours = BuildRequestPlan(req) 
      }; 

     return Json(JsonConvert.SerializeObject(jsonData));    
    } 
    catch (Exception e) 
    { 
     var data = new { error = e.Message }; 

     return Json(data); 
    } 
} 

這是我重新綁定網格:

$.post('/Request/Duplicate', { cloneRequestID: $('#cloneRequestID').val(), cloneCount: $('#cloneCount').val() }, function (data) { 

    $('#RequestGrid').clearGridData(true); 

    var jsonData = $.parseJSON(data); 

    $('#RequestGrid').addRowData('ResourceRequestID', jsonData); 
}); 

我試着只返回一個空表例如<table><tr></tr></table>它工作,但當我添加一個空單元格時,它停止工作,所以標記出現問題。

有沒有人遇到過類似的問題?有什麼想法嗎?

感謝

+0

您能否解釋**爲什麼**您需要複製網格而不是刷新網格或重新提交新網格? – Oleg 2010-08-10 14:17:56

+0

嗨Oleg,我只是通過清理並手動插入原始記錄和重複項來刷新網格。在此之後,網格可以刷新以顯示所有記錄。這個想法是快速總結什麼記錄是重複的。 – Gib 2010-08-10 14:40:51

回答

0

通過圍繞在BuildRequestPlan方法標記一個HTML註釋修復了這個問題。當涉及到將標記傳遞給工具提示時,我只是刪除評論。這是非正統的,但它的作品。

0

首先,我會建議您使用userdata保存和額外的信息到jqGrid。保存在userdata中的數據可以完全免費。例如,它可以是一個包含HTML代碼片段的數組或具有ResourceRequestID值的對象作爲屬性以及相應的HTML代碼段作爲值。因此,隨着jQuery("RequestGrid").getGridParam('userData')您可以隨時獲得數據的參考,並且可以使用userData參數直接爲新的jqGrid設置數據。

使用userData的主要優點是數據不會像現在這樣做,而是作爲HTML代碼的一部分放置在某處。所以數據將不會以任何方式編碼,並且可以包含任何包含而不受限制。

如果你想刷新jqGrid的數據,你可以只用jQuery("RequestGrid").trigger("reloadGrid")jQuery("RequestGrid").getGridParam('data')獲得網格數據,然後創建data作爲參數,並datatype: 'local'新的網格。然後,您可以在網格創建後(如果您確實想要'json'而不是'local'網格)將datatype'local'更改爲'json'。它可以是複製數據的簡單方法。此外,我不確定,但可能使用loadone: true對您而言可能很有意思(如果您決定使用此功能,請參閱JqGrid Reload not working)。