[C# WPF] DataGrid dodwanie i usuwanie z bazy lokalnej bazy danych

Witam! Mam zadeklarowane źródło danych i połączone z kontrolką DataGrid. Problem w tym iż baza danych posiada ograniczenie na jednej z tabel że nazwy nie mogą się powtarzać oraz jak wiadomo nie da się usunąć wiersza danych jeśli jest on w relacji. W tej sytuacji próba aktualizowania adaptera kończy się niepowodzeniem co jestem w stanie złapać w wyjątku. Natomiast chciałbym przechwycić w jakiś sposób zdarzenie i wyświetlić osobne stosowne komunikaty - przy próbie dodania ponownie tej samej nazwy oraz przy próbie usunięcia danych w relacji. Czy ktoś może mi coś podpowiedzieć, bo męczę się od dłuższego czasu. Aktualizuje adapter w zdarzeniu SelectionChanged Datagrid’a.

W wyjątku powinieneś mieć wszystkie szczegóły. Możesz na ich podstawie wyświetlić odpowiedni komunikat.

Dziękuję za wskazówkę.

  try
            {
                adapter.Update(table);
            }

            catch (Exception ex)
            {
                MessageBox.Show(ex.Message, "Alert", MessageBoxButton.OK, MessageBoxImage.Error);
                adapter.Fill(table);
            }

W przypadku próby usunięcia komunikat: The DELETE statement conflicted with the REFERENCE consraint…

W przypadku dadania komunikat: Violation of UNIQUE KEY costraint

W jaki sposób mogę ustawić własne komunikaty?

Nie znam za dobrze C# i WPF, ale każdy błąd powinien rzucać inny typ wyjątku, a ty przechwytujesz ogólny typ wyjątku. Zrób dwa catch’e dla odpowiednich typów wyjątków.

Pod warunkiem, że nie jest to generyczny DBException, czy coś w tym stylu.

@rafalski - ustaw breakpointa po catch i zobacz jakiego typu jest ten “ex” i co dokładnie ma w środku. Później porób “if’y” z odpowiednimi komunikatami. Da się to zrobić bardziej elegancko, ale na początek wystarczy tak.

dokładnie tak zrobiłem :slight_smile: po ex.Message wyszukiwanie w ciągu określonej frazy :slight_smile: Przepisuje pewną aplikację z winforms i chciałem nadać trochę “świeżości”. W poprzedniej wersji wywoływałem nowe okno i operacje na bazie danych realizowałem poprzez osobny formularz. Teraz próbuje to robić bezpośrednio z GridData i widzę, że będą pewne problemy.