none
Zeilen aus DataGrid ausblenden wenn DataGridCheckBoxColumn aktiviert ist RRS feed

  • Frage

  • Hallo,

    such seit einiger Zeit nach einer Lösung für mein Problem. Und zwar habe ein DataGrid die an Access Datenbank angebunden ist mit einer Checkbox. Ich möchte die Zeile ausblenden in der die DataGridCheckBoxColumn aktiert ist. Kann einer Helfen?

    Bitte in C#. Danke


    Hier ist mein XAML:

    <Window.Resources>
    <local:InfobuchDataSet x:Key="infobuchDataSet"/>
    <CollectionViewSource x:Key="cPInfosViewSource" Source="{Binding CPInfos, Source={StaticResource infobuchDataSet}}"/>
    </Window.Resources>
    <Grid DataContext="{StaticResource cPInfosViewSource}">
    <DataGrid x:Name="cPInfosDataGrid" AutoGenerateColumns="False" EnableRowVirtualization="True" ItemsSource="{Binding }" Margin="10,433,10,10" RowDetailsVisibilityMode="VisibleWhenSelected" SelectionChanged="cPInfosDataGrid_SelectionChanged">
    <DataGrid.Columns>
    <DataGridTextColumn x:Name="iD_CPInfoColumn" Binding="{Binding ID_CPInfo}" Header="ID CPInfo" Width="SizeToHeader"/>
    <DataGridTextColumn x:Name="element_CPColumn" Binding="{Binding Element_CP}" Header="Element CP" Width="SizeToHeader"/>
    <DataGridTextColumn x:Name="elementstandort_CPColumn" Binding="{Binding Elementstandort_CP}" Header="Elementstandort CP" Width="SizeToHeader"/>
    <DataGridTextColumn x:Name="cMC_CPColumn" Binding="{Binding CMC_CP}" Header="CMC CP" Width="SizeToHeader"/>
    <DataGridTextColumn x:Name="melder_CPColumn" Binding="{Binding Melder_CP}" Header="Melder CP" Width="SizeToHeader"/>
    <DataGridTemplateColumn x:Name="eingetragen_amCPColumn" Header="Eingetragen am CP" Width="SizeToHeader">
    <DataGridTemplateColumn.CellTemplate>
    <DataTemplate>
    <DatePicker SelectedDate="{Binding Eingetragen_amCP, Mode=TwoWay, NotifyOnValidationError=true, ValidatesOnExceptions=true}"/>
    </DataTemplate>
    </DataGridTemplateColumn.CellTemplate>
    </DataGridTemplateColumn>
    <DataGridTextColumn x:Name="info1_CPColumn" Binding="{Binding Info1_CP}" Header="Info 1 CP" Width="SizeToHeader"/>
    <DataGridTextColumn x:Name="info2_CPColumn" Binding="{Binding Info2_CP}" Header="Info 2 CP" Width="SizeToHeader"/>
    <DataGridCheckBoxColumn x:Name="erledigt_CPColumn" Binding="{Binding Erledigt_CP, Mode=TwoWay}" Header="Erledigt CP" Width="SizeToHeader"/>
    <DataGridTextColumn x:Name="erledigt_amCPColumn" Binding="{Binding Erledigt_amCP}" Header="Erledigt am CP" Width="SizeToHeader"/>
    <DataGridTextColumn x:Name="erledigt_durchCPColumn" Binding="{Binding Erledigt_durchCP}" Header="Erledigt durch CP" Width="SizeToHeader"/>

    <!--Binding="{Binding Erledigt_CP }" -->
    </DataGrid.Columns>

    Über Lösungen würde ich mich freuen.

    • Bearbeitet DSCH5230 Dienstag, 15. August 2017 08:50
    Dienstag, 15. August 2017 08:47

