Add Search in MemberListWindow and restructure Window

This commit is contained in:
2023-02-23 13:01:23 +01:00
parent 1c3e6d8783
commit 53fd2c10df
2 changed files with 124 additions and 42 deletions

View File

@ -7,53 +7,98 @@
xmlns:ui="http://schemas.modernwpf.com/2019" xmlns:ui="http://schemas.modernwpf.com/2019"
ui:WindowHelper.UseModernWindowStyle="True" ui:WindowHelper.UseModernWindowStyle="True"
mc:Ignorable="d" mc:Ignorable="d"
Title="Mitglieder" Height="500" Width="800" MinHeight="500" MinWidth="800" Title="Mitglieder" Height="600" Width="1200" MinHeight="600" MinWidth="900"
Loaded="Window_Loaded"> Loaded="Window_Loaded">
<Grid> <Grid>
<DataGrid x:Name="MemberList" AutoGenerateColumns="False" HeadersVisibility="Column" IsReadOnly="True" GridLinesVisibility="None" SelectionMode="Single" <Grid.RowDefinitions>
CanUserDeleteRows="False" CanUserResizeRows="False" CanUserAddRows="False" <RowDefinition Height="1*"/>
SelectionChanged="MemberList_SelectionChanged" <RowDefinition Height="1*"/>
Margin="10,10,0,47.5" FontSize="14" Width="310" HorizontalAlignment="Left"> <RowDefinition Height="1*"/>
<DataGrid.Columns> <RowDefinition Height="1*"/>
<DataGridTextColumn Header="MgNr." Binding="{Binding MgNr}" Width="50"/> </Grid.RowDefinitions>
<DataGridTextColumn Header="Nachname" Binding="{Binding FamilyName}" Width="100"/> <Grid.ColumnDefinitions>
<DataGridTextColumn Header="Vorname" Binding="{Binding GivenName}" Width="*"/> <ColumnDefinition Width="340"/>
</DataGrid.Columns> <ColumnDefinition Width="1*"/>
</DataGrid> <ColumnDefinition Width="1*"/>
</Grid.ColumnDefinitions>
<Button x:Name="NewMemberButton" Content="Neu" Click="NewMemberButton_Click" <Grid Grid.RowSpan="4">
HorizontalAlignment="Left" VerticalAlignment="Bottom" Margin="10,0,0,10" FontSize="14" Padding="3,3,3,3" Width="100" Height="27.5"/> <Grid.ColumnDefinitions>
<Button x:Name="EditMemberButton" Content="Bearbeiten" Click="EditMemberButton_Click" IsEnabled="False" <ColumnDefinition Width="115"/>
HorizontalAlignment="Left" VerticalAlignment="Bottom" Margin="115,0,0,10" FontSize="14" Padding="3,3,3,3" Width="100" Height="27.5"/> <ColumnDefinition Width="110"/>
<Button x:Name="DeleteMemberButton" Content="Löschen" Click="DeleteMemberButton_Click" IsEnabled="False" <ColumnDefinition Width="115"/>
HorizontalAlignment="Left" VerticalAlignment="Bottom" Margin="220,0,0,10" FontSize="14" Padding="3,3,3,3" Width="100" Height="27.5"/> </Grid.ColumnDefinitions>
<Button x:Name="SaveButton" Content="Speichern" Click="SaveButton_Click" IsEnabled="False" Visibility="Hidden" <TextBox x:Name="SearchInput" TextChanged="SearchInput_TextChanged"
HorizontalAlignment="Left" VerticalAlignment="Bottom" Margin="10,0,0,10" FontSize="14" Padding="3,3,3,3" Width="100" Height="27.5"/> Grid.ColumnSpan="3" Margin="10,10,10,10" VerticalAlignment="Top"/>
<Button x:Name="ResetButton" Content="Zurücksetzen" Click="ResetButton_Click" IsEnabled="False" Visibility="Hidden" <DataGrid x:Name="MemberList" AutoGenerateColumns="False" HeadersVisibility="Column" IsReadOnly="True" GridLinesVisibility="None" SelectionMode="Single"
HorizontalAlignment="Left" VerticalAlignment="Bottom" Margin="115,0,0,10" FontSize="14" Padding="3,3,3,3" Width="100" Height="27.5"/> CanUserDeleteRows="False" CanUserResizeRows="False" CanUserAddRows="False"
<Button x:Name="CancelButton" Content="Abbrechen" Click="CancelButton_Click" IsEnabled="False" Visibility="Hidden" SelectionChanged="MemberList_SelectionChanged"
HorizontalAlignment="Left" VerticalAlignment="Bottom" Margin="220,0,0,10" FontSize="14" Padding="3,3,3,3" Width="100" Height="27.5"/> Margin="10,33,10,47" FontSize="14" Grid.ColumnSpan="3">
<DataGrid.Columns>
<DataGridTextColumn Header="MgNr." Binding="{Binding MgNr}" Width="50"/>
<DataGridTextColumn Header="Nachname" Binding="{Binding FamilyName}" Width="100"/>
<DataGridTextColumn Header="Vorname" Binding="{Binding GivenName}" Width="*"/>
</DataGrid.Columns>
</DataGrid>
<TextBox x:Name="MgNrInput" IsReadOnly="True" <Button x:Name="NewMemberButton" Content="Neu" Click="NewMemberButton_Click"
HorizontalAlignment="Left" Margin="351,26,0,0" TextWrapping="Wrap" VerticalAlignment="Top" Width="183" FontSize="14"/> HorizontalAlignment="Left" VerticalAlignment="Bottom" Margin="10,10,0,10" FontSize="14" Padding="3,3,3,3" Width="100" Height="27" Grid.Column="0"/>
<TextBox x:Name="GivenNameInput" IsReadOnly="True" <Button x:Name="EditMemberButton" Content="Bearbeiten" Click="EditMemberButton_Click" IsEnabled="False"
HorizontalAlignment="Left" Margin="351,52,0,0" TextWrapping="Wrap" VerticalAlignment="Top" Width="183"/> HorizontalAlignment="Center" VerticalAlignment="Bottom" Margin="0,10,0,10" FontSize="14" Padding="3,3,3,3" Width="100" Height="27" Grid.Column="1"/>
<TextBox x:Name="FamilyNameInput" IsReadOnly="True" <Button x:Name="DeleteMemberButton" Content="Löschen" Click="DeleteMemberButton_Click" IsEnabled="False"
HorizontalAlignment="Left" Margin="351,75,0,0" TextWrapping="Wrap" VerticalAlignment="Top" Width="183"/> HorizontalAlignment="Right" VerticalAlignment="Bottom" Margin="0,10,10,10" FontSize="14" Padding="3,3,3,3" Width="100" Height="27" Grid.Column="2"/>
<TextBox x:Name="AddressInput" IsReadOnly="True" <Button x:Name="SaveButton" Content="Speichern" Click="SaveButton_Click" IsEnabled="False" Visibility="Hidden"
HorizontalAlignment="Left" Margin="351,166,0,0" TextWrapping="Wrap" VerticalAlignment="Top" Width="183"/> HorizontalAlignment="Left" VerticalAlignment="Bottom" Margin="10,10,0,10" FontSize="14" Padding="3,3,3,3" Width="100" Height="27" Grid.Column="0"/>
<TextBox x:Name="PlzInput" IsReadOnly="True" <Button x:Name="ResetButton" Content="Zurücksetzen" Click="ResetButton_Click" IsEnabled="False" Visibility="Hidden"
TextChanged="PlzInput_TextChanged" HorizontalAlignment="Center" VerticalAlignment="Bottom" Margin="0,10,0,10" FontSize="14" Padding="3,3,3,3" Width="100" Height="27" Grid.Column="1"/>
HorizontalAlignment="Left" Margin="351,191,0,0" TextWrapping="Wrap" VerticalAlignment="Top" Width="60"/> <Button x:Name="CancelButton" Content="Abbrechen" Click="CancelButton_Click" IsEnabled="False" Visibility="Hidden"
<ComboBox x:Name="OrtInput" ItemTemplate="{StaticResource PostalDestComboBoxTemplate}" IsEnabled="False" HorizontalAlignment="Right" VerticalAlignment="Bottom" Margin="0,10,10,10" FontSize="14" Padding="3,3,3,3" Width="100" Height="27" Grid.Column="2"/>
HorizontalAlignment="Left" Margin="416,189,0,0" VerticalAlignment="Top" Width="200"/> </Grid>
<ComboBox x:Name="BranchInput" ItemTemplate="{StaticResource BranchTemplate}" IsEnabled="False"
HorizontalAlignment="Left" Margin="351,242,0,0" VerticalAlignment="Top" Width="120"/>
<ComboBox x:Name="DefaultKgInput" ItemTemplate="{StaticResource KgTemplate}" IsEnabled="False"
HorizontalAlignment="Left" Margin="351,269,0,0" VerticalAlignment="Top" Width="120"/>
<GroupBox Header="Persönliche Daten" Grid.Column="1" Grid.Row="0" Margin="5,5,5,5">
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="49*"/>
<ColumnDefinition Width="149*"/>
</Grid.ColumnDefinitions>
<TextBox x:Name="MgNrInput" IsReadOnly="True"
HorizontalAlignment="Left" Margin="10,26,0,0" TextWrapping="Wrap" VerticalAlignment="Top" Width="183" FontSize="14" Grid.ColumnSpan="2"/>
<TextBox x:Name="GivenNameInput" IsReadOnly="True"
HorizontalAlignment="Left" Margin="10,52,0,0" TextWrapping="Wrap" VerticalAlignment="Top" Width="183" Grid.ColumnSpan="2"/>
<TextBox x:Name="FamilyNameInput" IsReadOnly="True"
HorizontalAlignment="Left" Margin="10,75,0,0" TextWrapping="Wrap" VerticalAlignment="Top" Width="183" Grid.ColumnSpan="2"/>
</Grid>
</GroupBox>
<GroupBox Header="Anschrift" Grid.Column="1" Grid.Row="1" Margin="5,5,5,5">
<Grid>
<TextBox x:Name="AddressInput" IsReadOnly="True"
Margin="10,10,10,10" VerticalAlignment="Top" Grid.ColumnSpan="2" FontSize="14" Padding="2,2,2,2"/>
<TextBox x:Name="PlzInput" IsReadOnly="True"
TextChanged="PlzInput_TextChanged"
HorizontalAlignment="Left" Margin="10,41,0,0" VerticalAlignment="Top" Width="42" FontSize="14" Padding="2,2,2,2"/>
<ComboBox x:Name="OrtInput" ItemTemplate="{StaticResource PostalDestComboBoxTemplate}" IsEnabled="False"
Margin="57,41,10,0" VerticalAlignment="Top" FontSize="14"/>
</Grid>
</GroupBox>
<GroupBox Header="Kontaktdaten" Grid.Column="1" Grid.Row="2" Margin="5,5,5,5">
<Grid/>
</GroupBox>
<GroupBox Header="Bankdaten" Grid.Column="1" Grid.Row="3" Margin="5,5,5,10">
<Grid/>
</GroupBox>
<GroupBox Header="Betrieb" Grid.Column="2" Grid.Row="0" Grid.RowSpan="2" Margin="5,5,5,5">
<Grid>
<ComboBox x:Name="DefaultKgInput" ItemTemplate="{StaticResource KgTemplate}" IsEnabled="False"
HorizontalAlignment="Left" Margin="10,10,0,0" VerticalAlignment="Top" Width="120" Grid.ColumnSpan="2"/>
</Grid>
</GroupBox>
<GroupBox Header="Genossenschaft" Grid.Column="2" Grid.Row="2" Grid.RowSpan="2" Margin="5,5,5,10">
<Grid>
<ComboBox x:Name="BranchInput" ItemTemplate="{StaticResource BranchTemplate}" IsEnabled="False"
HorizontalAlignment="Left" Margin="10,10,0,0" VerticalAlignment="Top" Width="120" Grid.ColumnSpan="2"/>
</Grid>
</GroupBox>
</Grid> </Grid>
</Window> </Window>

