在teleerik Radgrid上拖动重新排序
本文关键字:排序 新排序 teleerik Radgrid 拖动 | 更新日期: 2023-09-27 18:10:38
我试图在我的网格上使用拖动重新排序。我的代码对我来说工作得很好(它在RowDrop事件上触发),但我的客户端不能让它工作,我已经对它进行了故障排除,以显示当他执行drop时,参数的DestDataItem属性为空,因此drop逻辑永远不会触发?!?下面是我的代码:
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"));
}
}
它只是引用被拖动的项,并将其从项列表中拉出,并将其重新插入到新的索引中,然后将每个项的rank属性更新到新的索引中并保存
为什么这对我有用而对他没用?服务器端代码会受到浏览器差异的影响吗?
如本线程中所述,如果项目没有被放到网格中的实际数据行上,则DestDataItem将为空。
如果目标不是数据行,你可以通过在客户端处理onrowdrop事件并忽略你不想要的东西来防止RowDrop事件的触发:
function gridRowDropping(sender, args)
{
if (!args.get_targetGridDataItem())
args.set_cancel(true);
}