j'ai lier itemssource à Datatable pour Datagrid. il montre des colonnes supplémentaires comment l'enlever
Mon code:
<DataGrid Name="dataGrid" IsReadOnly="True" VerticalAlignment="Top"
ItemsSource="{Binding Cus}" AutoGenerateColumns="True"/>
il montre des colonnes supplémentaires Comment l'enlever?
Solution 1:
Définir AutoGenerateColumns = "False" et Width = "*" pour toutes les colonnes
<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>
Solution 2: Vous pouvez définir comme ceci pour répondre à vos besoins
<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);
}
Une façon d'éviter consiste à définir AutoGenerateColumns
sur False
( Approche XAML uniquement ).
Fournissez votre propre collection de colonnes et 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>
Remplacez les liaisons de vos colonnes avec les propriétés correspondantes dans votre classe de modèle . Le résultat sera le suivant:
Toutefois, si vous souhaitez répartir l’espace disponible de manière égale pour toutes les colonnes. Vous pouvez set width to * for all columns
. La sortie sera comme ceci:
Vous pouvez définir HorizontalAlignment sur Left. Comme décrit ici
Par exemple:
<DataGrid ItemsSource="{Binding}" HorizontalAlignment="Left"/>
Je me disputais pour cela depuis quelques temps maintenant, le Width="\*"
a résolu mon problème alors que la grille de données ColumnWidth="*"
ne fonctionnait pas dans mon cas.
Ajoutez l'attribut ColumnWidth = "*" dans l'objet DataGrid.
<Grid>
<DataGrid x:Name="datagridname" Margin="10" ItemsSource="{Binding}" IsReadOnly="True" ColumnWidth="*"/>
</Grid>
Eh bien, depuis son espace inutilisé, une autre solution consiste à utiliser une largeur pondérée plutôt que fixe:
<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*"/>
Si tu veux:
vous devez définir "1 *" sur la dernière colonne uniquement. S'il vous plaît:
1) Ajoutez le gestionnaire d’événements à .xaml
2) Ajoutez le code suivant à .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);
}