Novo

Forum kao aplikacija na telefonu

Dodajte forum na početni ekran i koristite ga kao aplikaciju, sa menijem na dnu ekrana.

  • 20 odgovora
  • 6.766 pregleda

Najnovija ↓

Pozivanje dataSeta koji se nalazi u drugoj Formi 15.06.2007. u 12:31 · pre 235 meseci #1
Pozdrav,
zelim da iz Form2 citam dataSet1 koji se nalazi u Fom1. Na Form1 prikazem podatke u dataGrid-u, ali u Form2 ne mogu to da uradim. Ne znam kako bi to trebalo da uradim, dataSet1 sam stavio da bude public, a pokusao sam da instanciram Form1 na Form2:
Code:

Form1 forma = new Form1();
datagrid1.DataSource = forma.dataSet1;

ali tako ne prolazi, jer izgleda kao da instanciram novu Form1...

Koristim VS.NET 2003, C#, SQL Srvr 2000/2005...

Hvala,
Vlada
Re: Pozivanje dataSeta koji se nalazi u drugoj Formi 15.06.2007. u 13:16 · pre 235 meseci #2
Ja koristim vs 2005. Probaj ovako, treba da radi:

Dim a As New Form1
a.CourseTableAdapter.GetData.DataSet. (pa dalje uzimas sta hoces npr tables(0).rows...)
ako ne posalji ceo kod!
Re: Pozivanje dataSeta koji se nalazi u drugoj Formi 15.06.2007. u 14:00 · pre 235 meseci #3
Ovako otprilike (maternji mi je VB, ali cu pokusati C# napamet):
Kod u form1:
Code:

form2 MyFrom2;
form2.show(this);

Kod u form2:
Code:

form1 MyParent;
MyParent = this.owner;
datagrid1.DataSource = MyParent.dataSet1;


PS. obrati paznju na velika/mala slova jer ih ne znam napamet.
Potpis
Nebojsa Milanovic:
-Trumpa smatram vrhunskim predsednikom i voleo bih da živim u državi na čijem je on čelu
-Rusija ne laže, ne vodi osvajačke ratove
-Trump je svetla tačka u USA blatu
-Elon Musk, možda najpametniji i najtrezveniji Amerikanac
Re: Pozivanje dataSeta koji se nalazi u drugoj Formi 15.06.2007. u 14:29 · pre 235 meseci #4
Probaj Ovako:
Deklarisi promenljivu dataSet1 kao PUBLIC STATIC promenjivu klase FORM1.

i moci ces da joj pristupis iz druge forme bez instanciranja zato sto je STATIC
datagrid1.DataSource = forma.dataSet1;

samo razmisli sta znaci i da li ti odgovara da ti promenjiva dataSet1 bude STATIC.
Re: Pozivanje dataSeta koji se nalazi u drugoj Formi 15.06.2007. u 23:47 · pre 235 meseci #5
Citat:
Shadowed: 
Kod u form2:
Code:

form1 MyParent;
MyParent = this.owner;
datagrid1.DataSource = MyParent.dataSet1;



Nazalost, javlja gresku prilikom build-a u kodu za this.Owner:
D:\My Documents\Visual Studio Projects\MojProjekat\Form2.cs(117): Cannot implicitly convert type 'System.Windows.Forms.Form' to 'MojProjekat.Form1'




Citat:
vladazec: Probaj Ovako:
Deklarisi promenljivu dataSet1 kao PUBLIC STATIC promenjivu klase FORM1.

i moci ces da joj pristupis iz druge forme bez instanciranja zato sto je STATIC
datagrid1.DataSource = forma.dataSet1;

samo razmisli sta znaci i da li ti odgovara da ti promenjiva dataSet1 bude STATIC.


Probao sam da promenim dataset iz private u static i vraca sledecu gresku prilikom build-a:
D:\My Documents\Visual Studio Projects\MojProjekat\Form1.cs(71): Static member 'MojProjekat.Form1.dataSet1' cannot be accessed with an instance reference; qualify it with a type name instead.

Pozdrav,
Vlada
Re: Pozivanje dataSeta koji se nalazi u drugoj Formi 16.06.2007. u 00:37 · pre 235 meseci
izmenjeno 1 put, poslednji put Shadowed 16.06.2007. u 00:54
  1. Shadowed16.06.2007. u 00:54zapis iz teksta poruke
#6
Citat:
bigtime: Nazalost, javlja gresku prilikom build-a u kodu za this.Owner:
D:\My Documents\Visual Studio Projects\MojProjekat\Form2.cs(117): Cannot implicitly convert type 'System.Windows.Forms.Form' to 'MojProjekat.Form1'

Cudno, ja sam ovo ovako radio vise puta, jedino sto je bio VB ali isti princip.

Edit:
Evo upravo sam probao sledece:
Code:

Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
    Me.Text = "test"
    Dim bla As New Form2()
    bla.Show(Me)
End Sub

Code:

Private Sub Form2_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
    Dim xyz As Form1 = Me.Owner
    MsgBox(xyz.Text)
End Sub


i dobijam poruku test

Edit2:
Ali, nakon sto sam probao u C#-u... dobijam istu tu gresku. Ali moze se resiti sa: MyParent = (Form1)this.owner;
E sad, posto nisam bas narocito upucen u C#.. bas me zanima preciznije u cemu je stvar sa implicitnom i eksplicitnom konverzijom, tj. zasto nije isto u VB-u i C#-u
Potpis
Nebojsa Milanovic:
-Trumpa smatram vrhunskim predsednikom i voleo bih da živim u državi na čijem je on čelu
-Rusija ne laže, ne vodi osvajačke ratove
-Trump je svetla tačka u USA blatu
-Elon Musk, možda najpametniji i najtrezveniji Amerikanac
Re: Pozivanje dataSeta koji se nalazi u drugoj Formi 16.06.2007. u 00:58 · pre 235 meseci #7
Uspeo sam da procitam dataSet1 na formi Form2.
U Form1 sam nakon punjenja "dataSet1" otvorio Form2 i za "dataSet1" iz Form2 dodelio vrednost "dataSet1" iz Form1 i to je proslo:

Code:

Form2 proba = new Form2();
proba.dataSet1 = this.dataSet1;
proba.ShowDialog(this);


U Form2_Load dogadjaju sam napunio dataGrid i podaci su prikazani...

Code:

dataGrid1.DataSource = dataSet1.Tables["tabela"];


Hvala puno svima koji su pomogli.
Pozdrav,
Vlada
Re: Pozivanje dataSeta koji se nalazi u drugoj Formi 17.06.2007. u 14:45 · pre 235 meseci #8
To sto si uradio je pogresno. Zapravo pogresan dizajn.
Zasto?

Jer po tvom kodu ponovo kreiras i unis DataSet, i on nije isti u odnlus na onaj koji zelis da pozoves.
Da bi to radilo ispravno, moras da negde u kodu Forme1 zapamtis referencu Forme2, i onda da pozoves taj dataSet.

Pozdrav
Re: Pozivanje dataSeta koji se nalazi u drugoj Formi 18.06.2007. u 16:11 · pre 235 meseci #9
Slazem se sa ovim, malo je preterano instancirati celokupan form samo da bi dobio dataset iz njega, narocito ako je taj dataset takav da ga korisnik nije menjao u Form1. Ako sadrzi samo podatke ucitane iz baze, onda bolje samo instanciraj sam DataSet u svojoj formi...
Potpis
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ć
Re: Pozivanje dataSeta koji se nalazi u drugoj Formi 24.06.2007. u 20:35 · pre 235 meseci #10
Citat:
mmix: Slazem se sa ovim, malo je preterano instancirati celokupan form samo da bi dobio dataset iz njega, narocito ako je taj dataset takav da ga korisnik nije menjao u Form1. Ako sadrzi samo podatke ucitane iz baze, onda bolje samo instanciraj sam DataSet u svojoj formi...

Slazem se i ja sa ovim :), ali to resenje je specificno za ovaj slucaj (dataset).