View File

@ -25,6 +25,7 @@ namespace WGneu.Windows
{ {
private bool isEditing = false; private bool isEditing = false;
private bool isCreating = false; private bool isCreating = false;
private List<string> textFilter = new();
private readonly WgContext context = new(); private readonly WgContext context = new();
public MemberListWindow() public MemberListWindow()
@ -45,10 +46,39 @@ namespace WGneu.Windows
base.OnClosing(e); base.OnClosing(e);
} }
private int CountMatchesInMember(Member m)
{
if (textFilter.Count == 0) return 0;
string[] check = new string[] { m.MgNr.ToString(), m.FamilyName.ToLower(), m.GivenName.ToLower(), m.DefaultKg.Name.ToLower() };
int i = 0;
foreach (string c in check)
{
if (textFilter.Any(f => c == f))
i += 10;
else if (textFilter.Any(f => c.Contains(f)))
i += 1;
}
return i;
}
private void RefreshMemberList() private void RefreshMemberList()
{ {
context.Members.Load(); context.Members.Load();
MemberList.ItemsSource = context.Members.ToList(); List<Member> members = context.Members.OrderBy(m => m.FamilyName + " " + m.GivenName).ToList();
if (textFilter.Count > 0)
{
members = members
.ToDictionary(m => m, m => CountMatchesInMember(m))
.OrderByDescending(a => a.Value)
.Where(a => a.Value > 0)
.Select(a => a.Key)
.ToList();
}
MemberList.ItemsSource = members;
if (members.Count == 1)
MemberList.SelectedIndex = 0;
RefreshInputs(); RefreshInputs();
} }
@ -196,6 +226,13 @@ namespace WGneu.Windows
LockInputs(); LockInputs();
} }
private void SearchInput_TextChanged(object sender, RoutedEventArgs e)
{
// TODO implement STRG+F
textFilter = SearchInput.Text.ToLower().Split(" ").ToList().FindAll(s => s != "");
RefreshMemberList();
}
private int NextMgNr() private int NextMgNr()
{ {
int c = context.Members.Select(m => m.MgNr).Min(); int c = context.Members.Select(m => m.MgNr).Min();