web-dev-qa-db-fra.com

Comment supprimer une colonne supplémentaire

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?

enter image description here

18
Raja

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);
 }
18
Ragavan

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:

enter image description here

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:

enter image description here

18
Rohit Vats

Vous pouvez définir HorizontalAlignment sur Left. Comme décrit ici

Par exemple:

<DataGrid ItemsSource="{Binding}" HorizontalAlignment="Left"/>
9
Peter Elbracht

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.

2
Phogrammer

Ajoutez l'attribut ColumnWidth = "*" dans l'objet DataGrid.

<Grid>
    <DataGrid x:Name="datagridname" Margin="10" ItemsSource="{Binding}" IsReadOnly="True" ColumnWidth="*"/>
</Grid>
1
FBaez51

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*"/>

 

0

Si tu veux:

  1. garder AutoGenerateColumns = "True" AND
  2. garder la largeur des colonnes ajustée automatiquement aux données de la table de données plutôt que d'avoir la même largeur

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);
    }
0