Подтвердить что ты не робот

Как удалить дополнительный столбец Datagrid

У меня есть привязанный источник данных к Datatable для Datagrid. он показывает дополнительные столбцы, как удалить его

Мой код:

<DataGrid Name="dataGrid"  IsReadOnly="True"  VerticalAlignment="Top"
          ItemsSource="{Binding Cus}" AutoGenerateColumns="True"/>

он показывает дополнительные столбцы Как его удалить?

Снимок экрана: enter image description here

4b9b3361

Ответ 1

Решение 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

Один из способов избежать - установить 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>

Замените привязки для ваших столбцов соответствующими свойствами в вашем классе модели. Результат будет таким:

enter image description here

Однако, если вы хотите распределить доступное пространство одинаково для всех столбцов. Вы можете set width to * for all columns. Результат будет таким:

enter image description here

Ответ 3

Вы можете установить HorizontalAlignment влево. Как описано здесь

Например:

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

Ответ 4

Я боролся за это несколько раз, Width="\*" решил мою проблему, а datagrid ColumnWidth="*" не работал в моем случае.

Ответ 5

Ну, так как его неиспользуемое пространство, другой способ будет использовать взвешенную ширину, а не фиксированную:

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