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 po ex.Message wyszukiwanie w ciągu określonej frazy 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.