Antworten

  • Hi,
    wenn Du einen Filter auf die Sicht für das DataGrid setzt, welcher die Checkbox-Spalte prüft, kannst Du auf einfache Art und Weise die entsprechenden Zeile ausblenden.

    --
    Viele Grüsse
    Peter Fleischer (ehem. MVP)
    Meine Homepage mit Tipps und Tricks

    Dienstag, 15. August 2017 08:58
  • Hallo DSCH5230 :-),

    ich denke, das Nachfolgende ist das, was Peter meinte:

    MainWindow.xaml

        <Window.DataContext>
            <local:InfobuchDataSet/>
        </Window.DataContext>
        <Window.Resources>
            <CollectionViewSource 
                x:Key="cPInfosViewSource" 
                Source="{Binding}" 
                Filter="cPInfosViewSource_Filter"/>
        </Window.Resources>
        <DockPanel>
            <CheckBox 
                Name="statusCheckBox" Content="Erledigt_CP" 
                Margin="10" DockPanel.Dock="Top"
                IsThreeState="True"
                Click="statusCheckBox_Click"/>
            <DataGrid 
                DockPanel.Dock="Bottom"
                x:Name="cPInfosDataGrid" 
                AutoGenerateColumns="False" 
                EnableRowVirtualization="True" 
                ItemsSource="{Binding Source={StaticResource cPInfosViewSource}}" 
                RowDetailsVisibilityMode="VisibleWhenSelected" 
                SelectionChanged="cPInfosDataGrid_SelectionChanged">
                <DataGrid.Columns>
                    <DataGridTextColumn x:Name="iD_CPInfoColumn" Binding="{Binding ID_CPInfo}" Header="ID CPInfo" Width="SizeToCells" Visibility="Hidden"/>
                    <DataGridCheckBoxColumn x:Name="erledigt_CPColumn" Binding="{Binding Erledigt_CP, Mode=TwoWay}" Header="Erledigt CP" Width="SizeToHeader"/>
                    <DataGridTextColumn x:Name="element_CPColumn" Binding="{Binding Element_CP}" Header="Element CP" Width="SizeToCells"/>
                    <DataGridTextColumn x:Name="elementstandort_CPColumn" Binding="{Binding Elementstandort_CP}" Header="Elementstandort CP" Width="SizeToCells"/>
                    <DataGridTextColumn x:Name="cMC_CPColumn" Binding="{Binding CMC_CP}" Header="CMC CP" Width="SizeToCells"/>
                    <DataGridTextColumn x:Name="melder_CPColumn" Binding="{Binding Melder_CP}" Header="Melder CP" Width="SizeToCells"/>
                    <DataGridTemplateColumn x:Name="eingetragen_amCPColumn" Header="Eingetragen am CP" Width="SizeToCells">
                        <DataGridTemplateColumn.CellTemplate>
                            <DataTemplate>
                                <DatePicker SelectedDate="{Binding Eingetragen_amCP, Mode=TwoWay, NotifyOnValidationError=true, ValidatesOnExceptions=true}"/>
                            </DataTemplate>
                        </DataGridTemplateColumn.CellTemplate>
                    </DataGridTemplateColumn>
                    <DataGridTextColumn x:Name="info1_CPColumn" Binding="{Binding Info1_CP}" Header="Info 1 CP" Width="SizeToCells"/>
                    <DataGridTextColumn x:Name="info2_CPColumn" Binding="{Binding Info2_CP}" Header="Info 2 CP" Width="SizeToCells"/>
                    <DataGridTextColumn x:Name="erledigt_amCPColumn" Binding="{Binding Erledigt_amCP}" Header="Erledigt am CP" Width="SizeToCells"/>
                    <DataGridTextColumn x:Name="erledigt_durchCPColumn" Binding="{Binding Erledigt_durchCP}" Header="Erledigt durch CP" Width="SizeToCells"/>
    
                    <!--Binding="{Binding Erledigt_CP }" -->
                </DataGrid.Columns>
            </DataGrid>
        </DockPanel>

    MainWindow.xaml.cs

        public partial class MainWindow : Window
        {
            private CollectionViewSource _cPInfosViewSource;
    
            public MainWindow()
            {
                InitializeComponent();
            }
    
            private void cPInfosDataGrid_SelectionChanged(object sender, SelectionChangedEventArgs e)
            {
            }
    
            private void cPInfosViewSource_Filter(object sender, FilterEventArgs e)
            {
                Infobuch infoBuch = e.Item as Infobuch;
                if (null == infoBuch)
                    return;
    
                if(null==statusCheckBox.IsChecked)
                {
                    e.Accepted = true;
                }
                else
                {
                    e.Accepted = infoBuch.Erledigt_CP == statusCheckBox.IsChecked.Value;
                }
            }
    
            private void Window_Loaded(object sender, RoutedEventArgs e)
            {
                _cPInfosViewSource = FindResource("cPInfosViewSource") as CollectionViewSource;
                statusCheckBox.IsChecked = null;
                _cPInfosViewSource.View.Refresh();
            }
    
            private void statusCheckBox_Click(object sender, RoutedEventArgs e)
            {
                _cPInfosViewSource.View.Refresh();
            }
        }
    

    InfoBuch.cs

        public class InfobuchDataSet : ObservableCollection<Infobuch>
        {
            public InfobuchDataSet()
            {
                CreateData();
            }
    
            private void CreateData()
            {
                for(int ii=0;ii<10;ii++)
                {
                    Add(new Infobuch()
                    {
                        ID_CPInfo = Guid.NewGuid(),
                        CMC_CP = string.Format("CMC_CP - {0:D2}", ii),
                        Eingetragen_amCP = DateTime.Now - new TimeSpan((ii+1)*50, 13, 0),
                        Elementstandort_CP = string.Format("Elementstandort_CP - {0:D2}", ii),
                        Element_CP = string.Format("Element_CP - {0:D2}", ii),
                        Erledigt_amCP = DateTime.Now - new TimeSpan((ii + 1) * 30, 18, 0),
                        Erledigt_CP= Convert.ToBoolean(ii % 2),
                        Erledigt_durchCP = string.Format("Erledigt_durchCP - {0:D2}", ii),
                        Info1_CP = string.Format("Info1_CP - {0:D2}", ii),
                        Info2_CP = string.Format("Info2_CP - {0:D2}", ii),
                        Melder_CP = string.Format("Melder_CP - {0:D2}", ii),
                    });
                }
            }
        }
    
        public class Infobuch : INotifyPropertyChanged
        {
            private Guid _ID_CPInfo;
            private string _Element_CP;
            private string _Elementstandort_CP;
            private string _CMC_CP;
            private string _Melder_CP;
            private DateTime _Eingetragen_amCP;
            private string _Info1_CP;
            private string _Info2_CP;
            private bool _Erledigt_CP;
            private DateTime _Erledigt_amCP;
            private string _Erledigt_durchCP;
    
            public event PropertyChangedEventHandler PropertyChanged;
            public void NotifyPropertyChanged([CallerMemberName] string propertyName = "")
            {
                PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
            }
    
            public Guid ID_CPInfo
            {
                get { return _ID_CPInfo; }
                set
                {
                    if(_ID_CPInfo!=value)
                    {
                        _ID_CPInfo = value;
                        NotifyPropertyChanged();
                    }
                }
            }
    
            public string Element_CP
            {
                get { return _Element_CP; }
                set
                {
                    if (_Element_CP != value)
                    {
                        _Element_CP = value;
                        NotifyPropertyChanged();
                    }
                }
            }
    
            public string Elementstandort_CP
            {
                get { return _Elementstandort_CP; }
                set
                {
                    if (_Elementstandort_CP != value)
                    {
                        _Elementstandort_CP = value;
                        NotifyPropertyChanged();
                    }
                }
            }
    
            public string CMC_CP
            {
                get { return _CMC_CP; }
                set
                {
                    if (_CMC_CP != value)
                    {
                        _CMC_CP = value;
                        NotifyPropertyChanged();
                    }
                }
            }
    
            public string Melder_CP
            {
                get { return _Melder_CP; }
                set
                {
                    if (_Melder_CP != value)
                    {
                        _Melder_CP = value;
                        NotifyPropertyChanged();
                    }
                }
            }
    
            public DateTime Eingetragen_amCP
            {
                get { return _Eingetragen_amCP; }
                set
                {
                    if (_Eingetragen_amCP != value)
                    {
                        _Eingetragen_amCP = value;
                        NotifyPropertyChanged();
                    }
                }
            }
    
            public string Info1_CP
            {
                get { return _Info1_CP; }
                set
                {
                    if (_Info1_CP != value)
                    {
                        _Info1_CP = value;
                        NotifyPropertyChanged();
                    }
                }
            }
    
            public string Info2_CP
            {
                get { return _Info2_CP; }
                set
                {
                    if (_Info2_CP != value)
                    {
                        _Info2_CP = value;
                        NotifyPropertyChanged();
                    }
                }
            }
    
            public bool Erledigt_CP
            {
                get { return _Erledigt_CP; }
                set
                {
                    if (_Erledigt_CP != value)
                    {
                        _Erledigt_CP = value;
                        NotifyPropertyChanged();
                    }
                }
            }
    
            public DateTime Erledigt_amCP
            {
                get { return _Erledigt_amCP; }
                set
                {
                    if (_Erledigt_amCP != value)
                    {
                        _Erledigt_amCP = value;
                        NotifyPropertyChanged();
                    }
                }
            }
    
            public string Erledigt_durchCP
            {
                get { return _Erledigt_durchCP; }
                set
                {
                    if (_Erledigt_durchCP != value)
                    {
                        _Erledigt_durchCP = value;
                        NotifyPropertyChanged();
                    }
                }
            }
        }
    

    Viele Grüße
    Rolf

    Freitag, 18. August 2017 07:49

