【问题标题】:How to remove extra column Datagrid如何删除额外的列Datagrid
【发布时间】:2014-01-13 06:36:23
【问题描述】:

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

我的代码:

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

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

屏幕截图:

【问题讨论】:

    标签: wpf datagrid


    【解决方案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 设置为FalseXAML 唯一方法)。

      提供您自己的列集合和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>
      

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

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

      【讨论】:

        【解决方案3】:

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

        例如:

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

        【讨论】:

          【解决方案4】:

          我为此争论了一段时间,Width="\*" 解决了我的问题,而 datagrid ColumnWidth="*" 在我的情况下不起作用。

          【讨论】:

          • ColumnWidth="*" 为我工作,但我不得不强制重建或 XAML 设计器没有更新。
          【解决方案5】:

          如果你想:

          1. 保持 AutoGenerateColumns="True" 和
          2. 保持列的宽度自动调整为 DataTable 中的数据,而不是保持相同的宽度

          您只需将“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);
              }
          

          【讨论】:

            【解决方案6】:

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

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

            【讨论】:

            • 这只会使所有列的大小相等。
            【解决方案7】:

            好吧,由于它的空间未使用,另一种方法是使用加权宽度而不是固定宽度:

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

            【讨论】:

              猜你喜欢
              • 2010-10-23
              • 2019-12-05
              • 2014-05-20
              • 2021-06-30
              • 2013-07-30
              • 2021-10-01
              • 1970-01-01
              • 2022-01-14
              • 2015-10-24
              相关资源
              最近更新 更多