如何删除额外的列Datagrid

Raj*_*aja 19 wpf datagrid

我已将itemsource绑定到Datatable for Datagrid.它显示了如何删除它的额外列

我的代码:

<DataGrid Name="dataGrid"  IsReadOnly="True"  VerticalAlignment="Top"
          ItemsSource="{Binding Cus}" AutoGenerateColumns="True"/>
Run Code Online (Sandbox Code Playgroud)

它显示额外的列如何删除它?

截屏: 在此输入图像描述

Roh*_*ats 19

要避免的一种方法是设置AutoGenerateColumnsFalse(仅限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>
Run Code Online (Sandbox Code Playgroud)

将列的绑定替换为模型类中的相应属性.输出将是这样的:

在此输入图像描述

但是,如果要为所有列平均分配可用空间.你可以set width to * for all columns.输出将是这样的:

在此输入图像描述


Rag*_*van 19

解决方案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>
Run Code Online (Sandbox Code Playgroud)

解决方案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);
 }
Run Code Online (Sandbox Code Playgroud)


小智 16

您可以将Horizo​​ntalAlignment设置为Left.如上所述这里

例如:

<DataGrid ItemsSource="{Binding}" HorizontalAlignment="Left"/>
Run Code Online (Sandbox Code Playgroud)