Joh*_*hnB 25 c# wpf wpfdatagrid
我只想在我最左边的列中显示行号DataGrid
.这有什么属性吗?
请记住,这不是我桌子的主键.当列排序时,我不希望这些行号与它们的行一起移动.我基本上想要一个运行计数.它甚至不需要标题.
Fre*_*lad 35
一种方法是在DataGrid的LoadingRow事件中添加它们
<DataGrid Name="DataGrid" LoadingRow="DataGrid_LoadingRow" ...
void DataGrid_LoadingRow(object sender, DataGridRowEventArgs e)
{
e.Row.Header = (e.Row.GetIndex()).ToString();
}
Run Code Online (Sandbox Code Playgroud)
在源列表中添加或删除项目时,这些数字可能会暂时不同步.有关此问题的修复,请参阅此处附加的行为:
WPF 4 DataGrid:将行号放入RowHeader
可以这样使用
<DataGrid ItemsSource="{Binding ...}"
behaviors:DataGridBehavior.DisplayRowNumber="True">
Run Code Online (Sandbox Code Playgroud)
添加关于Fredrik Hedblad答案的简短信息.
<DataGrid Name="DataGrid" LoadingRow="DataGrid_LoadingRow" ...
void DataGrid_LoadingRow(object sender, DataGridRowEventArgs e)
{
e.Row.Header = (e.Row.GetIndex()+1).ToString();
}
Run Code Online (Sandbox Code Playgroud)
...如果你想从1开始编号
如果您的数据网格将其ItemsSource绑定到集合,请将数据网格的AlternationCount属性绑定到集合的count属性,或绑定到DataGrid的Items.Count属性,如下所示:
<DataGrid ItemsSource="{Binding MyObservableCollection}" AlternationCount="{Binding MyObservableCollection.Count}" />
Run Code Online (Sandbox Code Playgroud)
要么:
<DataGrid ItemsSource="{Binding MyObservableCollection}" AlternationCount="{Binding Items.Count, RelativeSource={RelativeSource Self}" />
Run Code Online (Sandbox Code Playgroud)
要么应该工作.
然后,假设您在最左侧的列中使用DataGridTextColumn,则在DataGrid.Columns定义中执行以下操作:
<DataGrid.Columns>
<DataGridTextColumn Binding="{Binding AlternationIndex, RelativeSource={RelativeSource AncestorType=DataGridRow}}"
</DataGrid.Columns>
Run Code Online (Sandbox Code Playgroud)
如果您不想从0开始,可以在绑定中添加转换器以增加索引.
这是一个老问题,但我想分享一些东西。我有一个类似的问题,我所需要的只是一个简单RowHeader
的行数,而 Fredrik Hedblad 的回答对我的问题来说几乎是完整的。
虽然这很棒:
<DataGrid Name="DataGrid" LoadingRow="DataGrid_LoadingRow" ...
void DataGrid_LoadingRow(object sender, DataGridRowEventArgs e)
{
e.Row.Header = (e.Row.GetIndex()).ToString();
}
Run Code Online (Sandbox Code Playgroud)
删除和添加项目时,我的标题搞砸了。如果您有负责该操作的按钮,只需dataGrid.Items.Refresh();
在“删除”代码下添加,就像我的情况一样:
private void removeButton_Click(object sender, RoutedEventArgs e)
{
// delete items
dataGrid.Items.Refresh();
}
Run Code Online (Sandbox Code Playgroud)
这为我解决了不同步的计数,因为刷新项目DataGrig_LoadingRow
再次调用。