我已经将DataGrid的ItemSource绑定到DataTable,但是它显示了额外的列,请问如何去掉这些列。
我的代码:
<DataGrid Name="dataGrid" IsReadOnly="True" VerticalAlignment="Top"
ItemsSource="{Binding Cus}" AutoGenerateColumns="True"/>
它显示了额外的列,如何移除?
屏幕截图:
AutoGenerateColumns="False"
和Width="*"
。 <DataGrid x:Name="dataGrid" IsReadOnly="True" AutoGenerateColumns="False">
<DataGrid.Columns>
<DataGridTextColumn Binding="{Binding OrderId}" Header="OrderId" Width="*"/>
<DataGridTextColumn Binding="{Binding ProductId}" Width="*" Header="ProductId"/>
<DataGridTextColumn Binding="{Binding UnitPrice}" Width="*" Header="UnitPrice"/>
<DataGridTextColumn Binding="{Binding Quantity}" Width="*" Header="Quantity"/>
<DataGridTextColumn Binding="{Binding Discount}" Header="Discount"
Width="*"/>
</DataGrid.Columns>
</DataGrid>
<DataGrid HorizontalAlignment="Left" Margin="50,0,0,0" Width="500"
Name="dataGrid" IsReadOnly="True" VerticalAlignment="Top"
ItemsSource="{Binding Cus}" AutoGeneratingColumn="AutoGeneratingColumn"/>
void dataGrid_AutoGeneratingColumn(object sender, DataGridAutoGeneratingColumnEventArgs e)
{
e.Column.Width = new DataGridLength(1, DataGridLengthUnitType.Star);
}
您可以将HorizontalAlignment设置为Left。如此处所述
例如:
<DataGrid ItemsSource="{Binding}" HorizontalAlignment="Left"/>
避免的一种方法是将 AutoGenerateColumns
设置为 False
(仅限于XAML 方法)。
提供自己的列集合并将最后一列的宽度设置为 *
。
<DataGrid x:Name="dataGrid" IsReadOnly="True" AutoGenerateColumns="False">
<DataGrid.Columns>
<DataGridTextColumn Binding="{Binding OrderId}" Header="OrderId"/>
<DataGridTextColumn Binding="{Binding ProductId}" Header="ProductId"/>
<DataGridTextColumn Binding="{Binding UnitPrice}" Header="UnitPrice"/>
<DataGridTextColumn Binding="{Binding Quantity}" Header="Quantity"/>
<DataGridTextColumn Binding="{Binding Discount}" Header="Discount"
Width="*"/>
</DataGrid.Columns>
</DataGrid>
将列的绑定替换为模型类中相应的属性。
输出将类似于此:
但是,如果您希望将可用空间平均分配给所有列。 您可以将所有列的宽度设置为*
。 输出将类似于此:
我一直在为此争论,Width="\*"
解决了我的问题,而datagrid中的 ColumnWidth="*"
在我的情况下无效。
如果您想要:
则只需要将"1*"设置为最后一列。请注意:
1) Add the event handler to .xaml
2) Add the following code to .xaml.cs
private void dataGrid_AutoGeneratedColumns(object sender, EventArgs e)
{
int i = ((DataGrid)sender).Columns.Count;
DataGridColumn column = ((DataGrid)sender).Columns[i - 1];
column.Width = new DataGridLength(1, DataGridLengthUnitType.Star);
}
<Grid>
<DataGrid x:Name="datagridname" Margin="10" ItemsSource="{Binding}" IsReadOnly="True" ColumnWidth="*"/>
</Grid>
既然这是未使用的空间,另一种方法是使用加权宽度而不是固定宽度:
<DataGrid x:Name="dataGrid" IsReadOnly="True" AutoGenerateColumns="False">
<DataGrid.Columns>
<DataGridTextColumn Binding="{Binding OrderId}" Header="OrderId" Width="1*"/>
<DataGridTextColumn Binding="{Binding ProductId}" Header="ProductId" Width="1*"/>
<DataGridTextColumn Binding="{Binding UnitPrice}" Header="UnitPrice" Width="1*"/>
<DataGridTextColumn Binding="{Binding Quantity}" Header="Quantity" Width="1*"/>
ColumnWidth="*"
对我有用,但我必须强制重建,否则XAML设计器不会更新。 - Vimes