Generalna praksa bi bila napraviti staticno polje npr. "public static Form1 MyInstance" u samoj klasi Form1, zatim u konstruktoru za Form1 staviti "Form1.MyInstance = this".

Jos bolje, napraviti static property MyInstance:
Code:

        private static Form1 myInstance;
        public static Form1 MyInstance
        { 
          get { return myInstance; }
        }

        public Form1()
        {
            InitializeComponent();
            myInstance = this;
        }


Onda ti je u celom projektu na raspolaganju Form1.MyInstance, a samim tim i Form1.MyInstance.dataset1...

Naravno, ovde su i 2 logicna prerequisita...
1. dataset1 i sve ostalo sto ti treba u drugim klasama moraju imati modifier "public", ili napravi property koji omoucava samo "get" za sve sto ti treba (bolja opcija, jer onemogucavas da neko, pa cak i ti, poyebe reference na komponente forme).
2. arhitektura aplikacije mora biti takva da je uvek instanciran samo jedan form1 (tipicno kod STA aplikacija), u suprotnom Form1.MyInstance ce imati samo zadnji instancirani...
Re: Pozivanje dataSeta koji se nalazi u drugoj Formi 25.06.2007. u 14:43 · pre 235 meseci #11
Ta budzevina koju si napisao je jedan deo "singleton" paterna. Drugi deo, koji te u stvari stiti od tacke 2 ti fali (singleton klase nemaju public konstruktore). Uzevsi u obzir da svi static objekti zive dok zivi aplikacija ili dok se eksplicitno ne obrisu, ne vidim situaciju u kojoj je stavljanje formova u kvazi-singleton patern prihvatljivo resenje koje nema bolju alternativu...
Potpis
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ć
Re: Pozivanje dataSeta koji se nalazi u drugoj Formi 25.06.2007. u 15:09 · pre 235 meseci #12
Ok, ok... sheesh... :)

