我尝试过不同的事情,我想知道如何在数据网格的左边添加行计数器? (就像我们在excel中看到的那样)
我认为可能:
但我不知道如何实现这一点。
我承认,在谈到WPF时我是一个新手,但在对象属性中,并不是一个"复选框"激活它,到目前为止我没有遇到任何明确的代码,所以我不确定它是简单的,还是一些精心设计的黑客。
TY。
答案 0 :(得分:1)
使用DataTable填充DataGrid,然后使用
<强>主窗口强>
php
<强>的Xaml 强>
crc32
<强>转换器强>
public MainWindow()
{
InitializeComponent();
DataTable tab = new DataTable();
for (int i = 0; i < 10; i++)
tab.Columns.Add("col " + i.ToString());
for (int i = 0; i < 1000; i++)
{
DataRow r = tab.NewRow();
for (int j = 0; j < 10; j++)
r[j] = "row " + (i).ToString() + "-col " + (j).ToString();
tab.Rows.Add(r);
}
dg.ItemsSource = tab.AsDataView();
}
答案 1 :(得分:1)
以下链接提供了有关如何执行此操作的完整代码示例。
在WPF中向DataGridRowHeader添加右对齐的行号: https://blog.magnusmontin.net/2014/08/18/right-aligned-row-numbers-datagridrowheader-wpf/
您可以将TextBlock
放在RowHeaderTemplate
的{{1}}中,然后使用转换器获取该行的索引:
DataGrid
但是这种方法只有在虚拟化被禁用或者<DataGrid ItemsSource="{Binding Countries}" AutoGenerateColumns="False"
xmlns:local="clr-namespace:Mm.WpfApplication1">
<DataGrid.Columns>
<DataGridTextColumn Header="Country" Binding="{Binding Name}"/>
</DataGrid.Columns>
<DataGrid.Resources>
<local:RowNumberConverter x:Key="converter"/>
</DataGrid.Resources>
<DataGrid.RowHeaderTemplate>
<DataTemplate>
<TextBlock Text="{Binding Path=.,
RelativeSource={RelativeSource AncestorType=DataGridRow},
Converter={StaticResource converter}}"></TextBlock>
</DataTemplate>
</DataGrid.RowHeaderTemplate>
<DataGrid.RowHeaderStyle>
...
</DataGrid.RowHeaderStyle>
</DataGrid>
中只有几行时才会起作用。如果您想正确显示行号但仍保留ItemsSource
的默认虚拟化和回收行为,则可以处理DataGrid
的{{1}}事件来设置LoadingRow
1}} DataGrid
到行号的属性,然后绑定到Header
中的此属性。
另请注意,如果DataGridRow
绑定到RowHeaderTemplate
并且您在运行时动态添加或删除项目,则行号不会更新,直到您开始滚动并再次触发DataGrid
事件。
要解决此问题,您可以将事件处理程序连接到视图中ObservableCollection<T>
的{{1}}的{{1}}事件,并重置所有LoadingRow
属性发生此事件时当前位于可视树中的ItemsChanged
个元素。
请参阅以上链接以获取更多信息和完整的工作样本。