C# 如何在WPF数据网格中添加页脚行?
如何在wpf datagrid中添加页脚行?我必须在wpf数据网格中为每列的总和添加一行,我不想使用任何dll或telerik之类的东西,只使用microsoft组件来实现这一点。我正在尝试这样做:C# 如何在WPF数据网格中添加页脚行?,c#,wpf,C#,Wpf,如何在wpf datagrid中添加页脚行?我必须在wpf数据网格中为每列的总和添加一行,我不想使用任何dll或telerik之类的东西,只使用microsoft组件来实现这一点。我正在尝试这样做: 我还尝试添加一个网格而不是textblock,但是在调整datagrid列的大小时,它们无法调整大小,并且看起来非常难看。试试这个 <ScrollViewer VerticalAlignment="Top" HorizontalScrollBarVisibility="Auto">
我还尝试添加一个网格而不是textblock,但是在调整datagrid列的大小时,它们无法调整大小,并且看起来非常难看。试试这个
<ScrollViewer VerticalAlignment="Top" HorizontalScrollBarVisibility="Auto">
<StackPanel>
<DataGrid ScrollViewer.HorizontalScrollBarVisibility="Disabled">
<DataGrid.Columns>
<DataGridTextColumn x:Name="Header1" Header="Header1"></DataGridTextColumn>
<DataGridTextColumn x:Name="Header2" Header="Header2"></DataGridTextColumn>
<DataGridTextColumn x:Name="Header3" Header="Header3"></DataGridTextColumn>
</DataGrid.Columns>
<TextBlock></TextBlock>
<TextBlock></TextBlock>
</DataGrid>
<StackPanel HorizontalAlignment="Left" Orientation="Horizontal">
<Grid Width="{Binding ElementName=Header1,Path=ActualWidth}">
<TextBlock Margin="5,0,0,0" Text="Footer1"></TextBlock>
</Grid>
<Grid Width="{Binding ElementName=Header2,Path=ActualWidth}">
<TextBlock Text="Footer2" Margin="5,0,0,0"></TextBlock>
</Grid>
<Grid Width="{Binding ElementName=Header3,Path=ActualWidth}">
<TextBlock Text="Footer3" Margin="5,0,0,0"></TextBlock>
</Grid>
</StackPanel>
</StackPanel>
</ScrollViewer>
结果
海娜·帕蒂尔的回答有一些问题。 当DataGrid的布局发生更改时,如滚动条可见或窗口大小调整时。然后页脚的位置发生变化 其概念是设置页脚文本块的左边距和宽度 当布局更新时
编辑
全部的
0
私有void DGSalesINvoice_布局已更新(对象发送方,事件参数e)
{
厚度t=lbl总边缘;
t、 左=(DGSalesINvoice.Columns[0]。实际宽度+7);
lblTotal.Margin=t;
lblTotal.Width=DGSalesINvoice.Columns[1]。实际宽度;
lblTotalSalesInvoiceAmount.Width=DGSalesINvoice.Columns[2]。实际宽度;
}
它可以工作,但很难将页脚与总和绑定。假设我不想显示页脚3,而是想显示列或页眉3记录的总和,那么它就没有绑定。您可以创建一个附加属性并向其显示总和。
<DataGrid x:Name="DGSalesINvoice" LayoutUpdated="DG_LayoutUpdated">
<DataGridTextColumn x:Name="DG_COL_IdSalesInvoice" Width="Auto" Header="ID" Binding="{Binding IdSalesInvoice}" />
<DataGridTextColumn x:Name="DG_COL_CustomerName" Width="*" Header="Customer" Binding="{Binding CustomerName}" />
<DataGridTemplateColumn x:Name="DG_COL_SalesInvoiceAmount" Width="Auto" Header="Invoice Amount">
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<TextBlock HorizontalAlignment="Right" Text="{Binding SalesAmount}"></TextBlock>
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
<DataGridTemplateColumn x:Name="DG_COL_EditBtn" Width="50">
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<Button x:Name="btnEditCompany" Tag="{Binding IdSalesInvoice}">Edit</Button>
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
</DataGrid>
<StackPanel Orientation="Horizontal" Grid.Row="2" Background="GhostWhite">
<TextBlock x:Name="lblTotal" TextAlignment="Right" FontWeight="Bold">Total</TextBlock>
<TextBlock x:Name="lblTotalSalesInvoiceAmount" TextAlignment="Right" FontWeight="Bold">0.00</TextBlock>
</StackPanel>
private void DGSalesINvoice_LayoutUpdated(object sender, EventArgs e)
{
Thickness t = lblTotal.Margin;
t.Left = (DGSalesINvoice.Columns[0].ActualWidth + 7);
lblTotal.Margin = t;
lblTotal.Width = DGSalesINvoice.Columns[1].ActualWidth;
lblTotalSalesInvoiceAmount.Width = DGSalesINvoice.Columns[2].ActualWidth;
}