crash fixed listview replaced

This commit is contained in:
allavenavr 2025-05-05 15:55:21 +02:00
parent 7f05f4f634
commit ff39425766
2 changed files with 76 additions and 61 deletions

View File

@ -1,4 +1,4 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8" ?>
<ContentPage xmlns="http://schemas.microsoft.com/dotnet/2021/maui" <ContentPage xmlns="http://schemas.microsoft.com/dotnet/2021/maui"
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml" xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
x:Class="HegreHotel.Views.Client.ClientsPage" x:Class="HegreHotel.Views.Client.ClientsPage"
@ -6,8 +6,6 @@
Appearing="ClientsPage_OnAppearing"> Appearing="ClientsPage_OnAppearing">
<StackLayout Padding="15" Spacing="10"> <StackLayout Padding="15" Spacing="10">
<!-- Bouton Ajouter Client -->
<Button Text="Ajouter Client" <Button Text="Ajouter Client"
Clicked="OnAjouterClientClicked" Clicked="OnAjouterClientClicked"
HorizontalOptions="Center" HorizontalOptions="Center"
@ -16,46 +14,56 @@
CornerRadius="10" CornerRadius="10"
Padding="10" Padding="10"
FontAttributes="Bold" FontAttributes="Bold"
WidthRequest="200"/> WidthRequest="200" />
<!-- Liste des clients --> <CollectionView x:Name="ClientsCollectionView"
<ListView x:Name="ClientsListView" HasUnevenRows="True" ItemTapped="OnClientTapped"> SelectionMode="None">
<ListView.ItemTemplate> <CollectionView.ItemTemplate>
<DataTemplate> <DataTemplate>
<ViewCell> <Frame Padding="10"
<Frame Padding="10" CornerRadius="10" BackgroundColor="White" BorderColor="#E5E7EB" Margin="0,5"> CornerRadius="10"
<StackLayout Orientation="Horizontal" Spacing="15"> BackgroundColor="White"
<!-- Icône ou Avatar --> BorderColor="#E5E7EB"
<Image Source="user_icon.png" WidthRequest="40" HeightRequest="40"/> Margin="0,5"
BindingContext="{Binding .}">
<Frame.GestureRecognizers>
<TapGestureRecognizer Tapped="OnClientTapped" />
</Frame.GestureRecognizers>
<StackLayout Orientation="Horizontal" Spacing="15">
<Image Source="user_icon.png"
WidthRequest="40"
HeightRequest="40" />
<!-- Infos du client -->
<VerticalStackLayout> <VerticalStackLayout>
<Label Text="{Binding Nom}" FontAttributes="Bold" FontSize="16"/> <Label Text="{Binding Nom}"
<Label Text="{Binding Prenom}" FontSize="14" TextColor="Gray"/> FontAttributes="Bold"
FontSize="16" />
<Label Text="{Binding Prenom}"
FontSize="14"
TextColor="Gray" />
</VerticalStackLayout> </VerticalStackLayout>
<!-- Actions Modifier / Supprimer --> <StackLayout Orientation="Horizontal"
<StackLayout Orientation="Horizontal" HorizontalOptions="EndAndExpand" Spacing="5"> HorizontalOptions="EndAndExpand"
Spacing="5">
<ImageButton Source="edit_icon.png" <ImageButton Source="edit_icon.png"
Clicked="OnModifierClientClicked" Clicked="OnModifierClientClicked"
CommandParameter="{Binding .}" CommandParameter="{Binding .}"
HeightRequest="30" HeightRequest="30"
WidthRequest="30" WidthRequest="30"
BackgroundColor="Transparent"/> BackgroundColor="Transparent" />
<ImageButton Source="delete_icon.png" <ImageButton Source="delete_icon.png"
Clicked="OnSupprimerClientClicked" Clicked="OnSupprimerClientClicked"
CommandParameter="{Binding .}" CommandParameter="{Binding .}"
HeightRequest="30" HeightRequest="30"
WidthRequest="30" WidthRequest="30"
BackgroundColor="Transparent"/> BackgroundColor="Transparent" />
</StackLayout> </StackLayout>
</StackLayout> </StackLayout>
</Frame> </Frame>
</ViewCell>
</DataTemplate> </DataTemplate>
</ListView.ItemTemplate> </CollectionView.ItemTemplate>
</ListView> </CollectionView>
</StackLayout> </StackLayout>
</ContentPage> </ContentPage>

View File

@ -17,17 +17,26 @@ namespace HegreHotel.Views.Client
} }
private async void LoadClients() private async void LoadClients()
{
try
{ {
string dbPath = Path.Combine(FileSystem.AppDataDirectory, "HegreHotel.db3"); string dbPath = Path.Combine(FileSystem.AppDataDirectory, "HegreHotel.db3");
var db = SingletonConnection.GetInstance(dbPath); var db = SingletonConnection.GetInstance(dbPath);
var clientsList = await db.Table<Models.Client>().ToListAsync(); var clientsList = await db.Table<Models.Client>().ToListAsync();
MainThread.BeginInvokeOnMainThread(() =>
{
Clients.Clear(); Clients.Clear();
foreach (var client in clientsList) foreach (var client in clientsList)
{
Clients.Add(client); Clients.Add(client);
}
ClientsListView.ItemsSource = Clients;
ClientsCollectionView.ItemsSource = Clients;
});
}
catch (Exception ex)
{
Console.WriteLine($"Erreur lors du chargement des clients : {ex.Message}");
}
} }
private async void OnAjouterClientClicked(object sender, EventArgs e) private async void OnAjouterClientClicked(object sender, EventArgs e)
@ -43,7 +52,6 @@ namespace HegreHotel.Views.Client
} }
} }
private async void OnSupprimerClientClicked(object sender, EventArgs e) private async void OnSupprimerClientClicked(object sender, EventArgs e)
{ {
if (sender is ImageButton imageButton && imageButton.CommandParameter is Models.Client client) if (sender is ImageButton imageButton && imageButton.CommandParameter is Models.Client client)
@ -54,25 +62,24 @@ namespace HegreHotel.Views.Client
string dbPath = Path.Combine(FileSystem.AppDataDirectory, "HegreHotel.db3"); string dbPath = Path.Combine(FileSystem.AppDataDirectory, "HegreHotel.db3");
var db = SingletonConnection.GetInstance(dbPath); var db = SingletonConnection.GetInstance(dbPath);
await db.DeleteAsync(client); await db.DeleteAsync(client);
LoadClients();
MainThread.BeginInvokeOnMainThread(() =>
{
Clients.Remove(client);
});
} }
} }
} }
private void ClientsPage_OnAppearing(object sender, EventArgs e)
private void ClientsPage_OnAppearing(object? sender, EventArgs e)
{ {
LoadClients(); LoadClients();
} }
private async void OnClientTapped(object sender, ItemTappedEventArgs e) private async void OnClientTapped(object sender, EventArgs e)
{ {
if (e.Item != null) if (sender is Frame frame && frame.BindingContext is Models.Client client)
{ {
((ListView)sender).SelectedItem = null;
var client = e.Item as Models.Client;
await Navigation.PushAsync(new DetailsClientPage(client)); await Navigation.PushAsync(new DetailsClientPage(client));
} }
} }