Как удалить дополнительный столбец Datagrid
У меня есть привязанный источник данных к Datatable для Datagrid. он показывает дополнительные столбцы, как удалить его
Мой код:
<DataGrid Name="dataGrid" IsReadOnly="True" VerticalAlignment="Top"
ItemsSource="{Binding Cus}" AutoGenerateColumns="True"/>
он показывает дополнительные столбцы Как его удалить?
Снимок экрана:
![enter image description here]()
Ответы
Ответ 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*"/>