[ B_E_N_K_O_ @ 03.08.2006. 14:32 ] @
problem je u tome sto imam dve povezane tabele ( jedna drugoj spusta kljuc). Kada korisnik hoce da edituje u form view-u, isti ne moze da updatuje dve tabele.
detaljnije:
Pravio sam sajt za vodjenje nekretnina. Imam tabele: objekti, kuce, stanovi, placevi,garaze itd. E sad radi bolje normalizacije je napravljen ovakav raspored: tabela objekti ima ID (objekatID) i jos neke kolone(cena, naziv vlasnika itd) koje su identicne za sve tabele(kuce, stanovi,garaze itd.), pa da se te kolone nebi ponavljale u svim ovim tabelama one ih nece imati. Ostale tabele ce spustati kljuc u tabelu objekat(objekatID). Za jedan GridView sam napravio da bude napunjen sa svim kucama i stanovima i placevima itd. i kad korisnik klikne(select) puni se DetailsView koji uzima iz prvog objekatID i daje sve kolone iz tabela objekti i recimo kuce. E sad to radi pomocu procedure jer u slucaju da je korisnik kliknuo na stan treba da napuni sve kolone iz tabele objekti i stanovi.
Gde je problem?
Kada korisnik hoce da azurira podatke i klikne u DetailsView-u na edit, kontrola DetailsView ne moze da azurira dve tabele(i normalno izbacuje gresku). Mene zanima kako da ja izvucem iz DetailsView te podatke koje je korisnik uneo pa da napisem kod(proceduru) koja ce da azurira dve tabele sa tim unetim podacima(znaci kad korisnik klikne Ubdate).
Problem je stvarno onako interesantan, ali je neko ko je pravio profi ASP.NET strane sigurno se susreo sa slicnim problemom.
[ spartak @ 03.08.2006. 21:48 ] @
Kolega, prvo mi je malo nejasna tvoja normalizacija. Ako te dobro razumem, kardinalnost 1on1 si napravio izmedju tabele objekat i svih ostalih "dervat_objekta" tabela? Po meni to ima smisla samo kad imas po 40 kolona u tabeli. Ili su ti derivati medjusobno po properties (kolone) toliko razliciti (a za nekretnine to nije slucaj). Ili hoces da vozis worldwide bazu objekata pa ces separatno nad derivatima da vrsis neka indeksiranja i druge zahvate.

Objekat (stanovi, kuce, lokali, garaze)
Objekat.TipID

TipoviObjekta
TipoviObjekta.ID -FK- Objekat.TipID


Odgovor na tvoje pitanje glasi: Naravno da moze. ObjectDataSource ili SqlDataSource metod treba da sadrzi SQL kod koji u okviru transakcije radi update na obe tabele. Posto sam alergican na meshanje SQL i C# koda, koristim ObjectDataSource koji za sve 4 osnovne operacije (select, insert, update, delete) gadja Stored Procedure. Da ne gresim dushu, za SelectCount ne pravim SP vec pisem direktno SQL u table adapter. To ti je moja preporuka.

Znaci kad imas spUpdateObject(param, param, param, param, param) i kazes ObjectDataSource da ti je SelectMethod="spUpdateObject", ono sto mu spucas kao UpdateParameters iz tvog DetailsView ce upisati u bazu.

Naravno isto vazi i za SqlDataSource - ispisi dobar sql script, i DetailsView ce da pukne sve gde sta treba (uz otezan exception handling, data manipulaciju pre nego sto je prosledis bazi i slicno - u odnosu na ods).
[ B_E_N_K_O_ @ 04.08.2006. 05:41 ] @
Nepravim profi stranu, u pitanju je projekat koji treba da se preda u vidu seminarskog rada. Ovakvo vezivanje tabela i tabelu objekati mi je preporucio profesor(kao pomogao mi je). Nikada nebi stavljao tabelu objekti.
Svestan sam svega sto si napisao ali problem nije tako prost. E sad da zagrebemo problem malo dublje, ako te strpljenje neizneveri.
tabele:
objekti:objekatID, liceID, vrstaObjekta,cena, lokacija,adresa, opis, imePrezimeVlasnika,kontaktTel, e-mail;

kuce: kucaID,objekatID,kvadratura,spratnost,grejanje, uZajednickomDvoristu, uknjizena, zaLegalizaciju,uIzgradnji, podrum,garaza,trimSala;

stanovi: stanID, objekatID, kvadratura, struktura, sprat,odSpratova, grejanje,uknjizen,zaLegalizaciju,uIzgradnji,terasa, lodja,garaza, podrum
Uvideces mnogo istih kolona izmedju ove dve tabele ali kojih nema u tabelama lokali i placevi. Ove dve tabele ce biti dovoljne da objasnim problem:
Na mojoj webFormi postoji GridView i Detailsview. Grid se puni svim objektima(kuce, stanovi placevi itd) za odredjenog agenta(liceID nebitno). Kad korisnik klikne na stan detaisview se puni detaljima za taj stan, kada klikne kucu details se puni detaljima za tu kucu. Sve je to uradjeno pomocu procedure. Obrati paznju u razlicitim slucajevima je razlicit broj kolona.
Sad da stvar bude gora DetaisView se puni sa kolonama tabele objekti i u zavisnosti od izabranog tabelama(stanovi, kuce itd). Znaci puni se sa kolonama iz dve tabele. Da je iz jedne VWD bi automatski napisao kod za ubdate.
Glavni problem:
Kako da izvucem parametre iz kontrole DetailsView kada korisnik klikne edit i edituje podatke. Znam da cu posle da prikacim dogadjaj na dugme ubdate i ono ce da okine proceduru koja ce da pokupi te promenjene parametre i da abdejtuje bazu.
Nije u pitanju Source jer treba da se izvuku podaci iz kontrole DetailsView i to nakon editovanja i kad korisnik klikne ubate da se pokrene moja procedura koja ce da uzme parametre koje je korisnik promenio.







