webForumDet fria alternativet

Hur löser jag detta bäst?

.NET

6 svar · 349 visningar · startad av anbj

Medlem sedan juli 2000231 inlägg
Frågan#1

Jag har ett formulär på en aspx sida, beroende på vad formuläret innehåller (vilka fält som är i fyllda och med vad) vill jag köra olika SP:s och visa olika rapporter.

Hur löser jag det smidigast?

Ska jag ha en aspx sida och skapa flera olika repeaters (för de olika rapporterna) men enbart binda data till den jag vill nyttja?

Ska jag ha flera olika sidor för de olika rapporterna och posta datan till respektive sida? Hur gör man det smidigast i så fall?

Ska jag göra på något annat sätt??

Tacksam för tips!

Medlem sedan apr. 2004778 inlägg
#2

I code-behind kan du lägga en funktion som körs när du trycker på knappen och gör din PostBack.
I den funktionen kollar du fälten och bestämmer din SP. Sen tar du resultatet och binder till en DataGrid eller Repeater. Om du i dina SP ger kolumnerna de namn som du vill ha i headern på rapporten kan du köra en DataGrid med AutoGenerateColumns=True.

Medlem sedan maj 2001329 inlägg
#3

Om jag fattade rätt så skulle du ha flera olika repeaters med olika funktionalitet i..annars go with PDahlen lösning

Jag skulle utan tvekan använda user controls (http://samples.gotdotnet.com/quickstart/aspplus/doc/webpagelets.aspx ).

Anledningen är enkel, det hela kommer att fungera ungefär som att ha flera repeaters på sidan med den stora fördelen att du har koden för de olika repeatersarna separerade i olika filer..vilket medför att det är väldigt mycket lättare att överskåda och hantera. Plus att du antagligen kommer att komma på att man kan göra user controlsen så att man kan använda dem på flera olika sidor.

Anledningen till att jag inte skulle använda olika sidor är att posta data inte är så bra då kan användarna själva modifiera querystring (whatever) och kanske få ut data som du inte vill ge dem. Plus att du inte kan 'återavnända' sidor på samma sätt som user controls

Medlem sedan juli 2000231 inlägg
#4

Tack för svaren. Jag vill kunna köra olika repeater mallar beroende på indatat, så idén med user controls verkar vettig.

Men hur gör jag enklast för att inte exekevera kod i onödan? Ska jag deklarera alla user controls på aspx sidan men sätta dom som visible=false tills jag vet vilken jag vill använda? Eller kan man göra på något bättre sätt?

Medlem sedan maj 20012 812 inlägg
#5

Du skall ladda in den userControllen som du behöver. Så du deklarerar ingen usercontroll på sidan, utan lägger ditt en placeholder som du sedan gör Controls.Add() på och där skall den usercontrollen som du har laddat in vara.

Typ något sånt här:

Object myUserControl = LoadControl("minUsercontrol.ascx");
myPlaceholder.Controls.Add(myUserControl);

Det är all (tror jag, har skrivit ur huvudet) kod som du behöver för att ladda in en usercontrol och binda till din sida.

- magnus

Medlem sedan juli 2000231 inlägg
#6

Smart!
Ett litet problem bara, hur anropar jag publika funktioner & variabler i user controlen efter att ha gjort följande:

Dim MyControl As Control = LoadControl("Common/UserControls/StatOverviewReport.ascx")
PlhReport.Controls.Add(MyControl)

Skulle ju vilja kunna köra något i stil med:

MyControl.strReportType = "Market"
MyControl.showMarketReport(strFromDate, strToDate, strRegPf)
Medlem sedan juli 2000231 inlägg
#7

Hittade lösnignen själv:

CType(MyControl, StatOverviewReport).strReportType = "Market"
263 ms totalt · 4 externa anrop · v20260731065814-full.a51de22e
125 ms — deklarationer (db)
0 ms — hämta statistik (cache)
134 ms — hämta tråd, inlägg och bilagor (db)
123 ms — ändringar (db)