我已将itemsource绑定到Datatable for Datagrid。它显示了如何删除它的额外列
我的代码:
<DataGrid Name="dataGrid" IsReadOnly="True" VerticalAlignment="Top"
ItemsSource="{Binding Cus}" AutoGenerateColumns="True"/>
它显示了额外的列如何删除它?
截屏:
答案 0 :(得分:19)
要避免的一种方法是将AutoGenerateColumns
设置为False
( XAML仅接近)。
提供您自己的列集,并set width for last column
提供*
。
<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>
将列的绑定替换为模型类中的相应属性。 输出将是这样的:
但是,如果您想为所有列平均分配可用空间。你可以set width to * for all columns
。输出将是这样的:
答案 1 :(得分:19)
解决方案1:
为所有列设置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>
解决方案2: 您可以这样设置以达到您的要求
<DataGrid HorizontalAlignment="Left" Margin="50,0,0,0" Width="500"
Name="dataGrid" IsReadOnly="True" VerticalAlignment="Top"
ItemsSource="{Binding Cus}" AutoGenerateColumns="True"/>
this.dataGrid.AutoGeneratingColumn += dataGrid_AutoGeneratingColumn;
void dataGrid_AutoGeneratingColumn(object sender,
DataGridAutoGeneratingColumnEventArgs e)
{
e.Column.Width = new DataGridLength(1, DataGridLengthUnitType.Star);
}
答案 2 :(得分:11)
您可以将HorizontalAlignment设置为Left。如上所述here
例如:
<DataGrid ItemsSource="{Binding}" HorizontalAlignment="Left"/>
答案 3 :(得分:2)
我现在已经争吵了几次,Width="\*"
解决了我的问题,而datagrid ColumnWidth="*"
在我的情况下无效。
答案 4 :(得分:1)
在DataGrid对象中添加属性ColumnWidth =“ *”。
<Grid>
<DataGrid x:Name="datagridname" Margin="10" ItemsSource="{Binding}" IsReadOnly="True" ColumnWidth="*"/>
</Grid>
答案 5 :(得分:0)
因为它的未使用空间,另一种方法是使用加权宽度而不是固定宽度:
<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*"/>
答案 6 :(得分:0)
如果你想:
您只需将“1 *”设置为最后一列。请:
1)将事件处理程序添加到.xaml
2)将以下代码添加到.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);
}