[ spartak @ 04.08.2006. 14:50 ] @
Nisam opet siguran da li sam te razumeo. Ne bi nikad pravio tabelu Objekti, da li to znaci da bi pravio samo tabele kuce/stanovi/garaze i.t.d.?

Pozdravi profesora.

Sve sto ti je isto u tim tabelama, sve te kolone slobodno stavi u Objekti, a samo bas specificne stvari (2-3 kolone) mozes bas da stavis u neku drugu tabelu. S obzirom na broj koji si naveo, sve treba da drzis u jednoj, a ono sto neki objekat ne koristi stavi NULL i pevaj. Jedna tabela su ti sve ove koje si naveo komotno.

Sto se tice hvatanja update i insert parametara, ASP.NET QuickStarts i samo rokaj: http://www.asp.net/QuickStart/...a/databases.aspx#masterdetails
[ B_E_N_K_O_ @ 04.08.2006. 18:27 ] @
Ma ja sam to sve zamisljao da stavim u jednu tabelu. Jedna tabela za sve objekte pa ukoliko stan nema recimo parametar "namenaLokala" da bude null. Ali je profesor kao ovako to normalizovao i samo me stavio na muke.

Potrazicu ovako koko si me uputio, a u medjuvremenu ako neko resi problem neka odgovori.
U svakom slucaju hvala ti puno na trudu.
[ spartak @ 04.08.2006. 18:38 ] @
Dobro, hoce da vas navezba. Nemas nikakve muke, samo radi inner join kod selekta a u okviru transakcije update Objekat, i update Objekat_derivat oba Where ObjekadID = 'vrednost', u okviru transakcije update obavezno.

Ajde probaj da po ovom quickstart uputstvu prosledis update parametre pa javi ako ti nesto stuca.
[ logic_rabbit @ 05.08.2006. 08:27 ] @
Glupljeg definisanja problema nisam procitao.Covece napisi koje tabele imas,koja polja za sve tabele sta hoces da update-ujes i da li koristis dataset itd.malo svog koda boze.
PS.To uopste nije napredniji problem nego pocetnicki.
[ B_E_N_K_O_ @ 06.08.2006. 15:46 ] @
ljudi nista nisam nasao sve je isto. meni otprilike treba da napravim 4 kombinacije stored procedura( za svaku kombinaciju tabela koje mogu da dodju), recimo objekti- kuce, objekti - stanovi, objekti - lokali, objekti - placevi. Samo na microsoftovom sajtu uopste nisam mogao da nadjem nista slicno. Sve je vrlo standardno.

a sto se tebe tice logic_rabbit gore ti je sve i tabele i pitanja. ja nisam mogao bolje stvarno. Ajde pitaj sta tebi nije jasno tu jer imas gore i tabele i sve.

ne znam spartak jer ti kapiras sta mi treba?
[ spartak @ 06.08.2006. 17:22 ] @
Druze, mislim da kapiram, posto smem da se opkladim u veceru da sve to mogu da napravim za sat vremena, ukljucujuci i DDL na pocetku.

Nego nisam siguran da ti kapiras sta hoces da izvedes. Ajde napravi prvo da ti radi za Objekti-1on1-Stanovi, select, insert i update. Napravi 4 procedure koje ce da urade:
Code:

spInsertStan - INSERT INTO Objekat... (uzmi identity novonastalog objekta)... INSERT INTO Stan .... WHERE ObjekatID = @<onaj uzeti identity>
spUpdateStan - UPDATE Objekat ... WHERE ObjekatID = @ObjekatID .... UPDATE Stan WHERE ObjekatID = @ObjekatID
... pa tako redom


Mozes cak da napravis odvojeno procedure za CRUD na Objekat, pa ne radis kao u spInsertStan (INSERT,INSERT) nego (exec spInsertObjekat, INSERT) u Stan. Tako bi morao da pises kombinaciju 4 SP za sve, nego samo za derivirane objekte.


E, i nemoj da bude da si zaboravio da sam ti rekao da ja to u razlicite tabele ni lud ne bih trpao ovako kako tebi profan trazi :-)
[ B_E_N_K_O_ @ 07.08.2006. 11:36 ] @
Ovaj predposlednji pasus sa CRUD mi nije bas jasan( ne znam sta ti je CRUD).
Moracu ovih dana da okacim kod na RapidShare-u pa da to neko downloaduje pa da vidi o cemu se radi.

