【问题标题】:Jump to Row in WPF Datagrid跳转到 WPF 数据网格中的行
【发布时间】:2012-01-18 13:59:45
【问题描述】:

有人可以帮忙吗,我正在尝试创建一个允许用户输入行号的方法,该方法会将他们“跳转”到该行。比如传入行号时。

我使用 dataTable 作为数据网格的项目源。

用户可以在数据网格的一侧看到行号。

示例:用户在第 250 行输入,数据网格被移动到该行。

我正在使用 WPF 数据网格和 c# 4.0。

【问题讨论】:

    标签: c# .net wpf wpfdatagrid


    【解决方案1】:

    除了@blindmeis 的建议

    this._myview.MoveCurrentTo()
    

    添加这一行:

    dataGridView.ScrollIntoView(dataGridView.SelectedItem);
    

    【讨论】:

      【解决方案2】:

      我使用 ICollectionView MoveCurrentTo 方法。

       this._myview.MoveCurrentTo()
      

      好在 ICollectionView 知道排序等等。

      也许您可以告诉我们您的 itemssource 是什么以及为什么用户必须知道“索引”行。用户是否计算屏幕上的行数?还是您希望用户使用 Key=250 到达行?

      【讨论】:

      • 对不起,我在我的问题上添加了额外的 cmets,用户可以看到行号。
      • 据我所知,这只会移动选择而不是实际移动视图。
      • H.B.我想添加 ScrollIntoView 的东西是对的。然而,如果一个数据网格有 300 行,那么第 250 行总是相同的,但是当我使用对第 250 行的内容进行排序时发生变化 - 如果 user101010101 仍然希望用户使用 chaged 内容转到第 250 行,那么我的方法是不是最好的。我认为他应该选择 SelectedIndex
      【解决方案3】:

      这应该可行:

      按照 Blindmeis 的建议(或通过您喜欢的任何方法)设置所选项目后,使用 myGrid.ScrollIntoView(myGrid.SelectedItem)。请注意,这可能需要根据您的 UI 如何处理网格上的选择进行调整。

      或者,一个未经测试的组合:

      protected void JumpToRow(int rowNumber)
      {
         if(rowNumber>=0 && myGrid.Items!=null && rowNumber<myGrid.Items.Count)
         {
            var border = VisualTreeHelper.GetChild(myGrid, 0) as Decorator;
            if (border != null)
            {
               var scroll = border.Child as ScrollViewer;
               if (scroll != null) scroll.ScrollToEnd();
               scroll.ScrollToStart();
               for(int i=0;i<rowNumber;++i)
               {
                  scroll.LineDown();
               }
            }
         }
      }
      

      【讨论】:

      • 谢谢你,我试过你的代码我唯一的问题是当它滚动时,它发送似乎将滚动向下移动得足够多。例如,我将 rowNumber 设置为 279,但仅移动到 33。有什么想法吗?
      • 您使用的是物理滚动还是逻辑滚动?请参阅stackoverflow.com/questions/3062540/… 以供参考。 kludge 方法(我假设您尝试过)需要逻辑滚动。
      • 谢谢,我很困惑,包括 31 及以下的任何数字都可以正常工作,但任何大于 31 的数字都不会跳得更远,你有什么想法吗?
      • 什么是myGrid.Items.Count?如果您的网格中只有 32 个项目,则不能跳过第 31 行(基于 0 的索引)。如果这不是答案,我认为如果不查看更多代码,我将不会提供更多帮助。
      • 没有滚动计数是 370 我真的不知道 wot 是怎么回事。我需要在我的数据网格中设置任何属性吗?
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-02-07
      • 2018-12-18
      • 2016-05-19
      相关资源
      最近更新 更多