【问题标题】:Hide Datagrid Column based on its Property name根据属性名称隐藏 Datagrid 列
【发布时间】:2014-01-20 10:42:03
【问题描述】:

我有一个DataGrid 定义如下:

<DataGrid Name="dtMydatagrid" Margin="10,10,10,10" RowHeight="20" AutoGenerateColumns="True" ItemsSource="{Binding}" Height="auto" Width="auto">
   <DataGrid.Columns>
      <DataGridTemplateColumn Header="">
         <DataGridTemplateColumn.CellTemplate>
            <DataTemplate>
               <TextBox x:Name="TXT" Background="Transparent" Width="15" IsReadOnly="True" Visibility="Hidden" Margin="0,0,0,0"/>
               <DataTemplate.Triggers>
                  <DataTrigger Binding="{Binding Path=IsBKM}" Value="true">
                     <Setter Property="Background" Value="AQUA" TargetName="TXT"/>
                     <Setter Property="Visibility" Value="Visible" TargetName="TXT"/>
                  </DataTrigger>
               </DataTemplate.Triggers>
            </DataTemplate>
         </DataGridTemplateColumn.CellTemplate>
      </DataGridTemplateColumn>
   </DataGrid.Columns>
</DataGrid>

现在,我的类中有一个名为 IsBKM 的布尔属性,DataGridTemplateColumn 绑定到该属性。 因此,它显示为CheckBox。 我不想在我的DataGrid 中显示IsBKM 列。我可以使用触发器并隐藏名称为 IsBKM任何不同的解决方案的列吗?

提前致谢。

【问题讨论】:

    标签: wpf datagrid wpfdatagrid


    【解决方案1】:

    您可以处理DataGrid.AutoGeneratedColumns Event 并从那里设置列的Visibility 属性。您应该能够执行以下操作:

    private void DataGridAutoGeneratingColumn(object sender, 
        DataGridAutoGeneratingColumnEventArgs e)
    {
        DataGrid dataGrid = sender as DataGrid;
        if (dataGrid != null && IsBKM) dataGrid.Columns[0].Visible = false;
    }
    

    更新>>>

    您可以使用e.Column.Header 属性来检查列的名称,然后改用它。但是,您的列当前没有设置Header。您还可以设置列名(在 XAML 中),然后检查 Name 值,而不是使用 Header 属性:

    private void DataGridAutoGeneratingColumn(object sender, 
        DataGridAutoGeneratingColumnEventArgs e)
    {
        if (e.Column.Name == "IsBKM" && IsBKM)
        {
            e.Column.Visibility = Visibility.Collapsed;
        }
    }
    

    【讨论】:

    • 我不能检查我的 xaml 中的列名。
    • 您可以遍历Columns 集合,直到找到带有Header == "the column header text" 的集合,然后使用它。但是,您的列当前没有设置Header。您还可以设置列名(在 XAML 中),然后检查 Name 值,而不是使用 Header 属性。
    • 无需遍历所有列,您在事件参数中拥有所需的一切:if (e.PropertyName == "IsBKM") e.Column.Visibility = Visibility.Collapsed。跨度>
    • @Dtex,您假设用户希望对每一列都执行此操作。
    • 不,仅针对将绑定到 IdBKM 属性的列。您的解决方案也会为每一列调用(每次迭代列集合)。
    猜你喜欢
    • 2011-10-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-11-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多