ok kada napisem cetiri kombinacije SP ili ako napisem jednu za objekti i jednu za sve ostale. Kako da im prosledim parametre iz onog DetailsViuw-a kada korisnik klikne na update i otvore mu se svi oni textBox-ovi. On unese podatke i kad klikne na ubdate ja cu da prosledim te podatke ovim procedurama. Kako da izcitam podatke iz tih text boxova. To me zanima.

Al evo potrudicu se da ti okacim kod. Stavicu ti i dijagram. A mogu i ceo projekat?
[ VerbatimBOT @ 07.08.2006. 11:57 ] @
CRUD

Create (ako se ne varam)
Retreave
Update
Delete
[ spartak @ 07.08.2006. 15:46 ] @
Jesi li ti pogledao link na QuickStarts koji sam ti okacio? Tamo imas primer kako se prosledjuju <SelectParameters>, kako se prosledjuju <InsertParameters>, kako se prosledjuju <UpdateParameters>.

Evo napravi da ti radi samo za Objekti, pusti ovu drugu tabelu. Kad uradis select, insert, update, delete za Objekte javi se i dobijes pomoc za ostalo.
[ B_E_N_K_O_ @ 08.08.2006. 20:55 ] @
Pazi primer koji si mi okacio je neverovatno slican. Istu takvu stranu ja imam.Ali meni treba ubdate za dve tabele.

ok uradio sam za tabelu objekti i tu sljaka i insert i ubdate i delete(toj projekat sam snimio). tako da ti pricaj sta da radim odavde.

A nakon sto sam odradio za tabelu objekti pokusao sam opet:
napravio sam select upit tako da bude za dve tabele(objekti i kuce) izgleda ovako:

SELECT Objekti.objekatID, Objekti.liceID, Objekti.vrstaObjekta, Objekti.cena, Objekti.lokacija, Objekti.adresa, Objekti.opis, Objekti.imePrezimeVlasnika,
Objekti.kontaktTelefon, Objekti.eMail, Kuce.kvadratura
FROM Objekti INNER JOIN
Kuce ON Objekti.objekatID = Kuce.objekatID
WHERE (Objekti.objekatID = @objekatID)
ORDER BY Objekti.vrstaObjekta, Objekti.lokacija
namerno sam izostavio ostale parametra za tabelu kuce(ovo je samo probno), pa sam samo uzeo kolonu kvadratura.

sada mi treba za ubdate i insert kod za ove dve tabele. znaci Sql kod koji cu da upisem u update deo za ovaj SqlSorse.
Dali to uopste moguce napisati a da nisu dva odvojena upita(jedan ubdate za jednu a drugi za drugu tabelu).

P.S. Ovih dana cu da okacim projekat jer je 11 MB a nemam brzu vezu kuci

[Ovu poruku je menjao B_E_N_K_O_ dana 08.08.2006. u 22:57 GMT+1]
[ dusty @ 09.08.2006. 10:16 ] @
Citat:
Dali to uopste moguce napisati a da nisu dva odvojena upita(jedan ubdate za jednu a drugi za drugu tabelu).


Ne, nemoguce je. Napravi update-a za svaku tabelu koju si join-ovao i metni sve pod transakciju.
[ B_E_N_K_O_ @ 09.08.2006. 10:41 ] @
Ali to nece da prihvati....
Znaci VWD odem na tu stranicu odem na taj DetailsView=>configure Data Source=>specify a custom Sql statment or stored procedure=>Ubdate(to je ubdate list ili kao se vec zove ) => query builder => onda ukucam ubdate za dve tabele i on to nece da prihvati. Ljudi sta da radim. Dal da probam da mu prosledim putem koda. Ali predpostavljam da tad nece automatski da odradi parmametre.

okacio sam ceo projekat na http://rapidshare.de/files/28749307/PROJEKAT1805_12.zip.html
za one koji neznaju: kada otvorite ovu gore stranu idete na free onda vas se otvori nova na kojoj sacekate 20-tak sekunti onda prekucate zadana slova i kliknete ne znam npr dowload.



[Ovu poruku je menjao B_E_N_K_O_ dana 09.08.2006. u 13:05 GMT+1]
[ B_E_N_K_O_ @ 13.08.2006. 23:40 ] @
Tema i dalje nije do kraja realizovana. Ako je neko resio ovakav problem ili nesto slicno neka pise
[ spartak @ 13.08.2006. 23:49 ] @
Umes da napravis stored procedure?