Code:

        private Form2()
        {
            this.InitializeComponent();
        }

        private static Form2 myInstance = null;
        public static Form2 MyInstance
        {
            get { return myInstance = myInstance ?? new Form2(); }
        }
Re: Pozivanje dataSeta koji se nalazi u drugoj Formi 25.06.2007. u 16:11 · pre 235 meseci #13
Ok, dovoljno blizu ;)

Medjutim, pogledaj sad nasu temu o dispose patternu i vidi koliko je dobro primenjivati ovakve metode. Cross-form koriscenje komponenti (ukljucujuci dataset-ove) ima smisla jedino kod parent-child formova (Ako Form1 instancira form2 pa mu prosledi svoj DataSet, mada je BindingSource preporucljiviji). Drzati eksterne reference na disposable objekte i/ili njihovu decu nije dobra praksa, bar po meni.
Potpis
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ć
Re: Pozivanje dataSeta koji se nalazi u drugoj Formi 25.06.2007. u 16:24 · pre 235 meseci #14
Znas kako, ja i verovatno neki odavde imamo praksu da sve sto se tice komunikacije sa bazom drzimo u jednoj klasi. Znaci ono, imas klijentsku aplikaciju, jednu dataset klasu i samo jednu instancu dataseta u celoj aplikaciji koju cuvas u nekom sigleton objektu koji ja cesto zovem deskriptivno "D" (ah taj Delphijev datamodule...) :).

Onda radis D.Dataset.xyz, D.bindingSourceXyz.abc, D.ConnectToDb, D.GetServerDateTime...

Mozda to i nije najsrecniji pristup, ali mi je trenutno najbrze i najmanje error prone, dok ne napisem najzad svoj data framework za .net koji cu da koristim u svim aplikacijama. U slucaju ovakvog pristupa tacno znam sta radim, tako da necu disposovati D pre kraja aplikacije (a tada ni nije potrebno), tako da za te potrebe cak i onaj prvi kvazi-singleton nacin je i vise nego dovoljan. Nije kao da ne moze bolje, samo mozda nije potrebno bolje...

Poz, i hvala za tip sa private konstruktorom, ne bi mi nikad palo na pamet da je tako nesto moguce... ;)
Re: Pozivanje dataSeta koji se nalazi u drugoj Formi 25.06.2007. u 16:40 · pre 235 meseci #15
Umm, a sta je lose kod metode koju sam ja preporucio (u popravljenoj varijanti)?
Potpis
Nebojsa Milanovic:
-Trumpa smatram vrhunskim predsednikom i voleo bih da živim u državi na čijem je on čelu
-Rusija ne laže, ne vodi osvajačke ratove
-Trump je svetla tačka u USA blatu
-Elon Musk, možda najpametniji i najtrezveniji Amerikanac
Re: Pozivanje dataSeta koji se nalazi u drugoj Formi 26.06.2007. u 12:22 · pre 235 meseci #16
Citat:
_v!rus_: Znas kako, ja i verovatno neki odavde imamo praksu da sve sto se tice komunikacije sa bazom drzimo u jednoj klasi. Znaci ono, imas klijentsku aplikaciju, jednu dataset klasu i samo jednu instancu dataseta u celoj aplikaciji koju cuvas u nekom sigleton objektu koji ja cesto zovem deskriptivno "D" (ah taj Delphijev datamodule...) :).


