|
[ popmilan76 @ 20.07.2014. 16:40 ] @
| Imam dve frome u jednoj je baza sa datagridview,a druga ima textboxove koje vuku podateke iz prve forme,tj datagrid prve forme,i to radi lepo,ono sto me zanima jeste kako da kada otvorim drugu formu,izmenim neki od tih textboxova i kliknem na dugme da se vrati na prvu formu sa izmenjenom bazom i datagridview |
[ AMD guy @ 20.07.2014. 18:27 ] @
How to get Values from form1 to form2
To se odnosi na bilo koju klasu, posto forme ne smeju da znaju sta koju vrednost drzi, tako se krsi koncept enkasulacije, samo prosledjujes vrednosti.
[ popmilan76 @ 20.07.2014. 18:36 ] @
Ovaj link sam vec citao,ja sam prosledio podatke iz datagrid u textbox(krsim principe enkasulacije),i ucitam ih u textbox,e sada to sto je ucitano hocu da vratim u datagrid,samo izmenjeno,makar i krsio pomenute principe....
[ AMD guy @ 20.07.2014. 18:42 ] @
Procitaj u toj temi poruke #4 i #5, mozda ce ti pomoci.
[ popmilan76 @ 20.07.2014. 18:54 ] @
Znaci,nije mi bitno ova stavka,jer ako imam 10 text boxova,treba mi 10 get set value,sto mi ne treba,uradio sam svaki textbox kao internal modifers
hocu nesto ovako ako je to moguce
datagridview1.columns[0].value = textbox1.text;
jel to ikako moguce....
[ AMD guy @ 20.07.2014. 18:58 ] @
Moguce ali ja sam prestao da radim na taj nacin pre nekoliko godina. Takve spagete sam davno prozvakao i zaboravio
Sada koristim klase i properties
[ popmilan76 @ 20.07.2014. 19:05 ] @
Dobro,onda nista,hvala u svakom slucaju....
[ popmilan76 @ 20.07.2014. 21:18 ] @
Zna li neko,kako ovo najednostavnije da uradim....
[ djordjeno @ 20.07.2014. 23:10 ] @
za upis u celiju:
dataGridView[1,1].Value="test";
samo ne znam kako imas vezu izmedju celije odredjenog textbox-a.
tj kako znas za koju celiju (red, kolona) odgovara neki textbox iz forme?
[Ovu poruku je menjao djordjeno dana 21.07.2014. u 00:20 GMT+1]
[ popmilan76 @ 21.07.2014. 08:02 ] @
Prosto.....imam formu u kojoj su podaci iz baze,kada kliknem desni klik,imam stavku izmeni,gde mi se pojavi forma sa podacima,,selektovanog reda...recimo imam kolone ime i prezime,kada kliknem na petra petrovica,pojavi mi se forma sa text boxovima,gde pise petar petrovic,e,sada ono sto ja hocu jeste da kada se pojavi ta druga forma,sa petar petrovic,izmenim to u recimo marko markovic....kao neki edit selektovane kolone...Nasao sam kod da promenim datagrid iz te iste forme,dakle prve forme,ali i kada promenim to ,ne menja se u bazi ,vec posle vraca kao i pre....to je ovaj kod....
int i;
i = dataGridView1.SelectedCells[0].RowIndex;
dataGridView1.Rows.Cells[2].Value = textBox3.Text;
....samo sto meni treba da to radi iz druge forme.....
[ djordjeno @ 21.07.2014. 09:15 ] @
Prosledi u konstruktoru druge forme instacu datagridview-a iz prve.
npr...
Form2(Datagridview dgv)
{
localdgv = dgv;
}
I dalje koristi
localdgv.Rows.Cells[2].Value = textBox3.Text;
gde ti treba u form2 event-ima.
[ popmilan76 @ 21.07.2014. 09:24 ] @
Stavio sam modifers na internal i to mi se pojavljuje ta instanca datagridview u drugoj formi,ali nesto nece,i kako da zapamti i u bazi promene u datagridu.....
[ popmilan76 @ 21.07.2014. 21:15 ] @
Moze li mi neko pomoci sa ovim osnovama baze podataka,kada je rec sa vise formi...
[ AMD guy @ 21.07.2014. 21:31 ] @
[ popmilan76 @ 22.07.2014. 08:35 ] @
Jel zna negde gde postoji neki free open source code vezan za c sharp i access bazu.....
[ S A J A @ 22.07.2014. 20:06 ] @
Citat: popmilan76:
Prosto.....imam formu u kojoj su podaci iz baze,kada kliknem desni klik,imam stavku izmeni,gde mi se pojavi forma sa podacima,,selektovanog reda...recimo imam kolone ime i prezime,kada kliknem na petra petrovica,pojavi mi se forma sa text boxovima,gde pise petar petrovic,e,sada ono sto ja hocu jeste da kada se pojavi ta druga forma,sa petar petrovic,izmenim to u recimo marko markovic....kao neki edit selektovane kolone...Nasao sam kod da promenim datagrid iz te iste forme,dakle prve forme,ali i kada promenim to ,ne menja se u bazi ,vec posle vraca kao i pre....to je ovaj kod....
Što ne menjaš podatke direktno u bazi umesto da menjaš grid?
Znači kad neko izmeni podatke u formi za izmenu i klikne na "Save", ti lepo te podatke upišeš u bazu a zatim samo refreshuješ grid.
[ popmilan76 @ 22.07.2014. 22:48 ] @
Da,ali ja hocu da mi prikaze tabelu,pa da vidim sve zapise,pa samo obelezim jedan red,desni klik,pojavi se forma,izmenim sta treba i kliknem na save,i i zmeni i tabelu
(datagrid) i samu bazu....
I to da iz druge forme menja podatke u prvoj,i posle toga da se zatvori
[ S A J A @ 22.07.2014. 23:28 ] @
Pa o tome i govorim.
Prva forma je grid, druga forma su detalji.
Znači prvo se vidi grid, korisnik izabere stavku i pokrene izmenu.
Otvori se druga forma, korisnik izmeni šta hoče i klikne na save.
Pre nego što se zatvori forma, proveriš da li je sve dobro uneto i upišeš u bazu.
Onda se zatvara forma i posle samo treba da uradiš grid refreš da pokupi te izmene.
[ popmilan76 @ 23.07.2014. 10:01 ] @
Da,to znam,ali ne znam koji kod da koristim,i kako da prebacim podatke iz druge forme u prvu,i necu nikakav refresh ili save,vec samo stavka u drugoj formi koja bi upisala odmah promenu i u bazi i u datagridu.....Jel moze neki kod...
[ S A J A @ 23.07.2014. 11:47 ] @
Paaaa, ako već ne koristiš klase onda probaj ovako... vb kod sam pastovao iz neke moje ranije aplikacije:
Korisnik klikne na EDIT:
Code: Dim f As New RadFormNaloziDetalji
f.Tag = RadGridViewNalozi.CurrentRow.Cells("id").Value <-- ovo je moja karabudževina da prosledim nešto u drugu formu
f.Owner = Me
f.ShowDialog()
Otvori se forma, korisnik izmeni podatke koje želi... klikne na OK, forma se zatvori. Onda se nastavlja kod koji to upisuje u bazu:
Code: Dim idNaloga As Integer = Val(f.Tag)
Dim n = RadFormMain.db.Nalozi.FirstOrDefault(Function(u) u.ID = idNaloga)
n.BrojNaloga = f.RadSpinEditorBrojNaloga.Value
n.ImeKlijenta = f.RadTextBoxImePrezime.Text
n.AdresaKlijenta = f.RadTextBoxAdresa.Text
n.KontaktKlijenta = f.RadTextBoxKontakt.Text
n.Iznos = Val(f.RadSpinEditorIznos.Value)
n.DatumIzdavanja = f.RadDateTimePickerDatumIzdavanja.Value.ToShortDateString
n.StatusID = f.RadDropDownListStatus.SelectedValue
RadFormMain.db.SaveChanges()
Onda refreshuješ grid...
EDIT: Ovaj kod za upis u bazu je čisto ilustrativan, mislim to radi normalno ali tu sam koristio Entity Framework koji ti ne možeš da koristiš jer radiš sa Access bazom. Mislim da EF ne može da "mapira" Access bazu, nisam siguran, probaj. Ja kod tih lokalnih varijanti ili web aplikacija koristim SQLite.
[Ovu poruku je menjao S A J A dana 23.07.2014. u 12:57 GMT+1]
[ popmilan76 @ 23.07.2014. 12:54 ] @
Poceo sam koristit nesto od klasa,za prenos vrednosti do druge forme......evo koristim ovaj kod,i on sljaka....znaci otvori drugu formu i popuni textbox
int i;
i = dataGridView1.SelectedCells[0].RowIndex;
FrmUnos unos = new FrmUnos();
unos.BrojOvlascenja = dataGridView1.Rows.Cells[0].Value.ToString();
unos.Naziv = dataGridView1.Rows.Cells[1].Value.ToString();
unos.Adresa = dataGridView1.Rows.Cells[2].Value.ToString();
unos.OvlLica = dataGridView1.Rows.Cells[3].Value.ToString();
unos.reon = dataGridView1.Rows.Cells[8].Value.ToString();
unos.Posta = dataGridView1.Rows.Cells[9].Value.ToString();
unos.Telefon = dataGridView1.Rows.Cells[11].Value.ToString();
unos.BrojFaha = dataGridView1.Rows.Cells[6].Value.ToString();
unos.DatumOd = dataGridView1.Rows.Cells[4].Value.ToString();
unos.DatumDo = dataGridView1.Rows.Cells[5].Value.ToString();
tabela();
unos.button1.Visible = false;
unos.Show();
I sada kada treba da odradim iz druge forme izmenu datagrida i baze...nesto nece......
[ S A J A @ 23.07.2014. 15:01 ] @
Probaj da staviš umesto .Show() da bude .ShowDialog().
Ako to ne pomogne, pastuj taj kod koji upisuje u bazu.
[ Shadowed @ 23.07.2014. 15:18 ] @
Sta podrazumevas pod refresh-ovanjem grid-a? Ako mislis da time ucita sve podatke koji se prikazuju u njemu iz baze, za tim jednostavno nema potrebe.
[ S A J A @ 23.07.2014. 15:42 ] @
Citat: Shadowed: Sta podrazumevas pod refresh-ovanjem grid-a? Ako mislis da time ucita sve podatke koji se prikazuju u njemu iz baze, za tim jednostavno nema potrebe.
Da, mislio sam na učitavanje podataka iz baze. Pa daj bolje rešenje, refresh se prosto programira a i može dobro da posluži ako je neko drugi nešto menjao pa da se vide dobri podaci.
[ popmilan76 @ 23.07.2014. 16:36 ] @
Uspeo sam delimicno,i ne znam jel i najzgodnije resenje,sada mi izmeni bazu,ali promenu u datagrid prve forme,vidim tek kada izadjem u nju,pa se vratim.....
Evo koda za izmenu,tj update polja(ovde sam stavio samo jedno polje da mi promeni....
private void button3_Click(object sender, EventArgs e)
{
OleDbConnection conn = new OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0; Data Source=" + Application.StartupPath + "\\BazaPunomoci.mdb");
conn.Open();
FrmIzmena izmena = new FrmIzmena();
izmena.redbr();
{
FrmUnos unos = new FrmUnos();
if (textBox3.Text == "")
{ }
else
{
id = label11.Text;
sqlQRY = "Update Baza SET Baza.BrojPunomoci = '" + textBox1.Text + "' WHERE Baza.RedBr = " + id + "";
cmd.CommandText = sqlQRY;
cmd.Connection = conn;
cmd.ExecuteNonQuery();
MessageBox.Show("Updated!");
}
}
conn.Close();
Close();
[Ovu poruku je menjao popmilan76 dana 24.07.2014. u 09:09 GMT+1]
[ Shadowed @ 24.07.2014. 09:54 ] @
Citat: S A J A:
Da, mislio sam na učitavanje podataka iz baze. Pa daj bolje rešenje, refresh se prosto programira a i može dobro da posluži ako je neko drugi nešto menjao pa da se vide dobri podaci.
Pa, dovoljno je da osvezi taj jedan red odmah tu. Nema smisla dovlaciti gomilu podataka zbog jednog reda.
[ popmilan76 @ 24.07.2014. 10:46 ] @
Ono sto mi treba jeste kako da stavim datagrid na public,ili da na toj prvoj formi,odradim datagrid kao refresh,ili da rafreshujem konekciju celu.....
[ Shadowed @ 24.07.2014. 11:20 ] @
Uradi ShowDialog umesto Show a nakon te linije, proveri da li je DialogResult OK (sto ce reci da si kliknuo OK a ne Cancel) i onda uradi obrnutu stvar od ovog:
Citat: popmilan76:
unos.BrojOvlascenja = dataGridView1.Rows[ i].Cells[0].Value.ToString();
unos.Naziv = dataGridView1.Rows[ i].Cells[1].Value.ToString();
i dobices update-ovano u gridu. A zasebno snimi u bazu. I ne moras bez potrebe da dovlacis sve podatke (zapravo ni jedan).
E, druga je stvar sto bi grid trebao da ti pokazuje podatke iz liste objekata koje si popunio iz baze. Onda bi u toj details formi promenio objekat i automatski bi ti se promenio u gridu (morao bi da implementiras INotifyPropertyChanged).
E sad, da li ti je to vredno cimanja, to je vec drugo pitanje :) Kad steknes rutinu, onda nije problem to uraditi ni za manje projekte a rutinu ces steci ako se iscimas nekoliko puta vise nego sto je potrebno.
Preporuceni nacin rada ces najlakse postici koriscenjem MS SQL-a umesto Access-a i EntityFramework-om ili Linq2Sql-om za kreiranje klasa i komunikaciju sa bazom.
[ popmilan76 @ 24.07.2014. 17:54 ] @
Mogu li dataset u prvoj formi da stavim na public,pa da ga ponovo punim....ako moze kako
[ popmilan76 @ 24.07.2014. 23:00 ] @
Ili da napravim public void osvezi() u prvoj formi,pa da ga pozovem iz druge forme,jel to moze tako nekako...
[ popmilan76 @ 25.07.2014. 21:28 ] @
Napravio sam neku osvezi funkciju u prvoj formi....
public void osv()
{
string query = "SELECT * FROM Baza";
conn.Open();
{
using (OleDbDataAdapter adapter = new OleDbDataAdapter(query, conn))
{
try
{
DataSet ds = new DataSet();
ds.Clear();
adapter.Fill(ds);
dataGridView1.DataSource = ds.Tables[0];
}
finally
{
conn.Close();
}
}
}
Zatim otvorim drugu formu(ova prva je i dalje vidljiva u pozadini)...i posle izmena,stavim i izmena.osv().....pa close()...i neizmeni datagrid....Zaasto?Gde gresim?
[ popmilan76 @ 29.07.2014. 23:19 ] @
Da iskoristim ovu temu......Kako da izvucem vrednost selektovanog reda u datagrid i da tu vrednsot prebacim u drugu formu ili cristal report.....Da li to moze sa public datagridview dgv {get;set:} ili nekako drugacije......
[ popmilan76 @ 30.07.2014. 09:42 ] @
Ili kako da izvucem vrednost iz textboxa sa forme u crystal report
[ S A J A @ 30.07.2014. 17:22 ] @
Ne znam za CR ali MS Reporting ne može da vuče vrednosti iz aplikacije već se direktno povezuje na bazu pa odatle izvlači. Moguće i da CR radi na sličnom principu.
[ popmilan76 @ 30.07.2014. 18:52 ] @
Ako je tako,to je bas glupo,blagi uzas.....i ja sam se toga bojao,sve se vuce iz dataseta
[ Shadowed @ 31.07.2014. 09:35 ] @
DataSet objekat ne moras da popunis iz baze.
[ popmilan76 @ 31.07.2014. 11:39 ] @
Odradio sam tako sto sam stavio jedan textbox na formu gde je crzstal report,i u njega mi vuce recno iz druge forme,a u formu gde je cp sam stavio sql gde je select * from nesto where RedBr = " + textbox1.text + "..i taj textbox sam stavio visible false....Drugacije mi ne pada na pamet,niti znam
[ S A J A @ 31.07.2014. 20:23 ] @
Citat: popmilan76: Odradio sam tako sto sam stavio jedan textbox na formu gde je crzstal report,i u njega mi vuce recno iz druge forme,a u formu gde je cp sam stavio sql gde je select * from nesto where RedBr = " + textbox1.text + "..i taj textbox sam stavio visible false....Drugacije mi ne pada na pamet,niti znam
Nije mi baš jasno šta si hteo da postigneš ali ovo mi nekako deluje kao karabudževina...
Ne bi trebalo na takav način da "prebacuješ" podatke od forme do forme. Koristi bazu koja će držati podatke pa onda možeš da ih koristiš iz bilo koje forme i/ili koristi neke zajedničke klase/promenljive pa u njih trpaj sve što ti treba dok aplikacija radi.
Što se tiče reportinga, ja sam već pisao o njemu u ovoj poruci. Pogledaj čisto da bi razumeo kako to funkcioniše, verovatno je kod Crystal Reportsa to slično.
[ popmilan76 @ 01.08.2014. 09:59 ] @
Jeste karabudzevina,ali sta da radim,kada sve mora da ide preko dataseta(access baza),i ja sam osmislio da to ide prek RedBr(autonumber)...posto vec ne moze da bude preko selekcije sa datagrid,ja bih to najvise voleo....obelezim polje u datagrid i pojavi mi se ti podaci u reportu,ali to ne znam...
[ S A J A @ 01.08.2014. 11:04 ] @
Nešto ne radiš kako treba. Problem je u koncepciji. Odakle dolaze ti podaci iz grida? Verovatno se vuku iz baze. E pa, kad povučeš te podatke iz baze u grid, i kad ti podaci trebaju na raznim mestima u aplikaciji onda ih na svakom tom mestu opet povlačiš iz baze. Loša ti je varijanta da podatke iz grida posle šetaš po formama i kontrolama da bi ih koristio. Svaki put kad ti treba neki podatak obratiš se direktno izvoru, tj. bazi gde stoje podaci. Znači grid učitava podatke iz baze, forma za edit učitava podatke iz baze i upisuje u bazu, reporting isto čita podatke iz baze i tako dalje. Svi oni rade sa bazom a ne tako što međusobno jedni drugima prosleđuju podatke.
Ovo što sam napisao je generalni koncept, sad tu postoje razne varijacije. Da ne bi često pristupao bazi i u zavisnosti od potrebe možeš da ih držiš u memoriji (u nekim klasama ili promenljivima). Ja sad kod pristupa bazi koristim Entity Framework a radnije sam koristio DataSet i one adaptere. Koliko se sećam, dataset je pravio "kopiju" baze u lokalu, znači mogao si da učitaš celu tabelu u lokal pa posle da koristiš te podatke iz lokalne baze, čak i da menjaš šta hoćeš, a onda pustiš komandu da se to sinhronizuje sa pravom bazom. Iskoristi onda tu prednost DataSeta. Kad treba da se prikaže grid, ti učitaj prvo podatke u DataSet, onda za sve ostalo koristi te iste podatke iz dataseta. I reporting isto može da se "napuni" iz lokalnog dataseta, ne mora direktno iz baze. Samo povremeno puštaj "update" komandu kako bi prava baza držala korak sa izmenama koje radiš u memoriji.
[ Shadowed @ 01.08.2014. 11:14 ] @
Oba koncepta su losa. Taj tvoj ima smisla ako imas vise korisnika a nemas centralni server. Ovaj njegov je vise los u izvedbi.
A najverovatnije ga ni sam ne koristis jer ti Entity Framework takodje kesira objekte u memoriji Ti kao dovlacis iz baze al' ti on daje lokalne
Ako imas jednu aplikaciju koja radi sa tom bazom, onda dovucene podatke, bilo u detaset-u ili EF POCO ili Linq2Sql POCO razmenjujes i obradjujes lokalno (u aplikaciji) i po potrebi (save i sl. funkcije) persist-ujes u bazu. Na taj nacin minimiziras komunikaciju sa bazom (upisujes samo po potrebi i citas samo po potrebi).
[ popmilan76 @ 01.08.2014. 12:12 ] @
Meni je to jasno,sto kaze Saja,ali kako da stavim podatke iz baye,ako ne preko nekog polja iz textbox,ali samo iz te forme,ono sto meni generalno treba,jeste da kada kliknem na neki red u datagrid,da mi upamti te podate i da ih posalje u drugu formu....ja sam to sada uradio preko get set i public,jer drugacije i ne znam,ipak sam pocetnik i radio sam neke druge stvari a ne c#,i i vs je sve to realno gledano,mnogo teze i komplikovanije...
[ ravni @ 01.08.2014. 12:34 ] @
Citat: Shadowed:A najverovatnije ga ni sam ne koristis jer ti Entity Framework takodje kesira objekte u memoriji :) Ti kao dovlacis iz baze al' ti on daje lokalne :) Ovo vazi samo unutar jedne sesije, koje bi po pravilu trebalo da budu vrlo kratke.
[ Shadowed @ 01.08.2014. 13:16 ] @
Citat: popmilan76:
Meni je to jasno,sto kaze Saja,ali kako da stavim podatke iz baye,ako ne preko nekog polja iz textbox,ali samo iz te forme,ono sto meni generalno treba,jeste da kada kliknem na neki red u datagrid,da mi upamti te podate i da ih posalje u drugu formu....ja sam to sada uradio preko get set i public,jer drugacije i ne znam,ipak sam pocetnik i radio sam neke druge stvari a ne c#,i i vs je sve to realno gledano,mnogo teze i komplikovanije...
Ako ti je grid vezan za DataSet, vezan je zapravo za jedan DataTable pa ti je jedan red u gridu jedan DataRow iz te DataTable.
Dovoljno je da taj row prosledis drugoj formi. Uz napomenu da je zapravo bolje da imas listu objekata, gde je u gridu red vezan za objekat pa da prosledis objekat.
Kako da prosledis? Tako sto recimo u toj formi kojoj prosledis napravis jedan public property, nesto kao:
public DataRow ObjectForEdit {get;set;}
i onda kada pozivas formu kazes:
Code:
frmDetails details = new frmDetails();
details.ObjectForEdit = TajSelektovaniRow;
if (details.ShowDialog() == DialogResult.OK)
{
//Snimi u bazu
}
Ovo je polu-pseudo kod, prilagodi tvojoj situaciji.
[ popmilan76 @ 01.08.2014. 13:39 ] @
Da,to sam i ja uradio,samo sto sam posalo kao public vrednost prve kolone selektovanog datagrida,i u drugoj formi se pojavljuju,isto kao textbox,a druge textbox u drugoj formi su vezani za taj prvi,textbox...I jos nesto,koja je razlika izmedju Show i ShowDialog...i jel pozeljno da ta druga formaq bude otvorena kao madalna,kao sto si ti uradio....
[ Shadowed @ 01.08.2014. 13:44 ] @
Razlika je sto Show() otvori tu drugu formu i nastavi dalje. ShowDialog() ti otvori formu i ceka da se ista zavori i pri tome vrati rezultat tj. da li su izmene na formi potvrdjene ili otkazane i sl.
[ popmilan76 @ 20.08.2014. 20:03 ] @
Odradio sam ovaj deo tako sto sam u prvoj formi pre frm2.show,stavio this.hide....a iz druge forme kada kliknem na izmeni,stavim kod za izmenu u bazi,pa posle frm1.show,pa this.hide....ali ne shvatam zasto nece da mi refreshuje datagrid tako sto samo kliknem na izmeni,i da mi ta frm1,ne nastaje,vec samo se izmeni,znaci klasican update.....
Copyright (C) 2001-2024 by www.elitesecurity.org. All rights reserved.
|