Koju bazu koristis?
[ B_E_N_K_O_ @ 14.08.2006. 15:53 ] @
Znam da napravim proceduru. Koristim Sql Server. Kako da prosledjuje parametre za kombinacije tabela objekti- stanovi ili objekti- kuce(jednom jedna a drugi put druga). Ajde probaj kuci da napravis details view koji ce da cita iz dve tabele i koji ce da ubdate-uje dve tabele, koji ce da insertuje u dve tabele. jer znas to da uradis(znaci u jednom details view-u da ubdate-uje podatke u dve tabele)?
Ako znas napisi to pomocu koda.
[ negyxo @ 14.08.2006. 18:24 ] @
Rece ti da znas da namestis stored procedure, pa ako znas onda u cemu je problem? Vec su ti ljudi odgovorili. Kreiraj kako ti je spartak rekao i vozi.
[ B_E_N_K_O_ @ 14.08.2006. 21:34 ] @
Izgleda da je glupo da objasnjavam ajde probaj sam da napravis dve povezane tabele. I da napunis podacima DetailsView iz te dve tabele(znaci select iz prve, druge where ID = taj i taj. E onda napravis proceduru i za Ubdate i kako da joj prosledim parametre iz ove dve tabele. Tu ces naleteti na problem.
[ negyxo @ 15.08.2006. 00:48 ] @
Nema sta da probam, vec sam radio i to ne sa dve nego sa cetri i sa jos kojekakvim izmenama, u stvari i vise ako racunas sva joiniranja (mada nije poenta u broju nego da moze). U cemu je problem ja ne vidim.
Prvo treba da definises sta hoces da uradis. Znaci sta hoces da ti se prikazuje, sta hoces da update-jes, insertujes i da brises. Lepo ti je spartak napisao CRUD. Na osnovu selecta mozes da odradis UI. Koliko vidim tebe najvise buni izgleda sto ti gledas select nad jednom tabelom pa ti je onda ne jasno kako da uradis update nad vise tabela kada je potrebno. Zato imas SP koje uopste ne moraju da prate relacioni model tj. da sve posmatras kroz relacioni model. Pa tako insert za ovu tabelu pa za ovu tabelu itd. nego lepo napises select sa svim joinovima i posle SP koja ce da uradi update tako sto ce preko prosledjenih parametara da razbaca u potrebene tabele. Mislim da ce se stvari dovesti u red sledecom generacijom .NET tj. ADO.NET Entity Framework-a ali videcemo... da ne idem sad OT. (ko zeli vise da vidi neka ide ovde .)

A evo i otprilike neki odgovor za tvoj problem
neka ti je ovo select procedura (to je ta sto si ti napisao)
Code:

SELECT Objekti.objekatID, Objekti.liceID, Objekti.vrstaObjekta, Objekti.cena, Objekti.lokacija, Objekti.adresa, Objekti.opis, Objekti.imePrezimeVlasnika,
Objekti.kontaktTelefon, Objekti.eMail, Kuce.kvadratura
FROM Objekti INNER JOIN
Kuce ON Objekti.objekatID = Kuce.objekatID
WHERE (Objekti.objekatID = @objekatID)
ORDER BY Objekti.vrstaObjekta, Objekti.lokacija


Evo ti onda uproscena update procedura
Code:

UPDATE Objekti SET imePrezimeVlasnika = @imePrezimeVlasnika
WHERE 
objekatID = @objekatID

UPDATE Kuce SET kvadratura = @kvadratura
WHERE 
objekatID = @objekatID


Inace po meni si izabrao dosta lose kontrole a i nacin pristupa podacima. Bolje da si se orjentisao na dataset i objectdatasource nego li na sqldatasource. Nije da su one lose ali preko sqlDataSource-a ima dosta posla koje radi automatika "tamo negde". Ni kod objectDataSource nije mnogo bolje ali cini mi se da ima vise kontrole, mozes bolje da tweakujes Isto vazi i za detailsView. DetailsView je vise namenjen da kompletno automatski odradi posao dok FormView mozes bolje da podesis, bar je ovo neko moje misljenje.
[ spartak @ 15.08.2006. 01:05 ] @
Citat:
B_E_N_K_O_: Ako znas napisi to pomocu koda.


Vidi, necu ti dati sazvakano pa ne znam za koje pare. Ajde polako da sam ukapirash i onda ces znati sta kako radi uvek.

Citat:
MSDN
At run time, the SqlDataSource control automatically opens the database connection, executes the SQL statement or stored procedure, returns the selected data (if any), and then closes the connection.


Ovo znaci da SqlDataSource objekat ne mora da ti radi UPDATE prve, UPDATE druge nad tabelama (sto i ne moze), vec moze da gadja stored procedure u kojoj su ispisana oba UPDATE:

Na primer

Code:

<asp:SqlDataSource
   ....
   UpdateCommandType="StoredProcedure" 
   UpdateCommand="spNekaUpdateProcedura"
   .....
   <UpdateParameters>
     <asp:Parameter Name="ParametarPrvi" Type="Int32" />
     <asp:Parameter Name="ParametarDrugi" Type="String" />
   ... 
   </UpdateParameters>


Ako ti je na DetailsView postavljeno da je DataSourceID="nekiSqlDataSource", tog SqlDataSource BOLI UVO odakle vrednosti za parametre koje dobija i iz kojih su tabela. Do god dobija kolekciju parametara koju ocekuje, mogu da budu svi iz razlicitih kontrola na strani sto se njega tice, on ce okinuti spNekaUpdateProcedura sa prosledjenim mu parametrima.

[ B_E_N_K_O_ @ 15.08.2006. 14:34 ] @
evo ovako stvari stoje.
Spartak razmisljao sam isto kao i ti.
Citat:

Ako ti je na DetailsView postavljeno da je DataSourceID="nekiSqlDataSource", tog SqlDataSource BOLI UVO odakle vrednosti za parametre koje dobija i iz kojih su tabela. Do god dobija kolekciju parametara koju ocekuje, mogu da budu svi iz razlicitih kontrola na strani sto se njega tice, on ce okinuti spNekaUpdateProcedura sa prosledjenim mu parametrima.

Ali on prosto nece da primi parametre. Evo negyxo napravio sam ovakvu proceduru probno: ( to je za jos manji select upit nego predhodni koji si citirao, samo select objekatID, vrstaObjekta i kvadratura iz tabele kuce)
Citat:

ALTER PROCEDURE dbo.ubdateObjektiKuce
(
@parametar1 int, /* ovo je za objekatID*/
@parametar2 nvarchar(20), /*ovo je za vrstaObjekta*/
@parametar3 int /* ovo je za kvadraturu u tabeli kuce*/
)
AS
update objekti set vrstaObjekta = @parametar2 where objekatID= @parametar1
update kuce set kvadratura= @parametar3 where objekatID= @parametar1
/* SET NOCOUNT ON */
RETURN

taj datasource izgleda sada ovako: ( evo pogledajte select samo za tri kolone- da uprostimo jos)
Citat:

<asp:SqlDataSource ID="SqlDataSource4" runat="server" ConflictDetection="CompareAllValues"
ConnectionString="<%$ ConnectionStrings:ConnectionString %>"
OldValuesParameterFormatString="original_{0}"
SelectCommand="SELECT Objekti.objekatID, Objekti.vrstaObjekta, Kuce.kvadratura FROM Objekti INNER JOIN Kuce ON Objekti.objekatID = Kuce.objekatID WHERE (Objekti.objekatID = @objekatID)"
UpdateCommand="ubdateObjektiKuce" UpdateCommandType="StoredProcedure">
<UpdateParameters>
<asp:Parameter Name="parametar1" Type="Int32" />
<asp:Parameter Name="parametar2" Type="String" />
<asp:Parameter Name="parametar3" Type="Int32" />
</UpdateParameters>
<SelectParameters>
<asp:ControlParameter ControlID="GridView1" Name="objekatID" PropertyName="SelectedValue" />
</SelectParameters>
</asp:SqlDataSource>

Kada to pokrenem i u tom DetailsView-u kliknem ubdate promenim recimo kvadraturu. Otvara stranu sa greskom
Procedure or function ubdateObjektiKuce has too many arguments specified.
Description: An unhandled exception occurred during the execution of the current web request. Please review the
Citat:

stack trace for more information about the error and where it originated in the code.

Exception Details: System.Data.SqlClient.SqlException: Procedure or function ubdateObjektiKuce has too many arguments specified.

Source Error:

An unhandled exception was generated during the execution of the current web request. Information regarding the origin and location of the exception can be identified using the exception stack trace below.

Stack Trace:

ajd sad gde gresim?
Spartak ako ti je lakse preko dataseta ajde tako da odradim stvar probao sam nesto i tako da uradim gledao sam neki kod po knjigama ali neide. Tako bas ne znam. Ali ajde mi ispisi kod za ovako kratak primer a ja cu prema tome da radim dalje.
[ spartak @ 15.08.2006. 17:44 ] @
Koliko imas polja u tom DV?

Sad sam pustio Google pretragu sa tvojim problemom, i mogu da se nadju moguca resenja. Probaj sam. Jedan od razloga je da si polja koja ne zelis kao parametre checkirao za 2way data binding. Drugi od razloga moze biti to sto bi trebalo da se DV polje zove parametar1, updateparam takodje parametar1 a SP parametar @parametar1...

Pusti dataset, nemoj sad da menjas nego isteraj to do kraja. Imali su ljudi isti problem kao i ti.
[ B_E_N_K_O_ @ 15.08.2006. 18:53 ] @
Imam tri polja u DV( to je samo probno, znaci imamo objekatID, vrstaObjekta iz tabele objekti i kvadratura iz tabele Kuce)
Promenio sam ovo sto si rekao znaci sada nije 2way sada je ono u detailswievu ono edit fild>auto-generate fild cekirano. znaci to sam cekirao i on stalno generise polja. E sad uradio sam i ono drugo promenio sam u proceduri nazive sada izgleda ovako:
Citat:

ALTER PROCEDURE dbo.ubdateObjektiKuce
(
@objekatID int,
@vrstaObjetka nvarchar(20),
@kvadratura int
)
AS
UPDATE Objekti SET vrstaObjekta = @vrstaObjetka WHERE (objekatID = @objekatID)
update kuce set kvadratura= @kvadratura where objekatID= @objekatID
/* SET NOCOUNT ON */
RETURN


tako da su se i nazivi parametara automatski promenili u objekatId umesto parametar1 i vrstaObjekta umesto parametar2 itd. Znaci to nije.
Inace googlam non stop nigde nemogu da naletim na slicno pitanje. Tj. naidjem na isto pitanje ali odgovora nema.
A tu je i moj mali problem sa engleskim, mislim nije on tako los ali nije savrsen za brzo pregledanje velikih foruma.
[ negyxo @ 15.08.2006. 21:01 ] @
Problem je do DetailsView-a. Stavi ovde kod za select proceduru i za update. Znam da si vec postovao od svega po malo ali sad stavi jedni i drugu da vidimo sta korisits.

E sad ajmo redom.
Prvo da vidimo kako funkcionise ovaj DV.
Znaci DV moze da funkcionise kao CRUD kontrola ali samo ako je u pitanju neka prosta tabela jer dolazi do problema kad se razlikuje broj i vrsta parametara za svaku proceduru. Ovde lezi tvoj problem. DV prosledjuje onoliko parametara update ili insert proceduri koliko je Field-ova u Fields kolekciji podeseno da ima property DataField na neku od select vracenih vrednosti i da je ReadOnly property podesen na false.
Znaci ovako:
Ako ti imas select koji izgleda nesto ovako
Code:

SELECT Objekti.objekatID, Objekti.vrstaObjekta,  Kuce.kvadratura, Objekti.cena, Objekti.lokacija
FROM 
Objekti 
INNER JOIN Kuce ON Objekti.objekatID = Kuce.objekatID
WHERE 
Objekti.objekatID = @objekatID
ORDER BY Objekti.vrstaObjekta, Objekti.lokacija


i update proceduru nesto poput ovoga
Code:

PROCEDURE dbo.ubdateObjektiKuce
(
@objekatID int,
@vrstaObjetka nvarchar(20),
@kvadratura int
)
AS
UPDATE Objekti SET vrstaObjekta = @vrstaObjetka WHERE (objekatID = @objekatID)
update kuce set kvadratura= @kvadratura where objekatID= @objekatID

RETURN


i sad kad uzmes DV i postavis mu DataSource na SqlDataSource kod kojeg je select podesen na ovu gornju select proceduru, DV ce ti generisati sva polja koja su vracena u select naredbi. Po default-u sva polja ce biti editable, sem nekih koje on procita da ne treba (poput PK polja), sto znaci da ce i sva polja prosledjivati update proceduri i zato ti na kraju izbaci exception Procedure or function ubdateObjektiKuce has too many arguments specified.
Da bi ovo izbegao otvori taj Field editor i pronadji taj property ReadOnly i postavi na true za svaki field koji se ne update-ju. Posle ovog bi trebalo da radi.
[ B_E_N_K_O_ @ 16.08.2006. 08:25 ] @
ne drugar na kraju smo postavio bas mali select ubit(cisto radi probe).Vec sam gore izbacio ovaj isti kod ali ok:
Citat:

<asp:SqlDataSource ID="SqlDataSource4" runat="server" ConflictDetection="CompareAllValues"
ConnectionString="<%$ ConnectionStrings:ConnectionString %>"
OldValuesParameterFormatString="original_{0}"

SelectCommand="SELECT Objekti.objekatID, Objekti.vrstaObjekta, Kuce.kvadratura FROM Objekti INNER JOIN Kuce ON Objekti.objekatID = Kuce.objekatID WHERE (Objekti.objekatID = @objekatID)"

UpdateCommand="ubdateObjektiKuce" UpdateCommandType="StoredProcedure">
<UpdateParameters>
<asp:Parameter Name="objekatID" Type="Int32" />
<asp:Parameter Name="vrstaObjetka" Type="String" />
<asp:Parameter Name="kvadratura" Type="Int32" />
</UpdateParameters>
<SelectParameters>
<asp:ControlParameter ControlID="GridView1" Name="objekatID" PropertyName="SelectedValue" />
</SelectParameters>
</asp:SqlDataSource>

pogledaj gore selectCommand znaci samo za tri kolone objekati.objekatID, objekti.vrstaObjekta i kuce.kvadratura i onda sam za to odradio proceduru:
Citat:

CREATE PROCEDURE dbo.ubdateObjektiKuce
(
@objekatID int,
@vrstaObjetka nvarchar(20),
@kvadratura int
)
AS
UPDATE Objekti SET vrstaObjekta = @vrstaObjetka WHERE (objekatID = @objekatID)
update kuce set kvadratura= @kvadratura where objekatID= @objekatID
/* SET NOCOUNT ON */
RETURN

a evo ti i kod za DetailsView :
Citat:

<asp:DetailsView ID="DetailsView2" runat="server" DataSourceID="SqlDataSource4" Height="50px"
Width="125px" CellPadding="4" ForeColor="#333333" GridLines="None" >
<FooterStyle BackColor="#5D7B9D" Font-Bold="True" ForeColor="White" />
<CommandRowStyle BackColor="#E2DED6" Font-Bold="True" />
<EditRowStyle BackColor="#999999" />
<RowStyle BackColor="#F7F6F3" ForeColor="#333333" />
<PagerStyle BackColor="#284775" ForeColor="White" HorizontalAlign="Center" />
<FieldHeaderStyle BackColor="#E9ECF1" Font-Bold="True" />
<HeaderStyle BackColor="#5D7B9D" Font-Bold="True" ForeColor="White" />
<AlternatingRowStyle BackColor="White" ForeColor="#284775" />
<Fields>
<asp:CommandField ShowEditButton="True" />
</Fields>
</asp:DetailsView>

[ negyxo @ 16.08.2006. 09:48 ] @
Ne bi me cudilo da je upitanju ovaj atribut
Code:

OldValuesParameterFormatString="original_{0}"


promeni u

Code:

OldValuesParameterFormatString="{0}"



znaci evo ceo kod za SqlDataSource
Code:

<asp:SqlDataSource ID="SqlDataSource4" runat="server" ConflictDetection="CompareAllValues"
ConnectionString="<%$ ConnectionStrings:ConnectionString %>"
OldValuesParameterFormatString="{0}"

SelectCommand="SELECT Objekti.objekatID, Objekti.vrstaObjekta, Kuce.kvadratura FROM Objekti INNER JOIN Kuce ON Objekti.objekatID = Kuce.objekatID WHERE (Objekti.objekatID = @objekatID)"

UpdateCommand="ubdateObjektiKuce" UpdateCommandType="StoredProcedure">
<UpdateParameters>
<asp:Parameter Name="objekatID" Type="Int32" />
<asp:Parameter Name="vrstaObjetka" Type="String" />
<asp:Parameter Name="kvadratura" Type="Int32" />
</UpdateParameters>
<SelectParameters>
<asp:ControlParameter ControlID="GridView1" Name="objekatID" PropertyName="SelectedValue" />
</SelectParameters>
</asp:SqlDataSource>



Probaj pa javi.
[ B_E_N_K_O_ @ 16.08.2006. 17:26 ] @
ma jok druze nista ista prica previse parametara.
Neznam kakav si strucnjak, vidim da si ove stvari vec radio, dali hoces da ti dam ono sto mi izbaci sa stranom za gresku,
ono sto ide ispod Stack Trace:
[SqlException (0x80131904): Procedure or function ubdateObjektiKuce has too many arguments specified.]
...
..
..u npr. 30. redova.
Cuj ili sta mislis da skines projekat ako imas dobru vezu. Pa da pogledas uzivo, da nisam ja zeznuo negde gde netreba. Mislim ako si vec radio i ako bi ovo, ovako trebalo da radi. Ako imas dobru vezu i ako si raspolozen ja sam vec bio postovao adresu sa rapidshera sa koje mozes da skines projekat. Znaci samo se sada strana AdministratorAgencije.aspx malo promenila ali videces i sam prema dijagramu i ostalom sta sam teo da uradim( naravno ja bi ti objasnio detaljnije).

P.S. vidim da brzo odgovaras pregledacu meil sada malo skorije
[ negyxo @ 17.08.2006. 01:24 ] @
Heee B_E_N_K_O_ bas si BENKO

Da ne verujes na kraju sam i downloadovao (samo da ne cita ovo moj 'poslodavac' (hehe dc..dc))
Prvo, za pocetak moram ti reci da ti je projekat, najblaze receno lose organizovan ali da sad ne idem u kritiku, sudeci po ovome rekao bi da si tek na pocetku (da ne kazem nesto drugo, nekad se ljudi i uvrede ako im kazes istinu ) ali dobro, svi mi kad tad moramo negde poceti, pre ili kasnije. Nego da se vratim ja na taj tvoj 'problem'.
Probao sam to sto ti uporno tvrdis da ne moze ili nece. Nisam se mnogo trudio da prepravljam tvoj kod jer mi vise vremena treba da vidim sta si pokusavao nego da napisem iz pocetka. Uglavnom, imam srecne vesti. Rak nije ali leka mu nema
Bolje da idem da spavam, kasno je, pocinjem vec da pisem sve i svasta... znaci problema nije bilo, nesto si ti pogresno uradio kao sto su ostali i pretpostavljali. Ja sad ne bi mogao da ti kazem gde si pogresio. Sve sto sam uradio je da sam generisao dve procedure (select i update) dodao DV i podesio ga onako kako sam ti vec opisao i... viola, radi. Znaci probaj isto da uradis kod sebe, cisto radi vezbe.

A da evo i jedan aspx ako negde zapne.

Vozdra

[ B_E_N_K_O_ @ 17.08.2006. 11:04 ] @
ne mogu da verujem, zamisli radi. :) hvala negyxo mnogo si mi pomogao.
Uopste se neljutim za projekat, pocetnik sam i ovo mi je prvi projekat. A da "mislim" ne pocenjujem sebe i projekat je tek
na pocetku. Bez ovoga nisam mogao nista.
Odusevilo me kada sam video, details view selektuje recimo deset kolona a kada kliknes update samo ti otvara one textBoxove
koje ces da updatujes procedurom... extra. hvala jos jednom

