2013-12-25 8 views
14

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

Мой код:

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

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

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

ответ

14

Решение 1:

Set 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); 
} 
16

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

4

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

Например:

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

Если бы я тебя, я хотел бы добавить некоторые содержимое из связанного ресурса, на всякий случай, если это изменится в будущем. –

2

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

+0

'ColumnWidth =" * "' работал для меня, но мне пришлось принудительно перестроить или дизайнер XAML не обновил. – Vimes

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

Смежные вопросы