[ dusty @ 03.08.2004. 14:14 ] @
Pozdrav narode.

Imam jedan problem. Naime bindovao sam DataSet i tabele iz njega za kontrole na formi. Imam jedno dugme koje poziva moju metodu koja poziva Update za taj dataSet, ali samo za izmenjene redove:

Code:

public void UpdateSource(ref DataSet ds, string s_table){
 DataTable upd; //, del, ins;
 
 upd = ds.Tables[s_table].GetChanges(DataRowState.Modified);

 if(upd != null){
   try{
     sda.Update(upd);   // sda SqlDataAdapter za moj dataset
   }
   catch(SqlException se){
    Debug.WriteLine(se.Message);
   }
 }
}


Ovo lepo radi, ali problem je u tome sto red dobija status Modified tek kada se promeni trenutno aktivni red. Probao sam preko CurrencyManager-a, nesto kao cm.EndCurrentEdit i cm.Postition = cm.Postition, ali mi aplikacija skroz odlepi Odradi se update sasvim normalno, ali bindovane kontrole posle ovog sa CurrenyManagerom ne prikazuju nista - kao da nije su tabele na koje su bindovane prazne !!

Kako da updateujem trenutni red koji sam menjao, tj. kako da red dobije svoj status Modified/Added da bih mogao da updateujem preko gornje metode ?

Hvala.
[ akrosoft @ 03.08.2004. 18:22 ] @
Probaj da pozoves metodu EndCurrentEdit CurrenyManager-a pre pozivanje Update komande.
Code:

this.BindingContext[ds,s_table]EndCurrentEdit();
[ akrosoft @ 03.08.2004. 19:48 ] @
Ups....nisam pazljivo procitao da si to vec probao......Sorry.....

....i fali mi tacka pre poziva metode.....
[ dusans @ 04.08.2004. 07:33 ] @
Ovo sa currency managerom radi 100% bez dela cm.Postition = cm.Postition, probaj i kombinaciju this.BindingContext[ds.Tables(s_table)].EndCurrentEdit();
Problem može nastati ako koristiš CheckBox kontrolu koja "gleda" na Null vrednost, onda ne dobijaš nikakvu grešku ali ostale kontrole ne rade kako treba. Proveri ostatak tvog koda, sa CurrencyManager-om sam radio hiljadu puta i radi kako treba.
[ dusty @ 04.08.2004. 09:32 ] @
Citat:

Ovo sa currency managerom radi 100% bez dela cm.Postition = cm.Postition


Nisam se dobro izrazio, probao sam samo cm.EndCurrentEdit(), pa posle cm.Position = cm.Position. Skontao sam da sam nesto zeznuo kod bindovanja, mislio sam da je mega-ultra-super-turbo-glupava DateTimePicker kontrola koja ne guta Null vrednosti, mada se isto desava kada je i pravilno popunjena

Anyway, hvala obojci na savetima Cim provalim gde sam zeznuo postovacu odgovor za buduce generacije
[ aXi @ 04.08.2004. 12:02 ] @
dusty,

Bindovanje je izuzetno "bagovita" oblast .NETa - manje vise sve moras odraditi po odredjenim pravilima koja su recimo dobro objasnjenje u knjizi Chris Sells-a "Windows Forms Programming". Ako kontrole polude onda kada bindovanje nije dobro odradjeno => pomenuo si da ti update prodje a kontrole polude - znaci da je nesto u medjuvremenu pojebalo DataSet.

Po ovome sto si postovao mislim da je za*** u tome sto pozivas .GetChanges() i vadis u posebnu tabelu pa onda adapter to uzima u obzir - SqlDataAdapter.Update() po definiciji updatuje samo one redove u kojima ima promena.

Takodje na nekim mestima problem resava sledece:
////////////////////
this.BindingContext[BindovaniDataSet, "BindovanaTabela"].SuspendBinding();
pozivProcedureZaUpdate();
this.BindingContext[BindovaniDataSet, "BindovanaTabela"].ResumeBinding();
////////////////////

Ja u principu ovde mogu samo da nagadjam do cega je... ako te zaista baguje i ne mozes da resis a zelis da resis izdvoj mi deo projekta vazan za ovu pricu, zipuj i posalji mi na [email protected]... siguran sam da ti mogu pomoci...
[ dusty @ 04.08.2004. 14:18 ] @
Paaaaa, recimo da sam _nešto_ uspeo da uradim. Problem je u bindovanju na DateTimePicker. Iako vrednosti nisu null, binding odlepi posle updatea. Držim jedan DataGrid za debagovanje i posle updatea kontrole ostanu pazne, ali u DataGridu se vidi da je DataSet i dalje popunjen ?! Nije mi jasno, milion puta sam pravio binding na DateTimePicker, a sada nesto ludi ?!

Kada sam izkomentarisao redove gde bindujem za DateTimePicker proggy fercera !

Izgleda da mi sada jedino preostaje da napravim svoju kontrolu za DateTime koja ce prihvatati null.
[ aXi @ 04.08.2004. 15:29 ] @
I meni je ludelo Bindovanje kada nije inicijalizovan DateTime a bindujem... stoga si u pravu => ili ces napraviti svoju kontrolu koja prima null (imas jednu na CodeProject.com) ili ces inicijalizovati vrednosti uvek u DataSetu ako ne postoje...

bedaq...