Add Search in MemberListWindow and restructure Window
This commit is contained in:
@ -7,53 +7,98 @@
|
||||
xmlns:ui="http://schemas.modernwpf.com/2019"
|
||||
ui:WindowHelper.UseModernWindowStyle="True"
|
||||
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">
|
||||
<Grid>
|
||||
<DataGrid x:Name="MemberList" AutoGenerateColumns="False" HeadersVisibility="Column" IsReadOnly="True" GridLinesVisibility="None" SelectionMode="Single"
|
||||
CanUserDeleteRows="False" CanUserResizeRows="False" CanUserAddRows="False"
|
||||
SelectionChanged="MemberList_SelectionChanged"
|
||||
Margin="10,10,0,47.5" FontSize="14" Width="310" HorizontalAlignment="Left">
|
||||
<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>
|
||||
<Grid.RowDefinitions>
|
||||
<RowDefinition Height="1*"/>
|
||||
<RowDefinition Height="1*"/>
|
||||
<RowDefinition Height="1*"/>
|
||||
<RowDefinition Height="1*"/>
|
||||
</Grid.RowDefinitions>
|
||||
<Grid.ColumnDefinitions>
|
||||
<ColumnDefinition Width="340"/>
|
||||
<ColumnDefinition Width="1*"/>
|
||||
<ColumnDefinition Width="1*"/>
|
||||
</Grid.ColumnDefinitions>
|
||||
|
||||
<Button x:Name="NewMemberButton" Content="Neu" Click="NewMemberButton_Click"
|
||||
HorizontalAlignment="Left" VerticalAlignment="Bottom" Margin="10,0,0,10" FontSize="14" Padding="3,3,3,3" Width="100" Height="27.5"/>
|
||||
<Button x:Name="EditMemberButton" Content="Bearbeiten" Click="EditMemberButton_Click" IsEnabled="False"
|
||||
HorizontalAlignment="Left" VerticalAlignment="Bottom" Margin="115,0,0,10" FontSize="14" Padding="3,3,3,3" Width="100" Height="27.5"/>
|
||||
<Button x:Name="DeleteMemberButton" Content="Löschen" Click="DeleteMemberButton_Click" IsEnabled="False"
|
||||
HorizontalAlignment="Left" VerticalAlignment="Bottom" Margin="220,0,0,10" FontSize="14" Padding="3,3,3,3" Width="100" Height="27.5"/>
|
||||
<Grid Grid.RowSpan="4">
|
||||
<Grid.ColumnDefinitions>
|
||||
<ColumnDefinition Width="115"/>
|
||||
<ColumnDefinition Width="110"/>
|
||||
<ColumnDefinition Width="115"/>
|
||||
</Grid.ColumnDefinitions>
|
||||
|
||||
<Button x:Name="SaveButton" Content="Speichern" Click="SaveButton_Click" IsEnabled="False" Visibility="Hidden"
|
||||
HorizontalAlignment="Left" VerticalAlignment="Bottom" Margin="10,0,0,10" FontSize="14" Padding="3,3,3,3" Width="100" Height="27.5"/>
|
||||
<Button x:Name="ResetButton" Content="Zurücksetzen" Click="ResetButton_Click" IsEnabled="False" Visibility="Hidden"
|
||||
HorizontalAlignment="Left" VerticalAlignment="Bottom" Margin="115,0,0,10" FontSize="14" Padding="3,3,3,3" Width="100" Height="27.5"/>
|
||||
<Button x:Name="CancelButton" Content="Abbrechen" Click="CancelButton_Click" IsEnabled="False" Visibility="Hidden"
|
||||
HorizontalAlignment="Left" VerticalAlignment="Bottom" Margin="220,0,0,10" FontSize="14" Padding="3,3,3,3" Width="100" Height="27.5"/>
|
||||
<TextBox x:Name="SearchInput" TextChanged="SearchInput_TextChanged"
|
||||
Grid.ColumnSpan="3" Margin="10,10,10,10" VerticalAlignment="Top"/>
|
||||
<DataGrid x:Name="MemberList" AutoGenerateColumns="False" HeadersVisibility="Column" IsReadOnly="True" GridLinesVisibility="None" SelectionMode="Single"
|
||||
CanUserDeleteRows="False" CanUserResizeRows="False" CanUserAddRows="False"
|
||||
SelectionChanged="MemberList_SelectionChanged"
|
||||
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"
|
||||
HorizontalAlignment="Left" Margin="351,26,0,0" TextWrapping="Wrap" VerticalAlignment="Top" Width="183" FontSize="14"/>
|
||||
<TextBox x:Name="GivenNameInput" IsReadOnly="True"
|
||||
HorizontalAlignment="Left" Margin="351,52,0,0" TextWrapping="Wrap" VerticalAlignment="Top" Width="183"/>
|
||||
<TextBox x:Name="FamilyNameInput" IsReadOnly="True"
|
||||
HorizontalAlignment="Left" Margin="351,75,0,0" TextWrapping="Wrap" VerticalAlignment="Top" Width="183"/>
|
||||
<Button x:Name="NewMemberButton" Content="Neu" Click="NewMemberButton_Click"
|
||||
HorizontalAlignment="Left" VerticalAlignment="Bottom" Margin="10,10,0,10" FontSize="14" Padding="3,3,3,3" Width="100" Height="27" Grid.Column="0"/>
|
||||
<Button x:Name="EditMemberButton" Content="Bearbeiten" Click="EditMemberButton_Click" IsEnabled="False"
|
||||
HorizontalAlignment="Center" VerticalAlignment="Bottom" Margin="0,10,0,10" FontSize="14" Padding="3,3,3,3" Width="100" Height="27" Grid.Column="1"/>
|
||||
<Button x:Name="DeleteMemberButton" Content="Löschen" Click="DeleteMemberButton_Click" 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"/>
|
||||
|
||||
<TextBox x:Name="AddressInput" IsReadOnly="True"
|
||||
HorizontalAlignment="Left" Margin="351,166,0,0" TextWrapping="Wrap" VerticalAlignment="Top" Width="183"/>
|
||||
<TextBox x:Name="PlzInput" IsReadOnly="True"
|
||||
TextChanged="PlzInput_TextChanged"
|
||||
HorizontalAlignment="Left" Margin="351,191,0,0" TextWrapping="Wrap" VerticalAlignment="Top" Width="60"/>
|
||||
<ComboBox x:Name="OrtInput" ItemTemplate="{StaticResource PostalDestComboBoxTemplate}" IsEnabled="False"
|
||||
HorizontalAlignment="Left" Margin="416,189,0,0" VerticalAlignment="Top" Width="200"/>
|
||||
|
||||
<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"/>
|
||||
<Button x:Name="SaveButton" Content="Speichern" Click="SaveButton_Click" IsEnabled="False" Visibility="Hidden"
|
||||
HorizontalAlignment="Left" VerticalAlignment="Bottom" Margin="10,10,0,10" FontSize="14" Padding="3,3,3,3" Width="100" Height="27" Grid.Column="0"/>
|
||||
<Button x:Name="ResetButton" Content="Zurücksetzen" Click="ResetButton_Click" IsEnabled="False" Visibility="Hidden"
|
||||
HorizontalAlignment="Center" VerticalAlignment="Bottom" Margin="0,10,0,10" FontSize="14" Padding="3,3,3,3" Width="100" Height="27" Grid.Column="1"/>
|
||||
<Button x:Name="CancelButton" Content="Abbrechen" Click="CancelButton_Click" IsEnabled="False" Visibility="Hidden"
|
||||
HorizontalAlignment="Right" VerticalAlignment="Bottom" Margin="0,10,10,10" FontSize="14" Padding="3,3,3,3" Width="100" Height="27" Grid.Column="2"/>
|
||||
</Grid>
|
||||
|
||||
<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>
|
||||
</Window>
|
||||
|
@ -25,6 +25,7 @@ namespace WGneu.Windows
|
||||
{
|
||||
private bool isEditing = false;
|
||||
private bool isCreating = false;
|
||||
private List<string> textFilter = new();
|
||||
private readonly WgContext context = new();
|
||||
|
||||
public MemberListWindow()
|
||||
@ -45,10 +46,39 @@ namespace WGneu.Windows
|
||||
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()
|
||||
{
|
||||
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();
|
||||
}
|
||||
|
||||
@ -196,6 +226,13 @@ namespace WGneu.Windows
|
||||
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()
|
||||
{
|
||||
int c = context.Members.Select(m => m.MgNr).Min();
|
||||
|
Reference in New Issue
Block a user