Mam drobny problem z kontrolą wprowadzanych danych - VS2008 , C# , MySQL.
Podczas kontroli danych wprowadzanych m.in. w DGV, wartość null jest rozpoznawana automatycznie i w przypadku, gdy jest ustawiona restrykcja dla null, generowany jest błąd wraz z odpowiednim komunikatem, a komórka z powrotem wraca w tryb edycji.
Chciałbym w ten sam sposób kontrolować wartość zerową (jako odpowiednik null) - czy jest to możliwe ?
Taki mały przykład:
int? value = null;
Console.WriteLine(value);
value = 0;
Console.WriteLine(value);
Nie testowałem tego, ale wydaje mi się że taka deklaracja int-a, pozwoli wygenerować taki sam błąd, jeśli będzie null-em.
Problem dotyczy operacji w DataGridView na danych z MySQL, gdzie nie ma jawnej deklaracji typu.
Próbowałem znaleźć rozwiązanie we właściwościach DGV dla danej komórki, w DataSet oraz w samym MySQL, ale jak na razie poległem z problemem.
Spodziewałem się, że wskazanie 0,00 jako Null value w CellStyle Builder -> Format String Dialog, powinno rozwiązać problem, ale żadnych efektów nie przyniosło.
Najprostsze co przychodzi mi do głowy, to obsługa zdarzenia np. CellValueChanged i "ręczna" kontrola wprowadzanych wartości, ale cały czas mam wrażenie, że jest to zaimplementowane w standardowej obsłudze DGV.
Po kilku próbach :
Trochę na około i nie w 100% zgodnie z oczekiwaniami, ale ... obsługując zdarzenie CellValueChanged dla wybranych kolumn, gdy wartość komórki wynosi zero, ustawiam wartość tej komórki na null.
z zerem automatycznie Ci nie wyjdzie, poniewaz zero jest normalna wartoscia, prawidlowa w sensie kolumny z danymi. nie ma po stronie serwera baz sql czegos takiego jak "NOT ZERO" w analogii do "NOT NULL" :) mechamizn testujacy nie jest odpowiedzialny za poprawnosc danych, a za ich spojnosc - klucze obce musza na cos istniejacego wskazywac, primarykeye musza byc nie-puste, etc
to, co Ty bys chcial uzyskac, to walidacja wartosci prowadzonych na formatce. od tego sa inne mechanizmy. sprawdz np czy nie ma aby eventa CellValueChanging albo blahValidating -- one sluza do wpinania sie w odpowiedni moment, sprawdzania czy wartosc jest ok i ew. jej odrzucania - np. zworceniem false, ustawieniem e.cancel=true czy tez rzuceniem wyjatku, zalezy w ktorej kontrolce..
Dzieki za pomoc - posprawdzam ewewntualne możliwości.