gpt4 book ai didi

c# - 当只有 5 行可供查看时将数据加载到 DataGrid

转载 作者:太空宇宙 更新时间:2023-11-03 12:55:19 30 4
gpt4 key购买 nike

我有一个 DataGrid 绑定(bind)到 EmployeeDataTable 属性。让我们考虑 EmployeeDataTable 的行数是 50 。也就是说,DataGrid 有 50 行。

private DataTable employeeDataTable;
public DataTable EmployeeDataTable
{
get { return employeeDataTable; }
set {
employeeDataTable = value;
OnPropertyChanged("EmployeeDataTable");
}
}

我想要的是当用户滚动到 DataGrid 的底部或顶部(50 行)并且只有 5 行可以看到(在顶部或在顶部),然后我想将接下来的 20 个项目添加到 DataGrid(如果用户滚动到顶部,则添加到 Datagrid 的顶部;如果用户滚动到底部,则添加到底部)。

也就是说,当用户看到 DataGrid 的第四十五 (45) 行或第五 (5) 行时,我想运行一个名为 GetNewData() 的方法.是否可以不使用 SelectedItem 属性?(只需使用 Scroll)

private void GetNewData()
{
for (int i = 0; i < 20; i++)//Adding 20 DataRows
{
var theRow = employeeDataTable.NewRow();
for (int j = 0; j < 10; j++)
{
theRow[j] = "o";
}
Application.Current.Dispatcher.Invoke(DispatcherPriority.Background, new Action(() =>
{
employeeDataTable.Rows.Add(theRow);
}));
}
}

当用户在 DataGrid 中向下滚动或向上滚动时,我的方法 GetNewData() 会在后台线程中加载新数据。就像分页一样,但没有“下一页”和“上一页”按钮(我不能使用按钮)。

enter image description here

我已经尝试处理许多事件,例如 DataGridMouseWheelMouseMove 但没有结果。任何帮助将不胜感激。

最佳答案

您需要做的是将数据网格包装在 ScrollableView 中并注册到 ScrollChanged 事件:

<ScrollViewer VerticalScrollBarVisibility="Visible"
PreviewMouseWheel="UIElement_OnPreviewMouseWheel"
ScrollChanged="ScrollViewer_OnScrollChanged">
<DataGrid x:Name="dg" VerticalScrollBarVisibility="Disabled"></DataGrid>
</ScrollViewer>

接下来,您实现 ScrollChanged 事件以检查您是否位于 ScrollView 的底部,如果是,则添加一些行。

private void ScrollViewer_OnScrollChanged(object sender, ScrollChangedEventArgs e)
{
var sv = sender as ScrollViewer;

if (sv != null && !_addingData)
{
if (sv.ScrollableHeight - e.VerticalOffset == 0)
{
_addingData = true;
GetNewData();
_addingData = false;
}
}
}

private void UIElement_OnPreviewMouseWheel(object sender, MouseWheelEventArgs e)
{
ScrollViewer scv = (ScrollViewer)sender;
scv.ScrollToVerticalOffset(scv.VerticalOffset - e.Delta);
e.Handled = true;
}

如果您像这样注册数据网格,则无需向您的 EmployeeDataTable 添加任何可观察的内容:

dg.AutoGenerateColumns = true;
dg.ItemsSource = EmployeeDataTable.DefaultView;

编辑:已更新以启用鼠标滚轮滚动。

关于c# - 当只有 5 行可供查看时将数据加载到 DataGrid,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34105304/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com