c# Заполнить listView данными из нескольких запросов Linq - PullRequest
0 голосов
/ 06 февраля 2020

Мой код проверяет несколько списков и уточняет результат с помощью нескольких запросов. Когда я проверяю «Etablissement» в выпадающем списке, listView отображает список агентов для этого Etablishment. Это работает отлично. Проблема в том, что когда я выбираю два или более, я не получаю результата в списке агентов.

Всегда проверяю один из списка, я вызываю это:

      if (_TousAgents != null && _Agents != null)
            {
                _agents = from agent in _TousAgents //_TousAgents contain a list of all agents indiscriminately
                          where DateFin >= agent.DebutContrat
                            && (agent.FinContrat == null
                            || DateDébut <= agent.FinContrat)
                          select agent;
                if (_SelectedStatut != null && !String.IsNullOrEmpty(_SelectedStatut.IDStatut))
                    _agents = from agent in _agents
                          where agent.Typecontrat == _SelectedStatut.IDStatut
                          select agent;
                if (_SelectedService != null && !String.IsNullOrEmpty(_SelectedService.ID))
                    _agents = from agent in _agents
                              where agent.IDService == _SelectedService.ID
                              select agent;
                if (_SelectedSection != null && !String.IsNullOrEmpty(_SelectedSection.ID))
                    _agents = from agent in _agents
                              where agent.IDSection == _SelectedSection.ID
                              select agent;
                if (_SelectedEmploi != null && !String.IsNullOrEmpty(_SelectedEmploi.IDEmploi))
                    _agents = from agent in _agents
                              where agent.IDEmploi == _SelectedEmploi.IDEmploi
                              select agent;
                if (_SelectedFiliere != null && !String.IsNullOrEmpty(_SelectedFiliere.ID))
                    _agents = from agent in _agents
                              where agent.IDFiliere == _SelectedFiliere.ID
                              select agent;

                foreach (Etablissement etb in EtablissementsUtilisateur)
                    if (etb.IsSelected == true)
                    {
                        _agents = from agent in _agents
                                  where agent.IDEtablissement == etb.IDEtablissement
                                  select agent;
                    } //I think this is the problem


                _Agents.Clear();
                foreach (AgentModel ag in _agents.Distinct().OrderBy(a => a.Prenom).OrderBy(a => a.Nom))
                {
                    _Agents.Add(ag);
                }

                if (_Agents != null && _Agents.Count > 0)
                {
                    if (!String.IsNullOrEmpty(SingleAgentMatricule) && _Agents.SingleOrDefault(ag => ag.Matricule == _SingleAgentMatricule) != null)
                    {
                        _Agents.SingleOrDefault(ag => ag.Matricule == _SingleAgentMatricule).IsSelected = true;
                    }
                    else
                        SelectAllAgents = true;

                }
                RaisePropertyChanged("Agents");

            }

Сторона WPF:

        <ComboBox Name="CmbEtabTout" 
              ItemsSource="{Binding EtablissementsUtilisateur}"
              Grid.IsSharedSizeScope="True"                 
              Grid.Column="2" 
              Grid.ColumnSpan="3" 
              Grid.Row="2" 
              Height="25" 
              Width="250">
        <ComboBox.ItemTemplate>
            <DataTemplate>
                <Grid>
                    <Grid.ColumnDefinitions>
                        <ColumnDefinition Width="30" />
                        <ColumnDefinition SharedSizeGroup="AgentA" Width="auto" />
                        <ColumnDefinition Width="5" />
                        <ColumnDefinition SharedSizeGroup="AgentB" Width="auto" />
                    </Grid.ColumnDefinitions>
                    <CheckBox IsChecked="{Binding IsSelected}" Command="{Binding DataContext.UpdateListeAgentMulti, RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type Window}}}" Grid.Column="0" />
                    <TextBlock Text="{Binding IdEtablissement}" Grid.Column="1"/>
                    <TextBlock Text="{Binding Nom}" Grid.Column="3"/>
                </Grid>
            </DataTemplate>
        </ComboBox.ItemTemplate>
    </ComboBox>

       <ListView x:Name="LVAgent"
        ScrollViewer.HorizontalScrollBarVisibility="Disabled" 
        ItemsSource="{Binding Agents}" Grid.ColumnSpan="2" Margin="150,0,42,0" Grid.Column="2" Grid.Row="4" Grid.RowSpan="5" >
        <ListView.View>
            <GridView>
                <GridViewColumn>
                    <GridViewColumn.CellTemplate>
                        <DataTemplate>
                            <CheckBox IsChecked="{Binding IsSelected}" 
                                              Command="{Binding DataContext.SelectAgentCommand, RelativeSource={RelativeSource Mode=FindAncestor, AncestorType=Window}}"
                                              CommandParameter="{Binding}"/>
                        </DataTemplate>
                    </GridViewColumn.CellTemplate>
                    <CheckBox IsChecked="{Binding SelectAllAgents}"
                        IsEnabled="True"/>
                </GridViewColumn>
                <GridViewColumn Header="Matricule"
                    Width="110" 
                    DisplayMemberBinding="{Binding Matricule}"/>
                <GridViewColumn Header="Nom" 
                    Width="120"
                    DisplayMemberBinding="{Binding Nom}"/>
                <GridViewColumn Header="Prénom" 
                    Width="120" 
                    DisplayMemberBinding="{Binding Prenom}"/>

            </GridView>
        </ListView.View>
    </ListView>

Пример результатов с 1 проверкой:

enter image description here

Все работает.

С 2 или подробнее:

enter image description here

Полагаю, что заполнить ListView агентами из Demo + Demo2018;

1 Ответ

0 голосов
/ 06 февраля 2020

Я думаю, что ваш запрос linq неверен, потому что вы присваиваете ему значение каждый раз, когда l oop в foreach. Может быть, вам нужно что-то вроде этого

     _agents = _agents.Where(x=> p = EtablissementsUtilisateur.Where(y=> y.IsSelected == true).Contains(x));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...