wpf datagrid行中的行号

时间:2014-02-25 06:20:17

标签: c# .net wpf xaml data-binding

我有datagrid绑定ICollectionView列表对象。基本上,行是根据一列中的值进行过滤的。现在每行都有一个索引列。这基本上是行号。由于行被过滤,行号会发生变化。如何处理?

基本上,DataGrid绑定到类对象列表。

 Class city
 {
   Int Index;
   String Name;
   string location; 
  }

 List<city> Cities;

当我创建对象时,index具有根据索引中的项目数的值。因此第一个对象将具有index = 0,第二个将具有index = 1,依此类推。索引是网格中的一列。现在让我说我有2个位置迪拜的物体。和一个与开罗(第三个对象,索引= 3)。当我选择Cairo时,将显示该行。但由于我之前添加了索引,索引号= 3,因为我希望它为1,因为过滤器后面只有一行。

2 个答案:

答案 0 :(得分:2)

如果要显示行索引,可以使用AlternationIndex。使用AlternationIndex时,有两件事很重要:

  • 为控件设置AlternationCount。这就像AlternationIndex的计数限制之后,如果您的元素数量超过该数量,它将从0重新开始。理想情况下,如果您不希望它从0
  • 重新启动,您可以将其绑定到项目计数
  • 当Binding AlternationIndex注意Source时。对于ListBox,对于其他人,{RelativeSource AncestorType=ListBoxItem}
  • 将为{RelativeSource Mode=TemplatedParent}

请尝试以下示例:

<ListBox Name="CityListBox" AlterationCount={Binding CountOfItems}
    <ListBox.ItemTemplate>
        <DataTemplate DataType="City">
            <TextBlock>
                    <Run Text="{Binding Name}"></Run>
                    <Run Text=" : "></Run>
                    <Run Text="{Binding Country}"></Run>
                    <Run Text=" : "></Run>
                    <Run Text="{Binding RelativeSource={RelativeSource AncestorType=ListBoxItem},
                                Path=(ItemsControl.AlternationIndex), Mode=OneWay}"></Run>
            </TextBlock>
        </DataTemplate>
    </ListBox.ItemTemplate>
</ListBox>

<强>输出

CityA : CountryA : 0
CityB : CountryB : 1
CityC : CountryC : 2

答案 1 :(得分:0)

通常需要做的是先设置索引的值,然后应用过滤器。

包含System.Linq命名空间并添加以下内容

cities = cities.Select((item, index) =>
        new city()
        {
            Index = index,
            Name = item.Name,
            location =  item.location
        });

这将返回第一个索引为零的城市列表。如果您希望从一个开始,只需将其更改为:

cities = cities.Select((item, index) =>
        new city()
        {
            Index = index + 1,
            Name = item.Name,
            location =  item.location
        });

完成此操作后,您应该应用过滤器,除非您要更改值,否则不应覆盖过滤器。