gpt4 book ai didi

c# - WPF Datagrid 未正确显示数据但在单击列标题时正确显示

转载 作者:行者123 更新时间:2023-11-30 17:11:48 24 4
gpt4 key购买 nike

我的 wpf 应用程序中有一个 DataGrid

<DataGrid Name="datagrid2" ItemSource="{Binding}" CanUserReorderColumns="False" 
IsReadOnly="True" SelectionMode="Single" CanUserResizeColumns="False"
CanUserResizeRows="False" LoadingRow="datagrid2_LoadingRow" />

我提供它的 ItemSource 作为

datagrid2.ItemSource = mydatatable.DefaultView;

及其行标题为

private void datagrid2_LoadingRow(object sender, DataGridRowEventArgs e)
{
e.Row.Header = Some_string_araay[e.Row.GetIndex()];
}

有时我的问题是行标题变成第一列的数据。因此,最后一列及其数据变得无标题。我认为这是一个布局问题,所以在提供 ItemSource 并在 LoadingRow 中我执行了 datagrid2.UpdateLayout()。但问题仍然存在。

enter image description here

enter image description here

当我点击任何 ColumnHeader 时,数据会正确对齐。

enter image description here

enter image description here

这个问题的原因和解决方法是什么?

最佳答案

好的,我想我知道为什么会这样。

第一列(包含行标题)的宽度是在运行时根据网格加载时的内容(行标题数据)确定的。现在在您的情况下,当网格加载时,您的行标题没有数据(您在 LoadingRow 事件中设置标题),因此第一列的宽度设置为 0;更新行标题后,它不会反射(reflect)为 DataGrid 不会自行刷新。

单击列标题后,它会重新计算 RowHeader 宽度,这次是正确的,因为您的行标题包含数据。

对此应该有一些简单的解决方案,但一种方法是将 RowHeaderWidthSelectAllButton 绑定(bind)(in 0,0, cell) 像这样 -

// Loaded event handler for Datagrid
private void DataGridLoaded(object sender, RoutedEventArgs e)
{
datagrid2.LayoutUpdated += DataGridLayoutUpdated;
}

private void DataGridLayoutUpdated(object sender, EventArgs e)
{
// Find the selectAll button present in grid
DependencyObject dep = sender as DependencyObject;

// Navigate down the visual tree to the button
while (!(dep is Button))
{
dep = VisualTreeHelper.GetChild(dep, 0);
}

Button selectAllButton = dep as Button;

// Create & attach a RowHeaderWidth binding to selectAllButton;
// used for resizing the first(header) column
Binding keyBinding = new Binding("RowHeaderWidth");
keyBinding.Source = datagrid2;
keyBinding.Mode = BindingMode.OneWay; // Try TwoWay if OneWay doesn't work)
selectAllButton.SetBinding(WidthProperty, keyBinding);

// We don't need to do it again, Remove the handler
datagrid2.LayoutUpdated -= DataGridLayoutUpdated;
}

我做了类似的事情,根据第 0,0 个单元格数据更改第一列的宽度,并且效果很好;希望这对您有用。

关于c# - WPF Datagrid 未正确显示数据但在单击列标题时正确显示,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11188618/

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