P.S. Ti mora da si ovo sinoc bio pripit( recimo sa beer festa) he he kaze "Bolje da idem da spavam, kasno je, pocinjem vec da pisem sve i svasta"

Imacu za tebe jos jedno kratko, kratko pitanje(bar mislim da nece biti problem). Ok prvo cu da dobro proucim i da probam sam pa ti saljem sta sam uradio.

[Ovu poruku je menjao B_E_N_K_O_ dana 17.08.2006. u 13:23 GMT+1]
[ negyxo @ 17.08.2006. 11:21 ] @
Citat:

A da "mislim" ne pocenjujem sebe i projekat je tek na pocetku. Bez ovoga nisam mogao nista.



Nema sta da precenjujes ili potcenjujes sebe, ja samo nisam hteo da ti napisem da se vidi da si pocetnik sta ja znam, recimo da sam imao priliku da se susretnem sa takvim ljdima koji rade na nivou nekog pocetnika ali to bas i ne vole ako ima neko spomene, pa boze moj isli su na fakultet... opet ja OT
Htedoh ti sinoc napisati siri spisak sta bi valjalo da promenis ali... neka i ja sam tako ucio, na divljaka Jedini savet koji bi ti dao a i bode oci je da lepo sam generises bazu a ne ovu asp-ovu i nemoj da se konektujes preko attachDBFile opcije, kako li se vec zove, nego lepo attachuj bazu na server i lepo koristi SQL Server Management Studio Express umesto VS-a. To je nesto ukratko sto mi najvise pada u oci. A ovo ostalo ce doci samo po sebi, valda

