【问题标题】:How to prevent 'Default' group in ObjectListView after ModelDropped event?ModelDropped 事件后如何防止 ObjectListView 中的“默认”组?
【发布时间】:2016-08-26 23:10:29
【问题描述】:

我正在尝试在 ObjectListView 中创建沿路线的可重新排列的停靠点列表。我的列表在初始化时被正确分组和排序。见以下链接:

初始化后的路由,正确分组

当我拖放一行时(无论是放在同一个组还是不同的组中),它都会被移动到一个新的“默认”组中。见下文:

拖放后的路线,将 Rt 2、Stop 4 移至“默认”组

我尝试了各种尝试来提神,但都无济于事。有人可以解释为什么这被归类为“默认”以及如何解决?谢谢!

这是我的完整代码:

private void RouteEditor_Load(object sender, EventArgs e)
{
    Stop stop1 = new Stop();
    stop1 .Customer = "Test4";
    stop1 .Location = "10010";
    stop1 .Weight = 13;
    stop1 .StopNumber = 4;
    stop1 .Route = "Route 2";
    StopList.Add(stop1 );

    this.objectListView1.SetObjects(StopList);

    this.objectListView1.DragSource = new BrightIdeasSoftware.SimpleDragSource();
    this.objectListView1.DropSink = new BrightIdeasSoftware.RearrangingDropSink(false);      
}

private void objectListView1_ModelCanDrop(object sender, BrightIdeasSoftware.ModelDropEventArgs e)
{
    e.DropSink.CanDropBetween = true;
    e.DropSink.CanDropOnItem = false;

    if (e.TargetModel == null)
        e.Effect = DragDropEffects.None;
    else
        e.Effect = DragDropEffects.Move;
}

private void objectListView1_ModelDropped(object sender, BrightIdeasSoftware.ModelDropEventArgs e)
{
    if (e.TargetModel == null)
        return;

    Stop targetStop = e.TargetModel as Stop;
    foreach (Stop s in e.SourceModels)
        s.Route = targetStop.Route;
}              

【问题讨论】:

    标签: c# vb.net drag-and-drop objectlistview


    【解决方案1】:

    我不确定“默认”组机制。也许 OLV 只是不知道如何处理丢弃的项目,因为它不会在每次丢弃后重新评估/重新构建组。

    From the manual:

    示例:如果控件按学术成绩对学生进行分组,并且用户将“失败”成绩的学生拖入“A+”组,则程序员有责任对模型进行适当的更改并重绘/重建控件,使用户的操作有意义。

    【讨论】:

      【解决方案2】:

      我知道这个问题是很久以前提出的,但对于其他有同样问题的人来说,这里是我发现对我有用的解决方案。

      在阅读了 Objectlistview 论坛中的一些讨论后,我发现 RearrangingDropSink 类不适用于分组的 Objectlistview,因此我切换到使用 SimpleDropSink 对象并且它起作用了,不再有“默认”组 - 丢弃的项目被丢弃在预期的放在一个组中。

      因此,对于问题中的示例,更改:

      this.objectListView1.DropSink = new BrightIdeasSoftware.RearrangingDropSink(false);
      

      this.objectListView1.DropSink = new BrightIdeasSoftware.SimpleDropSink();
      this.objectListView1.DropSink.CanDropOnItem = false;
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-05-30
        • 1970-01-01
        • 2023-03-11
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多