2013-04-23 7 views
0

Я пытаюсь использовать переупорядочивание перетаскивания на моей радиосети. Код, который у меня хорошо работает для меня (он срабатывает при событии RowDrop), но мой клиент не может заставить его работать, и я решил устранить его, чтобы показать, что когда он делает это, свойство DestDataItem аргументов равно null, логика падения никогда не запускает?!? Вот мой код:Перетаскивание перетаскивания на Telerik Radgrid

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

Что такое ваш клиент опустил строку? [Этот поток] (http://www.telerik.com/community/forums/aspnet-ajax/grid/radgrid-drag-amp-drop-with-detail-table.aspx) указывает, что DestDataItem будет null, если целевой не является строкой данных. Это можно предотвратить, если обработать событие OnRowDropping (показано в потоке). –

+0

можете ли вы разместить это как ответ? Благодаря! – box86rowh

+0

Рад, что это помогло :) –

ответ

1

Как указано в this thread, если элемент не упал на фактическую строку данных в сетке, значение DestDataItem будет равно нулю.

Вы можете предотвратить ваше событие RowDrop от стрельбы, если цель не является строка данных, путем обработки события OnRowDropping на стороне клиента, и не обращая внимания на вещи, которые вы не хотите:

function gridRowDropping(sender, args) 
{ 
    if (!args.get_targetGridDataItem()) 
     args.set_cancel(true); 
} 
Смежные вопросы