Citat:

P.S. Ti mora da si ovo sinoc bio pripit( recimo sa beer festa) he he kaze "Bolje da idem da spavam, kasno je, pocinjem vec da pisem sve i svasta"


Bar da jesam U stvari bolje sto nisam, ko zna sta bi tek onda napisao.
[ B_E_N_K_O_ @ 17.08.2006. 13:17 ] @
Da ja nisam toliko zahtevan(dosadan) koliko jesam mogao bi ti sa da odmoris od mene ali ovako, pazi ovamo. :)

Sa spartakom i tobom sam pricao da napravim 4 procedure za 4 kombinacije tabele:
1)objekti-kuce
2)objekti-stanovi
3)objekti-lokali
4)objekti-placevi
i to je ok to cu da napravim po ovom principu.
E sad iznad se nalazi gridview koji se puni sa svim objektima(i kuce i stanovi i garaze i lokali) e sad
kad korisnik klikne na select na neki od njih objekatID se prosledjuje DetailsViewu i on izbacuje podatke.
Ok mi smo probali kada su objekti-kuce(kolona kvadratura iz tabele kuce, secas se).
Ja sam napisao:
Code:

protected void GridView1_SelectedIndexChanged(object sender, EventArgs e)
{
..
.. proverava koja je vrstaObjekta za selektovani objekatID
.
}

