【发布时间】:2012-01-18 13:59:45
【问题描述】:
有人可以帮忙吗,我正在尝试创建一个允许用户输入行号的方法,该方法会将他们“跳转”到该行。比如传入行号时。
我使用 dataTable 作为数据网格的项目源。
用户可以在数据网格的一侧看到行号。
示例:用户在第 250 行输入,数据网格被移动到该行。
我正在使用 WPF 数据网格和 c# 4.0。
【问题讨论】:
标签: c# .net wpf wpfdatagrid
有人可以帮忙吗,我正在尝试创建一个允许用户输入行号的方法,该方法会将他们“跳转”到该行。比如传入行号时。
我使用 dataTable 作为数据网格的项目源。
用户可以在数据网格的一侧看到行号。
示例:用户在第 250 行输入,数据网格被移动到该行。
我正在使用 WPF 数据网格和 c# 4.0。
【问题讨论】:
标签: c# .net wpf wpfdatagrid
除了@blindmeis 的建议
this._myview.MoveCurrentTo()
添加这一行:
dataGridView.ScrollIntoView(dataGridView.SelectedItem);
【讨论】:
我使用 ICollectionView MoveCurrentTo 方法。
this._myview.MoveCurrentTo()
好在 ICollectionView 知道排序等等。
也许您可以告诉我们您的 itemssource 是什么以及为什么用户必须知道“索引”行。用户是否计算屏幕上的行数?还是您希望用户使用 Key=250 到达行?
【讨论】:
这应该可行:
按照 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();
}
}
}
}
【讨论】:
myGrid.Items.Count?如果您的网格中只有 32 个项目,则不能跳过第 31 行(基于 0 的索引)。如果这不是答案,我认为如果不查看更多代码,我将不会提供更多帮助。