poll
Hur gör man en poll (omröstning) i asp.net?
På något sätt så måste man ju få reda på den aktuella frågans id så att man kan ta fram rätt svarsalternativ,
hur ska man göra detta innan man ens öppnat en repeater?
Någon som har en lösning om detta?
Svara
Sv: poll
Vet inteom jag missförstår din fråga, men du kan ju använda dig av TOP vid kopplingen till DB.
Svara
Sv: poll
Japp, men hur ska jag göra för att få fram den aktuella frågans id innan jag gjort en repeater så att jag kan använda det id't till att få fram de rätta svarsalternativen?
Svara
Sv: poll
Robert.
Hej, Kan den aktuella frågan vara olika? eller är det alltid samma aktuella fråga? för om det är samma
kan du ju plocka den efter senaste datum eller hur du ni identifierar frågorna. På så vis får du ut ID som du sedan kan nyttja för svaren.
Mvh Johan
Svara
Sv: poll
Jag förstår inte riktigt problemet.
Hur ser din databasmodell ut?
När du öppnar sidan där din fråga skall synas så hämtar du aktuell fråga från databasen. Antingen hämtar du frågan och sedan svarsalternativen i ett eget db-anrop baserat på den aktuella frågans id. Sedan binder du svarsalternativen till repeatern. Eller så gör du en JOIN och får tillbaka alla svarsalternativ på en gång. Du skriver ut frågan från första raden i db-resultatet och binder sedan samma db-resultat till din repeater men visar då bara svarsalternativen.
Kolla även här, http://aspnet.4guysfromrolla.com/articles/061604-1.aspx
Svara
Sv: poll
Jag har en tabell för frågan, sedan en annan tabell för svarsalternativen!
För att jag ska få ut rätt svartalternativ så måste jag få reda på frågans id eftersom att det är idät som binder frågan och svarsalternativen.
Så jag frågar igen: Hur ska jag få reda på frågans id innan jag öppnar repeatern?
EDIT:
dim sql as string = "SELECT * FROM fraga order by datum desc limit 0,1"
.....
någonting som tar ut ett id..
..
fraga.DataSource = reader
fragar.Databind()
..
Dim sql2 as string "SELECT * FROM alt WHERE Fid = "& id &""
..
alt.DataSource = CB.CreateRepeater("SELECT * FROM gastbok")
alt.Databind()
Om jag ska göra en join, hur ska jag göra så att bara svarsalternativen blir länkar?
Svara
Sv: poll
dim sql as string = "SELECT * FROM fraga order by datum desc limit 0,1"
Om det där är din första fråga så får du ju ut id:t. Kör den frågan i en Repeater och plocka ut det. Sen använder du det i din andra fråga. Om du vet hur man kör en databasfråga så vet du ju redan svaret på din fråga.
Edit:
Det jag inte förstår är varför du ska databinda själva frågan, och i så fall, vad databinder du den till?
Och om du nu ska göra det så får du lägga en OnItemDataBound på det du nu binder till och sen köra FindControl och hitta ID:t, därefter binda din svarsrepeater.
Svara
Sv: poll
För det första, varför binder du frågan och vad binder du den till? Du behöver inte databinda för att få ut saker ur en Reader eller annat från en databas.
För det andra, om du inte vet vad OnItemDataBound är så föreslår jag att du läser quickstarten på http://samples.gotdotnet.com/quickstart/aspplus/ samt på MSDN vad de kontroller du använder är för något och vad de gör.
Svara
Sv: poll
Jag är ju nybörjare i asp.net som ni nog förståt, men är det inte "DataBind()" som lägger till allt i repeatern? Om inte, vad gör den då?
Hur ska jag kunna köra frågan i en repeater?
Då måste jag väl ta in "<%" taggar? Är det den enda utvägen?
Vad jag hört så ska man undvika att använda dessa så mycket man kan, men om det inte gör så mycket så ska jag försöka fixa det..
Svara
Sv: poll
Jag skrev fel, det jag menade var att du kör frågan och får tillbaka en Reader som vanligt.
Lägg en Label i din .aspx kod där frågan skall visas.
code-behind
<code>
... kör koden i en reader precis som vanligt ...
myReader.Read()
Dim currId As Integer
lblFraga.Text = myReader("fragekolumn")
currId = myReader("idkolumn")
... kör dbfråga efter svar och skicka in currId ...
... Databind svaren till en Repeater
</code>
Innan man kör myReader.Read() så kan man kolla så den inte är tom, men den skulle bara vara tom om din databastabell är tom.
Kolla på MSDN vad du kan göra med en Reader. Kolla igenom de tutorials som finns på gotdotnet.com också.
Något som är bra att göra till rutin är att varje gång du ska använda en kontroll du inte använt förut så läs igenom på MSDN vad kontrollen är och vad den kan göra.
Svara
Sv: poll
När jag kör din kod får jag:
Name 'fraga' is not declared.
Här är koden:
Sub page_load()
fraga.DataSource = CB.CreateRepeater("SELECT fraga FROM fraga ORDER BY datum DESC Limit 0,1")
fraga.Databind()
'tar reda på frågan
fraga.Read()
Dim CurrId as integer
lblfraga.text = fraga("fraga")
lbltotala.text = fraga("totalaroster")
CurrId = fraga("id")
'denna kod lägger till alla svar
svar.DataSource = CB.CreateRepeater("SELECT alt FROM fraga WHERE id = "& PollId &"")
svar.Databind()
End Sub
Svara
Sv: poll
<info>
Sub page_load()
fraga.DataSource = CB.CreateRepeater("SELECT fraga FROM fraga ORDER BY datum DESC Limit 0,1")
fraga.Databind()
'tar reda på frågan
fraga.Read()
Dim CurrId as integer
lblfraga.text = fraga("fraga")
lbltotala.text = fraga("totalaroster")
CurrId = fraga("id")
'denna kod lägger till alla svar
svar.DataSource = CB.CreateRepeater("SELECT alt FROM fraga WHERE id = "& PollId &"")
svar.Databind()
End Sub
</info>
1. Vad är CB.CreateRepeater och fraga.DataBind? Du ska ju köra frågan så att du får ut en DbReader. Läs på vad en Reader är på MSDN för vad du gör nu har jag inte en aning om.
2. Varför använder du PollId i din andra Select när variabeln heter CurrId?
Du måste ändra i min kod så att den passar dina förutsättningar.
Om du inte förstår hur du använder Reader och Repeaters så är det dags att gå tillbaka till Tutorials.
Svara
Sv: poll
1. CB.CreateRepeater:
Public Shared Function CreateRepeater(sql As String)
Dim Cn As New OdbcConnection(ConfigurationSettings.AppSettings("connect"))
Dim Command As New OdbcCommand (sql, Cn)
Cn.Open()
Dim lasare As odbcDataReader
lasare = Command.ExeCuteReader()
return lasare
lasare.Close()
Cn.Close()
Command.Dispose()
Cn.Dispose()
End function
Jag gör alltså en repeter så jag slipper så mycket kod i aspx filen :)
Säg vad jag ska söka på i SDK:n, när jag säkte på "Reader" så kommer jag få sitta hela kvällen och titta igenom allt =S
2. Misstag, ska inte vara så!
Svara
Sv: poll
Ok, det är alltså en CreateReader funktion du gjort, inte Repeater.
Mer om odbcDataReader, http://msdn.microsoft.com/library/default.asp?url=/library/en-us/cpref/html/frlrfsystemdataodbcodbcdatareaderclasstopic.asp
Då förstår jag vad du försöker göra, men varför har du DataSource och DataBind? En Reader är ju databasresultatet och du försöker binda något till den. Funktionen returnerar en Reader, dvs.
<code>
dim fraga as odbcDataReader
fraga = CB.CreateRepeater("SELECT fraga FROM fraga ORDER BY datum DESC Limit 0,1")
fraga.Read()
Dim CurrId as integer
lblfraga.text = fraga("fraga")
lbltotala.text = fraga("totalaroster")
CurrId = fraga("id")
'denna kod lägger till alla svar
dim svar As odbcDataReader
svar.DataSource = CB.CreateRepeater("SELECT alt FROM fraga WHERE id = "& CurrId &"")
svar.Databind()
</code>
Läs på i länken ovan för att se mer om Reader.
Några andra saker jag undrar över är, heter båda tabellerna fraga?
Heter kolumnerna fraga och alt?
Svara