如何删除额外的列Datagrid

时间:2013-12-25 08:28:55

标签: wpf datagrid

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

我的代码:

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

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

截屏: enter image description here

7 个答案:

答案 0 :(得分:19)

要避免的一种方法是将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

答案 1 :(得分: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>

解决方案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 :(得分:11)

您可以将Horizo​​ntalAlignment设置为Left。如上所述here

例如:

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

答案 3 :(得分:2)

我现在已经争吵了几次,Width="\*"解决了我的问题,而datagrid ColumnWidth="*"在我的情况下无效。

答案 4 :(得分:1)

在DataGrid对象中添加属性ColumnWidth =“ *”。

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

答案 5 :(得分: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*"/>

    

答案 6 :(得分:0)

如果你想:

  1. 保持AutoGenerateColumns =“True”AND
  2. 保持列宽度自动调整为DataTable中的数据,而不是宽度相同
  3. 您只需将“1 *”设置为最后一列。请:

    1)将事件处理程序添加到.xaml

    2)将以下代码添加到.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);
        }