da mi proveri koji je taj selektovani objekat i prema tome treba da mi menja soure. Ako je kuca u pitanju daj mi ovaj source koji vraca koleone za objekti-kuce pa ako je stanovi daj mi sors koji vraca kolone za objekti-stanovi.
Znaci ako je to sto je kliknuo korisnik u gridviewu kuca onda detailsview.SqlDataSoure= SqlDataSoure3; to je npr. - to neradi. Da te nesmaram mnogo samo mi daj neki savet pa cu ja sam da cackam.

Znaci on puca otprilike ovako: "mozes da promenis source ali nemozes da promenis kolone u detais viewu koje su nekako povezane sa onim sorsom koji je namesten kada je strana pokretana"

P.S. Ma tezak sam ja covek
[ negyxo @ 17.08.2006. 21:45 ] @
Pa jesi zahteven...
Nego, ajmo ovako. Nadji neke tutoriale za ASP .NET, imas ih pregrst na integnetu, i pocni polako da ucis. Mislim, znam da je najbolji metod da ucis dok radis ali pod uslovom da si vec potkovan sa nekom osnovom. Znaci nek ti to bude prioritet. Bolje sad ulozi jedno dve nedelje u ucenje nego eksperimentisanje i ima da ti se vrati mnogostruko vise.

A za savet ti mogu dati da ne radis to sto si krenuo. Lepo selektuje sve objekte i u zavisnosti od tipa objekta prosledjuj parametre ako se razlikuju. Sad, ovo je najkrace sto sam mogao da kazem ali da bi ovo uradio ipak ces morati malo vremena da odvojis za ucenje kako bi video sta se desava 'under the hood' ili u tvom slucaju ni toliko, dovoljno bi bilo i 'above the water'
[ B_E_N_K_O_ @ 17.08.2006. 22:13 ] @
imam dosta knjiga i googlao sam po netu ali svi daju ono standardno(svi objasnjavaju sta mozes uraditi preko vizarda)

Ovo sa kolonama nebih mogao zato sto je broj kolona za razlicite tabele razlicit i kolonesu drugacijih tipova.
[ negyxo @ 18.08.2006. 11:54 ] @
OK! ovo je i zadnja poruka od mene.

Sto se tice knjiga, tu se slazem. Zaista je tesko naci dobru knjigu, mada zato je sada tu internet pa...

A za ovo sto hoces da uradis, nazalost moraces sam dalje. Ja nemam vremena da sad gledam tvoju strukturu baze pa da analiziram kako i sta bi bilo dobro. Trudi se malo i budi uporan (pazi ko kaze ) rezultata mora biti.

Toliko.
[ B_E_N_K_O_ @ 18.08.2006. 12:33 ] @
HVALA TI PUNO, mnogo si mi pomogao. Resnje sam nasao ali da bi zavrsio posao zezacu se jos malo. Trebalo je samo da se bind-uje i to je to.
Citat:

switch (int.Parse(parametar2.Value.ToString()))
{
case 1: DetailsView1.DataSourceID = "SqlDataSource3";
DetailsView1.DataBind();
//DetailsView1.AutoGenerateEditButton = true;
break;
case 2: DetailsView1.DataSourceID = "SqlDataSource4";
DetailsView1.DataBind();
break;
}
[ B_E_N_K_O_ @ 23.03.2010. 08:36 ] @
Jao ljudi jel se secate ove muke :)
Davno je to bilo. Hvala jos jednom