Alle Antworten

  • Hi,
    wenn Du einen Filter auf die Sicht für das DataGrid setzt, welcher die Checkbox-Spalte prüft, kannst Du auf einfache Art und Weise die entsprechenden Zeile ausblenden.

    --
    Viele Grüsse
    Peter Fleischer (ehem. MVP)
    Meine Homepage mit Tipps und Tricks

    Dienstag, 15. August 2017 08:58
  • Hallo DSCH5230 :-),

    ich denke, das Nachfolgende ist das, was Peter meinte:

    MainWindow.xaml

        <Window.DataContext>
            <local:InfobuchDataSet/>
        </Window.DataContext>
        <Window.Resources>
            <CollectionViewSource 
                x:Key="cPInfosViewSource" 
                Source="{Binding}" 
                Filter="cPInfosViewSource_Filter"/>
        </Window.Resources>
        <DockPanel>
            <CheckBox 
                Name="statusCheckBox" Content="Erledigt_CP" 
                Margin="10" DockPanel.Dock="Top"
                IsThreeState="True"
                Click="statusCheckBox_Click"/>
            <DataGrid 
                DockPanel.Dock="Bottom"
                x:Name="cPInfosDataGrid" 
                AutoGenerateColumns="False" 
                EnableRowVirtualization="True" 
                ItemsSource="{Binding Source={StaticResource cPInfosViewSource}}" 
                RowDetailsVisibilityMode="VisibleWhenSelected" 
                SelectionChanged="cPInfosDataGrid_SelectionChanged">
                <DataGrid.Columns>
                    <DataGridTextColumn x:Name="iD_CPInfoColumn" Binding="{Binding ID_CPInfo}" Header="ID CPInfo" Width="SizeToCells" Visibility="Hidden"/>
                    <DataGridCheckBoxColumn x:Name="erledigt_CPColumn" Binding="{Binding Erledigt_CP, Mode=TwoWay}" Header="Erledigt CP" Width="SizeToHeader"/>
                    <DataGridTextColumn x:Name="element_CPColumn" Binding="{Binding Element_CP}" Header="Element CP" Width="SizeToCells"/>
                    <DataGridTextColumn x:Name="elementstandort_CPColumn" Binding="{Binding Elementstandort_CP}" Header="Elementstandort CP" Width="SizeToCells"/>
                    <DataGridTextColumn x:Name="cMC_CPColumn" Binding="{Binding CMC_CP}" Header="CMC CP" Width="SizeToCells"/>
                    <DataGridTextColumn x:Name="melder_CPColumn" Binding="{Binding Melder_CP}" Header="Melder CP" Width="SizeToCells"/>
                    <DataGridTemplateColumn x:Name="eingetragen_amCPColumn" Header="Eingetragen am CP" Width="SizeToCells">
                        <DataGridTemplateColumn.CellTemplate>
                            <DataTemplate>
                                <DatePicker SelectedDate="{Binding Eingetragen_amCP, Mode=TwoWay, NotifyOnValidationError=true, ValidatesOnExceptions=true}"/>
                            </DataTemplate>
                        </DataGridTemplateColumn.CellTemplate>
                    </DataGridTemplateColumn>
                    <DataGridTextColumn x:Name="info1_CPColumn" Binding="{Binding Info1_CP}" Header="Info 1 CP" Width="SizeToCells"/>
                    <DataGridTextColumn x:Name="info2_CPColumn" Binding="{Binding Info2_CP}" Header="Info 2 CP" Width="SizeToCells"/>
                    <DataGridTextColumn x:Name="erledigt_amCPColumn" Binding="{Binding Erledigt_amCP}" Header="Erledigt am CP" Width="SizeToCells"/>
                    <DataGridTextColumn x:Name="erledigt_durchCPColumn" Binding="{Binding Erledigt_durchCP}" Header="Erledigt durch CP" Width="SizeToCells"/>
    
                    <!--Binding="{Binding Erledigt_CP }" -->
                </DataGrid.Columns>
            </DataGrid>
        </DockPanel>

    MainWindow.xaml.cs

        public partial class MainWindow : Window
        {
            private CollectionViewSource _cPInfosViewSource;
    
            public MainWindow()
            {
                InitializeComponent();
            }
    
            private void cPInfosDataGrid_SelectionChanged(object sender, SelectionChangedEventArgs e)
            {
            }
    
            private void cPInfosViewSource_Filter(object sender, FilterEventArgs e)
            {
                Infobuch infoBuch = e.Item as Infobuch;
                if (null == infoBuch)
                    return;
    
                if(null==statusCheckBox.IsChecked)
                {
                    e.Accepted = true;
                }
                else
                {
                    e.Accepted = infoBuch.Erledigt_CP == statusCheckBox.IsChecked.Value;
                }
            }
    
            private void Window_Loaded(object sender, RoutedEventArgs e)
            {
                _cPInfosViewSource = FindResource("cPInfosViewSource") as CollectionViewSource;
                statusCheckBox.IsChecked = null;
                _cPInfosViewSource.View.Refresh();
            }
    
            private void statusCheckBox_Click(object sender, RoutedEventArgs e)
            {
                _cPInfosViewSource.View.Refresh();
            }
        }
    

    InfoBuch.cs

        public class InfobuchDataSet : ObservableCollection<Infobuch>
        {
            public InfobuchDataSet()
            {
                CreateData();
            }
    
            private void CreateData()
            {
                for(int ii=0;ii<10;ii++)
                {
                    Add(new Infobuch()
                    {
                        ID_CPInfo = Guid.NewGuid(),
                        CMC_CP = string.Format("CMC_CP - {0:D2}", ii),
                        Eingetragen_amCP = DateTime.Now - new TimeSpan((ii+1)*50, 13, 0),
                        Elementstandort_CP = string.Format("Elementstandort_CP - {0:D2}", ii),
                        Element_CP = string.Format("Element_CP - {0:D2}", ii),
                        Erledigt_amCP = DateTime.Now - new TimeSpan((ii + 1) * 30, 18, 0),
                        Erledigt_CP= Convert.ToBoolean(ii % 2),
                        Erledigt_durchCP = string.Format("Erledigt_durchCP - {0:D2}", ii),
                        Info1_CP = string.Format("Info1_CP - {0:D2}", ii),
                        Info2_CP = string.Format("Info2_CP - {0:D2}", ii),
                        Melder_CP = string.Format("Melder_CP - {0:D2}", ii),
                    });
                }
            }
        }
    
        public class Infobuch : INotifyPropertyChanged
        {
            private Guid _ID_CPInfo;
            private string _Element_CP;
            private string _Elementstandort_CP;
            private string _CMC_CP;
            private string _Melder_CP;
            private DateTime _Eingetragen_amCP;
            private string _Info1_CP;
            private string _Info2_CP;
            private bool _Erledigt_CP;
            private DateTime _Erledigt_amCP;
            private string _Erledigt_durchCP;
    
            public event PropertyChangedEventHandler PropertyChanged;
            public void NotifyPropertyChanged([CallerMemberName] string propertyName = "")
            {
                PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
            }
    
            public Guid ID_CPInfo
            {
                get { return _ID_CPInfo; }
                set
                {
                    if(_ID_CPInfo!=value)
                    {
                        _ID_CPInfo = value;
                        NotifyPropertyChanged();
                    }
                }
            }
    
            public string Element_CP
            {
                get { return _Element_CP; }
                set
                {
                    if (_Element_CP != value)
                    {
                        _Element_CP = value;
                        NotifyPropertyChanged();
                    }
                }
            }
    
            public string Elementstandort_CP
            {
                get { return _Elementstandort_CP; }
                set
                {
                    if (_Elementstandort_CP != value)
                    {
                        _Elementstandort_CP = value;
                        NotifyPropertyChanged();
                    }
                }
            }
    
            public string CMC_CP
            {
                get { return _CMC_CP; }
                set
                {
                    if (_CMC_CP != value)
                    {
                        _CMC_CP = value;
                        NotifyPropertyChanged();
                    }
                }
            }
    
            public string Melder_CP
            {
                get { return _Melder_CP; }
                set
                {
                    if (_Melder_CP != value)
                    {
                        _Melder_CP = value;
                        NotifyPropertyChanged();
                    }
                }
            }
    
            public DateTime Eingetragen_amCP
            {
                get { return _Eingetragen_amCP; }
                set
                {
                    if (_Eingetragen_amCP != value)
                    {
                        _Eingetragen_amCP = value;
                        NotifyPropertyChanged();
                    }
                }
            }
    
            public string Info1_CP
            {
                get { return _Info1_CP; }
                set
                {
                    if (_Info1_CP != value)
                    {
                        _Info1_CP = value;
                        NotifyPropertyChanged();
                    }
                }
            }
    
            public string Info2_CP
            {
                get { return _Info2_CP; }
                set
                {
                    if (_Info2_CP != value)
                    {
                        _Info2_CP = value;
                        NotifyPropertyChanged();
                    }
                }
            }
    
            public bool Erledigt_CP
            {
                get { return _Erledigt_CP; }
                set
                {
                    if (_Erledigt_CP != value)
                    {
                        _Erledigt_CP = value;
                        NotifyPropertyChanged();
                    }
                }
            }
    
            public DateTime Erledigt_amCP
            {
                get { return _Erledigt_amCP; }
                set
                {
                    if (_Erledigt_amCP != value)
                    {
                        _Erledigt_amCP = value;
                        NotifyPropertyChanged();
                    }
                }
            }
    
            public string Erledigt_durchCP
            {
                get { return _Erledigt_durchCP; }
                set
                {
                    if (_Erledigt_durchCP != value)
                    {
                        _Erledigt_durchCP = value;
                        NotifyPropertyChanged();
                    }
                }
            }
        }
    

    Viele Grüße
    Rolf

    Freitag, 18. August 2017 07:49