Laden...

Binding mit Gridview über IQuery

Erstellt von Ayke vor 12 Jahren Letzter Beitrag vor 12 Jahren 1.017 Views
Ayke Themenstarter:in
643 Beiträge seit 2006
vor 12 Jahren
Binding mit Gridview über IQuery

Hallo,

ich habe eine Klasse Filter. Diese hat ein IQueryable Object das als Datenquelle verwendet wird.

    public class Filter : NotifyPropertyChanged
    {
       
       public Filter(IQueryable querySource)
       {
              this.QuerySource = querySource;
       }       

        private IQueryable _QuerySource;
        public IQueryable QuerySource
        {
            get { return _QuerySource; }
            set
            {
                _QuerySource = value;
                onPropertyChanged(this, "QuerySource");
            }
        }

        public void FilterQuerySource()
        {
            IQueryable tempQuery = null;

            //...................................
            //filter with dynamic Linq...........
            //...................................

            QuerySource = tempQuery;
        }
    }

Dazu habe noch ein Usercontrol erstellt.

    public partial class FilterControl : UserControl
    {
        
        private Filter filter 
        
        public IQueryable QuerySource
        {
            get
            {
                if (filter == null)
                    return null;
                else
                    return filter.QuerySource;
            }

            set
            {
                filter = new Filter(value);
            }
        }
    }

Jetzt habe ich irgendwo ein Gridview. Wie aus den Code zu entnehmen ist, bekommt das Gridview leider von einer Änderung durch den Filter nix mit.

Wie geh ich da am besten vor ?

  1. Ich mache eine Dependeny Property aus der Filter Class QuerySource Property. (Ist IQueryable überhaupt das richtige Object dafür ?)

  2. In der Usercontrol Class mach ich einen Pointer auf die QuerySource der Filter Class.
    (Muss für den Getter und Setter ein delegate machen ?)

3.Das ganze bind ich dann irgendwo wo ich ein DataGrid habe.

        private void Data_ComboBox_SelectionChanged(object sender, SelectionChangedEventArgs e)
        {
            FilterControl.ItemSource = Data_Dict_Queries[Data_ComboBox.SelectedItem.ToString()];
            Binding binding = new Binding();
            binding.UpdateSourceTrigger = UpdateSourceTrigger.PropertyChanged;
            binding.Source = FilterControl;
            binding.Path = new PropertyPath("QuerySource");
            dataGrid.SetBinding(DataGrid.ItemsSourceProperty, binding);
        }

Würde mich sehr über eure Untersützung freuen.

6.862 Beiträge seit 2003
vor 12 Jahren

Hallo,

IQueryable ist denkbar ungeeignet, da es im Prinzip nur die Abfrage an die Datenquelle repräsentiert und nicht die eigentlichen Daten. Da kann man nicht mit DataBinding arbeiten. Binde direkt gegen die Datenquelle.

Baka wa shinanakya naoranai.

Mein XING Profil.

Ayke Themenstarter:in
643 Beiträge seit 2006
vor 12 Jahren

Hallo Talla,

ich mache auch eine Abfrage wegen den Filter bevor ich das an das DataGrid weiterleite.

        public void FilterQuerySource()
        {
            IQueryable tempQuery = null;

            //...................................
            //filter with dynamic Linq...........
            //...................................

            QuerySource = tempQuery;
        }
6.862 Beiträge seit 2003
vor 12 Jahren

Hallo,

zum filtern gibts in WPF die CollectionViews. Man bindet nie direkt gegen irgendwelche Collections sondern immer explizit oder implizit gegen ne CollectionView und´für die kann man entsprechend Filter angeben.

Baka wa shinanakya naoranai.

Mein XING Profil.

Ayke Themenstarter:in
643 Beiträge seit 2006
vor 12 Jahren

danke talla,
dann muss ich alles neu schreiben 😃