DataGrid相邻行有相同内容时对指定列合并

/// <summary>
/// DataGrid相邻行有相同内容时对指定列合并
/// </summary>
/// <param name="spangrid">格式化的DataGrid的ID</param>
/// <param name="spancell">要合并的列</param>        
/// <param name="spanby">合并所依据数据的列</param>

     public   void  FormatGrid(DataGrid spangrid, int  spancell, int  spanby)
    
{
      
if(spanby<0 || spanby>spangrid.Items.Count)
          
return;
          
int rowspan = 1;
          
for(int i = 1;i<spangrid.Items.Count;i++)
         
{
        
if(spangrid.Items[i].Cells[spanby].Text == spangrid.Items[i-1].Cells[spanby].Text)
            
{
                
               rowspan 
+=1;
               spangrid.Items[i].Cells[spancell].Visible 
= false;
               spangrid.Items[i
-rowspan+1].Cells[spancell].RowSpan = rowspan;
            }

        
else
        
{    
           
string str = spangrid.Items[i].Cells[spanby].Text;
           
string str1 = spangrid.Items[i-1].Cells[spanby].Text;
           rowspan 
= 1;
        }
    
              }

    }
 
可以通过使用 WPF DataGrid 控件的 Grouping 功能来实现合并相同并展示效果。 首先在 XAML 中设置 DataGrid 的 GroupStyle,如下所示: ```xml <DataGrid.GroupStyle> <GroupStyle> <GroupStyle.ContainerStyle> <Style TargetType="{x:Type GroupItem}"> <Setter Property="Template"> <Setter.Value> <ControlTemplate TargetType="{x:Type GroupItem}"> <StackPanel> <TextBlock Text="{Binding Path=Name}" FontWeight="Bold" Background="LightGray"/> <ItemsPresenter/> </StackPanel> </ControlTemplate> </Setter.Value> </Setter> </Style> </GroupStyle.ContainerStyle> </GroupStyle> </DataGrid.GroupStyle> ``` 然后在绑定的数据源中添加一个用于分组的属性,例如: ```csharp public class MyData { public string Name { get; set; } public int Age { get; set; } public string City { get; set; } public string Group { get { return Name + Age.ToString(); } } } List<MyData> dataList = new List<MyData> { new MyData { Name = "John", Age = 25, City = "New York" }, new MyData { Name = "Mary", Age = 30, City = "Los Angeles" }, new MyData { Name = "John", Age = 25, City = "Chicago" }, new MyData { Name = "Peter", Age = 35, City = "San Francisco" } }; ``` 最后在 DataGrid 中绑定数据源并设置分组的属性即可: ```xml <DataGrid ItemsSource="{Binding dataList}" AutoGenerateColumns="False"> <DataGrid.Columns> <DataGridTextColumn Header="Name" Binding="{Binding Name}"/> <DataGridTextColumn Header="Age" Binding="{Binding Age}"/> <DataGridTextColumn Header="City" Binding="{Binding City}"/> </DataGrid.Columns> <DataGrid.GroupStyle> <GroupStyle> <GroupStyle.ContainerStyle> <Style TargetType="{x:Type GroupItem}"> <Setter Property="Template"> <Setter.Value> <ControlTemplate TargetType="{x:Type GroupItem}"> <StackPanel> <TextBlock Text="{Binding Path=Name}" FontWeight="Bold" Background="LightGray"/> <ItemsPresenter/> </StackPanel> </ControlTemplate> </Setter.Value> </Setter> </Style> </GroupStyle.ContainerStyle> </GroupStyle> </DataGrid.GroupStyle> <DataGrid.GroupDescriptions> <PropertyGroupDescription PropertyName="Group"/> </DataGrid.GroupDescriptions> </DataGrid> ``` 这样就可以把数据按照 Name 和 Age 属性合并,展示在一个分组中。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值