2013-04-23 54 views
0

我正嘗試在我的radgrid上使用拖拉重新排序。我的代碼對我來說很好(它觸發了RowDrop事件),但是我的客戶無法讓它工作,我已經排除故障,以顯示當他執行刪除操作時,args的DestDataItem屬性爲空,因此丟棄邏輯從不觸發?!?這裏是我的代碼:在Telerik Radrag上拖動重新排序

protected void questionGrid_RowDrop(object sender, GridDragDropEventArgs e) 
    { 
     if (e.DestDataItem != null) 
     { 
      int tempId = int.Parse(editingId.Value); 
      theTemplate = ent.SurveyTemplates.Where(i => i.Id == tempId).FirstOrDefault(); 
      int id = int.Parse(e.DraggedItems[0]["Id"].Text); 
      SurveyQuestion draggedQuestion = ent.SurveyQuestions.Where(i => i.Id == id).FirstOrDefault(); 
      List<SurveyQuestion> tempArray = theTemplate.Questions.OrderBy(i => i.Rank).ToList(); 
      tempArray.Remove(draggedQuestion); 
      tempArray.Insert(e.DestDataItem.ItemIndex, draggedQuestion); 
      int j = 0; 
      foreach (SurveyQuestion sq in tempArray) 
      { 
       sq.Rank = j; 
       j++; 
      } 
      ent.SaveChanges(); 
      questionGrid.Rebind(); 
     } 
     else 
     { 
      Exceptions.LogException(new Exception("NULL DEST")); 
     } 
    } 

它只是引用拖動的項目和新索引處的項目,並重新插入它的列表中翻出,然後將其更新每個項目的等級屬性,其新的索引和撲救。

爲什麼這對我而言並不適合他?這個服務器端代碼是否會受瀏覽器差異的困擾?

+0

是什麼你的客戶放棄了這一行? [This thread](http://www.telerik.com/community/forums/aspnet-ajax/grid/radgrid-drag-amp-drop-with-detail-table.aspx)表示如果目標的DestDataItem爲null不是數據行。您可以通過處理OnRowDropping事件(在線程中說明)來防止發生這種情況。 – 2013-04-23 17:30:53

+0

你能發表這個答案嗎?謝謝! – box86rowh 2013-04-23 17:40:05

+0

很高興幫助:) – 2013-04-23 17:44:27

回答

1

this thread所述,如果該項沒有被放置在網格中的實際數據行上,則DestDataItem將爲空。

您可以防止RowDrop事件燒製而成,如果目標不是一個數據行,通過處理客戶端上的OnRowDropping事件,而忽略的東西你不想要的:

function gridRowDropping(sender, args) 
{ 
    if (!args.get_targetGridDataItem()) 
     args.set_cancel(true); 
}