Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

Čudan problem sa postavljanjem master/detail između dve tabele

[es] :: .NET :: .NET Desktop razvoj :: Čudan problem sa postavljanjem master/detail između dve tabele

[ Pregleda: 1295 | Odgovora: 8 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

Predrag Supurovic
Pedja YT9TP
Užice

Član broj: 157129
Poruke: 6204

Sajt: pedja.supurovic.net


+1555 Profil

icon Čudan problem sa postavljanjem master/detail između dve tabele02.02.2011. u 12:30 - pre 144 meseci
Napravio sam prosto testni primer da ispitam problem sa kojm sam se susreo.

On se sastoji od DataSeta napravljenog u dizajneru i jedne forme.

Na DataSet-u sam napravio dve tabele MasterTable i DetailTable i jednu relaciju između njih po odovarajućem ključu.

Na formi se nalaze dva grida MasterGrid i DetailGrid. Na njoj su i MasterBindingSource i DetailBindingSource koji su postavljeni kao DataSource na odgovarajućim gridovima.

MaserBindingSource kao DataSource ima sam DataSet a kao dataMember je navedeno ime tabele koja je master.

Za DetailBindingSource je kao DataSource naveden MasterBindingSource a kao DataMember je navedena relacija između MasterTable i DetailTable.

Sve ovo sam napravio u Dizajneru.

Inicijalizacija forme puni tabele iz baze i sve to radi kako treba. Kad se pokrene apliakciaj oba grida prikazuju podatke iz odgovarajućih tabela, s tim, da, kako se kursor pomera po master gridu, u detail gridu se pokazuju slogovi koji po relaciji odgovaraju slogu iz master tabele. To je sve očekivano i nema prolema sa tim.

E sad, meni u stvari treba da u realnoj apliakciji sve ovo napravim u kodu. Osim gridova na formi, sve ostalo moram rogramski da podesim. Tu se javlaj problem. Kada programski podesim sve isto kao što sam opisao da sam uradio u Dizajneru, relaciajizmeđu tabela ne radi i u DetailGrid se ne prikazuju nikakvi podaci (grbid izgleda kao da mu je DataSource = nil).

Uspeo sam da utvrdim tačno mesto gde se javlaj problem: ako u Dizajneru DetailBindingSource.DataSource ostavim nepodešeno, a popunim ga programski, to neće da radi. Ako DetailBinfogSource.DataSource u dizajneru povežem sa MasterBindingSource a ostavim nepodešeno DetailBinfogSource.DataMember i onda programski u DataMember upišem naziv relacije, to radi.

Iz nekog razloga, ako DataSet na bindingSource nije povezan u dizajneru, povezivanje programski (na Load forme) ne radi.

Da li se neko susretao sa ovakvim problemom? Pošto se radi o prilično banalnoj stvai koja j epotrebna u skoro svakoj apliakciji, pretpostavljam da ja negde grešim, samo što ne mogu da uhvatim u čemu je problem. Aplikacija dakle ne prijavljuje nikakvu grešku, samo DetailGrid ne prikazuje podatke i izgleda kao da nije povezan ni sa kakvim DataSource-om.


 
Odgovor na temu

mmix
Miljan Mitrović
Profesorkin muz
Passau, Deutschland

SuperModerator
Član broj: 17944
Poruke: 6041



+4631 Profil

icon Re: Čudan problem sa postavljanjem master/detail između dve tabele02.02.2011. u 13:20 - pre 144 meseci
Da nisi ponovo kreirao dataset? a da su bindinzi ostali na staroj isntanci?

Probaj da debagujes svoj sors. Nema tu neke mudrosti, sve sto ti radis u dizajneru se zapravo na kraju svodi na kod (.designer.cs), tamo mozes da vidis kako je dizajner skockao serijalizaciju forme.
Sloba je za 12 godina promenio antropološki kod srpskog naroda. On je od jednog naroda koji je bio veseo, pomalo površan, od jednog naroda koji je bio znatiželjan, koji je voleo da vidi, da putuje, da upozna,
od naroda koji je bio kosmopolitski napravio narod koji je namršten, mrzovoljan, sumnjicav, zaplašen, narod koji se stalno nešto žali, kome je stalno neko kriv… - Z.Đinđić
 
Odgovor na temu

Predrag Supurovic
Pedja YT9TP
Užice

Član broj: 157129
Poruke: 6204

Sajt: pedja.supurovic.net


+1555 Profil

icon Re: Čudan problem sa postavljanjem master/detail između dve tabele02.02.2011. u 13:46 - pre 144 meseci
Ma jeste isti dataset. Samo sam u Dizajenru otkacio DataSource i u Load iste forme taj properti upisao komandom.

Cak sam probao da programski napravim relaciju i dataset priajvi da ta relacija vec psotoji (posto sam takvu istu napravio prethodno u diyajneru).

Sve sam ovo probao u tri razlicite test apliakcije i svugde se isto dogadja.

 
Odgovor na temu

mmix
Miljan Mitrović
Profesorkin muz
Passau, Deutschland

SuperModerator
Član broj: 17944
Poruke: 6041



+4631 Profil

icon Re: Čudan problem sa postavljanjem master/detail između dve tabele02.02.2011. u 14:00 - pre 144 meseci
Ne vredi ovako na slepo, ajd napravi neku test aplikaciju sa kratkom sdf bazom i okaci pa da vidimo gde je zapelo.
Sloba je za 12 godina promenio antropološki kod srpskog naroda. On je od jednog naroda koji je bio veseo, pomalo površan, od jednog naroda koji je bio znatiželjan, koji je voleo da vidi, da putuje, da upozna,
od naroda koji je bio kosmopolitski napravio narod koji je namršten, mrzovoljan, sumnjicav, zaplašen, narod koji se stalno nešto žali, kome je stalno neko kriv… - Z.Đinđić
 
Odgovor na temu

Predrag Supurovic
Pedja YT9TP
Užice

Član broj: 157129
Poruke: 6204

Sajt: pedja.supurovic.net


+1555 Profil

icon Re: Čudan problem sa postavljanjem master/detail između dve tabele02.02.2011. u 14:20 - pre 144 meseci
Pomislio sam da to ruadim nego je problem sto mi ej baya SQLite pa bi morala da se isntalira podrska za tu bazu. Probaću nešto da napravim sa učnim punjenjem natie tabela.

E da, utvrdiodam da ovaj problem nema nikakve veze sa relacijom. Isto se dešava kada i saprsotom tabelom, ako programski podešavam BindingSource.DataSource, datagrid koji je povezan na taj BindingSource ne prikazuje sadržaj.

 
Odgovor na temu

Predrag Supurovic
Pedja YT9TP
Užice

Član broj: 157129
Poruke: 6204

Sajt: pedja.supurovic.net


+1555 Profil

icon Re: Čudan problem sa postavljanjem master/detail između dve tabele02.02.2011. u 17:07 - pre 144 meseci
Heh, kad sam napravio sve od pocetka u kodu, onda sve radi.

Evo koda:

Code:


            // kreiraj dataset
            ds = new DataSet();


            // kreiraj master tabelu
            DataTable dtMaster = new DataTable();
            dtMaster.Columns.Add ("id_master", typeof (string));
            dtMaster.Columns.Add ("description", typeof (string));

            // napuni je podacima
            dtMaster.Rows.Add ("1", "prvi");
            dtMaster.Rows.Add ("2", "drugi");
            dtMaster.Rows.Add ("3", "treci");
            dtMaster.Rows.Add ("4", "cetvrti");

            // podesi primarni kljuc
            DataColumn[] MasterPrimaryKeyColumns = new DataColumn[1];
            MasterPrimaryKeyColumns[0] = dtMaster.Columns["id_master"];
            dtMaster.PrimaryKey = MasterPrimaryKeyColumns;

            // dodaj tabelu u DataSet
            ds.Tables.Add (dtMaster);


            // klreiraj detail tabelu
            DataTable dtDetail = new DataTable();
            dtDetail.Columns.Add("id_detail", typeof(string));
            dtDetail.Columns.Add("description", typeof(string));
            dtDetail.Columns.Add("id_master", typeof(string));

            // napuni je podacima
            dtDetail.Rows.Add("1", "1-1", "1");
            dtDetail.Rows.Add("2", "1-2", "1");
            dtDetail.Rows.Add("3", "2-3", "2");
            dtDetail.Rows.Add("4", "3-4", "3");
            dtDetail.Rows.Add("5", "3-5", "3");
            dtDetail.Rows.Add("6", "3-6", "3");
            dtDetail.Rows.Add("7", "3-7", "3");
            dtDetail.Rows.Add("8", "4-8", "4");
            dtDetail.Rows.Add("9", "4-9", "4");
            dtDetail.Rows.Add("10", "4-10", "4");

            // podsi primarni kljuc
            DataColumn[] DetailPrimaryKeyColumns = new DataColumn[1];
            DetailPrimaryKeyColumns[0] = dtMaster.Columns["id_detail"];
            dtMaster.PrimaryKey = DetailPrimaryKeyColumns;

            // dodaj tabelu u DataSet
            ds.Tables.Add(dtDetail);

            // podesi relaciju izmedju tabela i nju dodaj u DataSet
            DataRelation drMasterDetail = new DataRelation("fk_master_detail",
                                                dtMaster.Columns["id_master"],
                                                dtDetail.Columns["id_master"]);
            ds.Relations.Add(drMasterDetail);


            // kreiraj BindingSource za Master tabelu
            BindingSource bsMaster = new BindingSource();
            bsMaster.DataSource = dtMaster;

            // BindingSource za Detail tabelu se vezuje za
            // BindingSource Master tabele, a kao DataMebmer
            // se navodi naziv relacije Master/Detail
            BindingSource bsDetail = new BindingSource();
            bsDetail.DataSource = bsMaster;
            bsDetail.DataMember = "fk_master_detail";

            // povezi BindingSource za odgovarajuce gruidove na formi
            dgMaster.DataSource = bsMaster;
            dgDetail.DataSource = bsDetail;



Znači da je verovatno neki problem sa DataSource generisanim u Dizajneru. :(
 
Odgovor na temu

Predrag Supurovic
Pedja YT9TP
Užice

Član broj: 157129
Poruke: 6204

Sajt: pedja.supurovic.net


+1555 Profil

icon Re: Čudan problem sa postavljanjem master/detail između dve tabele03.02.2011. u 11:31 - pre 144 meseci
Evo napravio sam primer koji demonstirra problem na koji sam naisao.

http://www.2shared.com/file/ZVAoXjcC/dbtestdatasourcemssql.html

http://dl.dropbox.com/u/12258621/dbtestdatasourcemssql.zip

U arhivi je projekat koji se sastoji od jedne tabele i grida na formi. Sve je napravljeno u Dizajneru i grid prikazuje podatke iz tabele.

Ako se na masterBindingSource resetuje DatSource i DataMember, grid vise ne pokazuje sadrzaj tabele, cak i ako se u onload ovi propertiji podese kako treba (odgovaraqjuci kod je vec upisan).

Ya probu, prvo pokrenuti program da se proveri da li se tabela otvara. Ako je to uradu, na samoj formi se nalazi masterBindingSource. Kliknuti na njega i podesiti propertu DataSource na none. Ponovo pokrenuti program. Sada podaci nece biti prikazani, iako su u Form1_Load() obrisani propertiji programski podeseni.

[Ovu poruku je menjao Predrag Supurovic dana 03.02.2011. u 12:59 GMT+1]
 
Odgovor na temu

mmix
Miljan Mitrović
Profesorkin muz
Passau, Deutschland

SuperModerator
Član broj: 17944
Poruke: 6041



+4631 Profil

icon Re: Čudan problem sa postavljanjem master/detail između dve tabele03.02.2011. u 12:13 - pre 144 meseci
Ok, sad je jasnije. Podaci se ucitavaju i binding source radi sve kako treba. Problem je do grida koji vise nema definicije kolona iz DataSource propertija (a kad je podesen datasource na gridu grid automatski iskljuci automatsko generisanje kolona u runtime-u)

Dakle resenje je sledeci kod:

Code (csharp):

            this.masterDataGridView.AutoGenerateColumns = true;
            this.masterBindingSource.DataSource = dataSet1;
            this.masterBindingSource.DataMember = "Master";
 

Sloba je za 12 godina promenio antropološki kod srpskog naroda. On je od jednog naroda koji je bio veseo, pomalo površan, od jednog naroda koji je bio znatiželjan, koji je voleo da vidi, da putuje, da upozna,
od naroda koji je bio kosmopolitski napravio narod koji je namršten, mrzovoljan, sumnjicav, zaplašen, narod koji se stalno nešto žali, kome je stalno neko kriv… - Z.Đinđić
 
Odgovor na temu

Predrag Supurovic
Pedja YT9TP
Užice

Član broj: 157129
Poruke: 6204

Sajt: pedja.supurovic.net


+1555 Profil

icon Re: Čudan problem sa postavljanjem master/detail između dve tabele03.02.2011. u 14:47 - pre 144 meseci
Bas sam milsio da dodam i zapazanje da ako grid nije povezan sa Bindingsourceom vec BindongSource kreiram progrmski i povezem ga sa gridom onda sve radi.

Uh, kako je ovo nelogicno. Nikad mi ne bi palo na pamet da se grid tako ponasa.

 
Odgovor na temu

[es] :: .NET :: .NET Desktop razvoj :: Čudan problem sa postavljanjem master/detail između dve tabele

[ Pregleda: 1295 | Odgovora: 8 ] > FB > Twit

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.