Ja je zovem Data, valjda :)

Inace i po meni ovaj pristup nije los iako u foramama drzim referencu na externi dataset ali tako dobijam na efikasnosti, performansama a i sam rad je olaksan. Naravno treba znati sta se desava sa referencama i objektima.
Re: Pozivanje dataSeta koji se nalazi u drugoj Formi 26.06.2007. u 13:38 · pre 235 meseci #17
@viris and nexgo:
Bejah ja jednom Delphi programer i secam se tih 'budzevina", jel to nesto npr kao ovo na slici dole :) Upravo sad se ubih ovde pokusavajuci da debugujem ovo krme od datamodula. Slazem se sa obojcom da taj pristup radi, ali po meni je taj pristup los jer verovatno niko sem tebe ne razume niti ce ikad razumeti kako to radi :) Narocito ako prvis ista kompleksnije od iks-oks igrice ili programa za licne cekove ili videklubove.
PS, forme u .netu nisu ekvivalent datamodula, ako hoces datamodul u .NETu onda se to radi rpeko Component-e, manji je overhead.




@shadowed: Tvoj pristup radi, moj komentar na celu ovu pricu je bio samo da je instanciranje celog forma samo i iskljucivo u svrhu dobijanja reference dataseta iz njega losa praksa.
Potpis
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ć
Re: Pozivanje dataSeta koji se nalazi u drugoj Formi 26.06.2007. u 14:30 · pre 235 meseci #18
Iskreno ne razumem ovo bas najbolje. Sta su datamoduli? Nisam radio u delphi tako da ne znam. Ova slika mi deluje nekako komplikovano. Kod mene je princip da imam jedan static DataSet koje sve forme vide, tako da mi nije potrebno nikakvo instanciranje formi da bi dosao do podataka.
Re: Pozivanje dataSeta koji se nalazi u drugoj Formi 26.06.2007. u 15:02 · pre 235 meseci #19
Datamodul je u Delphiu bio ono sto je Component u .NETu, prosto kolekcija pod-komponenti vizuleno predstavljena kroz ikonice koje mozes kofigurisati kroz dizajner. Ovo sto vidis na slici su delphi ekvivalenti .NETovim konekcijama, komandama, adapterima i datasetovima (nije MS to izmislio ;)), ja sam samo zamazo imena onih koji nisu za javnost :).
Sa tom razikom sto su datasetovi bili vezani za jedan entity (nisi mogao vise tabela u jedan dataset) pa ne postoje dijagrami za iste. Veoma veoma retko je postojalo vise od jedne instance modula i vecina delphi programera nastavlja sa istom praksom u NETu. To se vrlo brzo otme kontroli...
Potpis
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ć
Re: Pozivanje dataSeta koji se nalazi u drugoj Formi 26.06.2007. u 16:36 · pre 235 meseci #20
Citat:

PS, forme u .netu nisu ekvivalent datamodula, ako hoces datamodul u .NETu onda se to radi rpeko Component-e, manji je overhead.

Znam, znam, tako i koristim :)

Nego u vezi onog tvog krmeta, isto tako mozes i u .net-u da napravis dataset sa toliko tabela i bice jos crnji i zamrseniji, jer su pored imena tabela jos vidljive i polja i sve ostalo, tako da nije u tom slucaju datamodul kriv... ;) "Losa praksa" postoji u svakom programskom jeziku/alatu.

I jos nesto, kad smo vec tu. Zanima me kako je uopste MS zamislio da se koristi Dataset u VS-u, da li *celu* bazu tj. model baze staviti u jedan Dataset, ili napraviti za svaki "logicki entitet" u aplikaciji po jedan dataset, npr. SubjektDataset koji sadrzi glavnu tabelu Subjekti linkovanu na podtabele SubjektiTelefoni, SubjektiXYZ, ...?


Odgovori
Prijavite se da biste odgovorili u ovoj temi.PrijavaRegistracija

Premeštanje teme