簡體   English   中英

C#WPF - 如何刪除DataGrid中的列

[英]C# WPF - How to delete a column in DataGrid

我有這個簡單的用戶控件(XAML):

<UserControl x:Class="finalProject_ClientX.queryResults"
         xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
         xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
         xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
         xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
         mc:Ignorable="d" 
         d:DesignHeight="500" d:DesignWidth="500" Loaded="UserControl_Loaded">
<Grid Height="476" Background="#70BCE373">
    <Grid.ColumnDefinitions>
        <ColumnDefinition Width="494" />
        <ColumnDefinition Width="0*" />
        <ColumnDefinition Width="6*" />
    </Grid.ColumnDefinitions>
    <DataGrid AutoGenerateColumns="true" Height="374" HorizontalAlignment="Left" Margin="27,51,0,0" Name="dataGrid1" VerticalAlignment="Top" Width="448" SelectionChanged="dataGrid1_SelectionChanged" />
    <Label Content="Query Results" Height="54" HorizontalAlignment="Stretch" Margin="27,0,19,0" Name="label1" VerticalAlignment="Top" DataContext="{Binding}" FontFamily="Tunga" FontSize="36" FontWeight="Bold" FontStyle="Normal" Opacity="1" Foreground="#FF0059B3" HorizontalContentAlignment="Center" />
    <Button Content="Button" Height="23" HorizontalAlignment="Left" Margin="189,441,0,0" Name="button1" VerticalAlignment="Top" Width="75" />
</Grid>

我根據這個方法設置表行:

public void setList<T>(List<T> list)
{
    dataGrid1.ItemsSource = list;

    //dataGrid1.Columns.RemoveAt(1);
    dataGrid1.Columns[1].Visibility = Visibility.Collapsed; 
}

該方法獲取通用列表,並在dataGrid中設置列表。 但我得到另一個領域,這個領域沒有包括在內。 該字段是“ExtensionData”。 。

我嘗試用以下行刪除/隱藏此列:

dataGrid1.Columns[1].Visibility = Visibility.Collapsed; 

要么

dataGrid1.Columns.RemoveAt(1);

'1'因為它總是第一列('0'不工作)。 我收到這個錯誤:

mscorlib.dll中發生未處理的“System.ArgumentOutOfRangeException”類型異常

附加信息:指數超出范圍。 必須是非負數且小於集合的大小。

AutoGeneratingColumn添加到DataGrid

<DataGrid AutoGenerateColumns="true"
          AutoGeneratingColumn="DataGrid_OnAutoGeneratingColumn"/>

你的代碼背后有一個方法:

private void DataGrid_OnAutoGeneratingColumn(object sender, DataGridAutoGeneratingColumnEventArgs e)
{
if (e.PropertyName == "ExtensionData")
   {
       e.Column = null;
   }
}

這應該刪除給定名稱的不需要的列。 但一般來說,最好在將列表提供給DataGrid之前從列表中刪除不需要的列表項。 真的不能列在你的列表中。

datagrid的AutoGenerate函數盡職盡責地通過反射將每列報告為已發現的公共屬性。

如果前提是顯示未知實例,因為它是T通用實例,為什么代碼會選擇隨機刪除列?

對不起這個前提毫無意義。

仍然可以綁定到通用項,但是很可能會使通用列表遵循特定的Interface ,然后僅指定該接口的列。


此外,如果不希望顯示列,請將屬性從public更改為internalprivate ,並且不會顯示。


如果想要控制數據網格,則指定要顯示的列並忽略任何有問題的

這是通過設置AutoGenerateColumns=False然后在xaml中指定所需的列來完成的。

<DataGrid ItemsSource="{Binding  MyData}" AutoGenerateColumns="False" >
   <DataGrid.Columns>
      <DataGridTextColumn Header="Person's Age"
                      Binding="{Binding Age}"/>
      <DataGridTextColumn Header="Birthday"
                      Binding="{Binding Birthday}"/>
      <DataGridTextColumn Header="First Name"
                      Binding="{Binding Name}"/>
   </DataGrid.Columns>
</DataGrid>

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM