【问题标题】:wpf datagrid readonly jump to row while typingwpf datagrid在键入时只读跳转到行
【发布时间】:2011-02-08 15:59:44
【问题描述】:

在显示表格数据的只读数据网格中,我希望具有(开箱即用)功能以在用户键入某些字符时跳转到一行。

说有以下记录:

  • ...一些数据...
  • 办公用品
  • 订单
  • ...更多数据...

当用户键入“O”时,应选择 ID 为“办公用品”的行。当用户在此之后键入“r”时,应选择“订单”行。

我的问题实际上是:是否有一个开箱即用的解决方案,或者我必须创建一些自定义的东西?

【问题讨论】:

    标签: c# wpf datagrid


    【解决方案1】:

    没有“开箱即用”的功能可以做到这一点,您必须自己创建。

    我建议:

    • 听键盘(例如当焦点在 DG 上时)
    • 将被击中的键存储在缓冲区中
    • 在每个 keyStroke 之后,循环数据源中的每个单元格以查找第一个匹配项(取决于数据大小,这可能非常昂贵,因为您必须为每个单元格进行字符串比较,对于数据源中的每个单元格在最坏的情况下......)
    • 将 dataGrid 的 currentCell 设置为给定的行/列位置(有几种方法可以做到这一点)

    所以这并不复杂,但它需要一些编码,最重要的是,如果您有大量数据集,这可能会变成性能噩梦。

    【讨论】:

    • 非常感谢您的回答。我将创建一个原型来确定这是否可行并执行。
    【解决方案2】:

    您几乎必须为搜索输入创建一个文本框,然后使用 LINQ(或您喜欢的任何其他方式)过滤您的 DataGrid 绑定到的集合,并将生成的对象克隆到另一个集合中.最后,将 DataGrid 重新绑定到那些克隆的对象并重新设置窗口的 DataContext,以便 DataGrid 知道绑定更改。最后,实施检查,如果用户离开并清空文本框,则重新绑定到原始集合并再次重新设置 DataContext。

    希望这会有所帮助;)

    【讨论】:

    • 其实我目前只是在寻找一种选择元素的方法。不过,这也是要求之一:)谢谢!
    • 我很高兴你喜欢它。我过去遇到过类似的问题,这解决了它:)
    猜你喜欢
    • 1970-01-01
    • 2020-05-21
    • 2011-01-03
    • 1970-01-01
    • 2011-01-30
    • 1970-01-01
    • 2023-03-19
    • 2013-07-29
    • 2022-10-04
    相关资源
    最近更新 更多