[英]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
更改為internal
或private
,並且不會顯示。
如果想要控制數據網格,則指定要顯示的列並忽略任何有問題的列
這是通過設置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.