在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属性更新到新的索引中并保存

为什么这对我有用而对他没用?服务器端代码会受到浏览器差异的影响吗?

在teleerik Radgrid上拖动重新排序

如本线程中所述,如果项目没有被放到网格中的实际数据行上,则DestDataItem将为空。

如果目标不是数据行,你可以通过在客户端处理onrowdrop事件并忽略你不想要的东西来防止RowDrop事件的触发:

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