Hej alla på Pellesoft, Jag tycker att du tar en titt på de Tutorials som finns på http://samples.gotdotnet.com/quickstart/aspplus/ Jo, jag använder en Repeater. Jag trodde jag lyckades först men det gjorde jag icke. Typ så här gjorde jag (sitter vid fel dator nu) Det du gör nu är att ud loopar genom din Reader och binder varenda loop. Faktiskt har jag inte hittat något om hur man kan göra (förutom med Array), så om jag inte hittar en lösning får jag läsa från databasen till arrayen och sedan loopa från arrayen? (kanske jag som söker dåligt?) Felet du gör är, som jag redan sagt, att du tänker "klassisk asp". Du ska inte loopa nånting. http://msdn.microsoft.com/library/en-us/cpref/html/frlrfSystemWebUIWebControlsRepeaterClassTopic.asp?frame=true Är det jag som förklarat dåligt eller ni som missuppfattad mig? (eller t.o.m. jag som missuppfattar er?!) DataList OCH Repeater? Du menar DataList och Reader va? jag använder inte while, det var bara en fråga om man kunde få reda på rad numret därifrån. Japp, det är precis så där det ska göras. Ok, tack. Jag hinner inte testa idag, men det verkar vara en bra lösning Har kommit en låång bit på väg, just nu ser koden ut så här Du måste göra en FindControl på position. Eftersom en Repeater har samma kontroller på varje rad så vet inte koden vilken kontroll du tänker lägga in text i. Hej, jag får fortfarande samma felmeddelande. Troligen inte, eller så han har glömt <b>runat="server"</b> på sin label. Prova med följande kod så skall du se att den inte hittar din kontroll (vilket iofs är uppenbart sen tidigare, men sidan fortsätter exekvera) Jag är säker på att jag har ID="Position" och Runat="server", det är i min standard att skriva så. Så här ser min repeater ut. Jag fick det att funka nu med Andreas kod, dock tog jag bort Else då den skrev ut 1,2,3 osv + Den är null!!Lösning på mitt problem?
Jag håller på med ett serie system och vill lista vilken position (när jag listar de) de har. I ASP var det enkelt, det borde det vara med ASP.net också men jag har inte lyckats ännu.
I ASP kunde man skriva så här
...
Pos = 1
Do Until MyRecordSet.EOF
Response.Write(" " & Pos & " - " & MyRecordSet("TeamName") & "<br/>")
MyRecordSet.MoveNext
Pos = Pos + 1
Loop
...
Hoppas det finns en smidig lösning för detta!
/m
Sv: Lösning på mitt problem?
I ASP.NET är det nämligen så att det finns en massa färdiga kontroller. För att få fram din lista t.ex. så kan du lägga en DataList, Repeater eller DataGrid i din sida och sedan DataBinda ditt databasresultat till kontrollen och på så sätt få fram listan.Sv: Lösning på mitt problem?
...
Dim pos As Integer = 1
Do While MyReader.Read()
Pos = Pos + 1
MinRepeater.DataSource = MyReader
MinRepeater.DataBind()
Loop
End While
Sedan om jag använder en array så går det ju hur smidigt som hellst. Jag har ej kollat på hur man gör för att fylla en array från databasen än, tycker ni att det är vettigt att använda en array för alla info?
/m
Sv: Lösning på mitt problem?
Kolla de tutorials som går igenom databindning.
Felet du gör är att du tänker Klassisk ASP istället för att börja om från början och ta reda på HUR man göra saker i .NET.Sv: Lösning på mitt problem?
Sv: Lösning på mitt problem?
Gå igenom de tutorials som finns.
För att lösa ditt problem så kan du lägga en DataList i din .aspx sida. I din code-behind anropar du
databasen och får tillbaka t.ex. ett DataSet eller DataTable. Sedan sätter du
<code>
myDataList.DataSource = myDataSet
myDataList.DataBind
</code>
och tjoff så har du din lista.
I din DataList i .aspx koden kan du bestämma vad som ska visas och hur det ska visas.
Så återigen, gå igenom tutorials på http://samples.gotdotnet.com/quickstart/aspplus/ och läs mer om kontrollerna på msdn.microsoft.com om det behövs.
Det finns inga genvägar till att lära sig .NET.Sv: Lösning på mitt problem?
http://www.sitepoint.com/article/asp-net-repeater-control
http://www.dotnetspider.com/Technology/KBPages/452.aspx
Men som sagt, glöm allt du kan om asp, för det hjälper dig inget ;-)Sv: Lösning på mitt problem?
Jag listar nu allt med DataList och Repeater. Så det är inget problem.
Så här vill jag att det ska vara.
<info>
Serie 1 M V O F + - +/- P
1. LagA 1 1 0 0 7 2 5 3
2. LagB 1 0 1 0 4 4 0 1
3. LagC 1 0 1 0 4 4 0 1
4. LagD 1 0 0 1 2 7 -5 0
</info>
Det är alltså 1, 2, 3 + 4 jag vill få ut. Att binda data till kontrollen är inga problem. Jag har gjort klart serie systemet förutom just att få ut siffrorna (vilken position de har).
/mSv: Lösning på mitt problem?
Det är så jag trodde att du ville ha.
Om du fortfarande har din lösning med while myReader.Read så gör du fel. Då binder du din DataList så många gånger som du har rader i readern.
I aspx-koden lägger du en Repeater, DataList eller DataGrid. Du anger vad som ska stå som Kolumnrubriker och bestämmer vilket värde från dbfrågan som skall visas i kolumnen.
För att få med placeringskolumnen, vilket bara är en räknare så borde du kunna använda radens index+1.Sv: Lösning på mitt problem?
Jag skriver en uppsats för skolan nu men jag kan skriva ett snabbt exempel på hur jag gör.
Dim CmdText = "SELECT * FROM Serier WHERE Div = " & Cint(Request.QueryString("div"))
Dim MyConnection As New MySqlConnection(ConfigurationSettings.AppSettings("Conn"))
Dim Cmd As New MySqlCommand(CmdText, MyConnection)
MyConnection.Open()
Dim MyReader As MySqlDataReader = Cmd.ExecuteReader ' <- tror det var så här
If MyReader.HasRows then
MinRepeater.DataSource = MyReader
MinRepeater.DataBind()
ObjConn.Close()
Else
EnLiteral.Text = "Tomt"
End if
Koden jag har ser inte exakt ut så men typ.
Sedan så menade jag inte att jag använder både Repeater + DataList utan jag använder Repeater & DataList för att lista data när jag gör det.
/m
Sv: Lösning på mitt problem?
Men var kommer DataListan in i bilden?
Nu har jag ingen färdig kod och ingen tid att testa men du borde kunna lägga en label som första kolumn i Repeatern och i en OnItemDataBound få fram index på raden du är på och lägga det index+1 i labeln för att få fram placeringen.Sv: Lösning på mitt problem?
/mSv: Lösning på mitt problem?
<code vb.net>
Sub Who_Pos(ByVal sender As Object, ByVal e As RepeaterItemEventArgs)
position.Text = e.Item.ItemIndex + 1
End Sub
</vb>
Sedan i repeatern OnItemDataBound="Who_Pos".
Men jag får felmeddelande, jag har sökt här på pellesoft men utan framgång (ska söka på google sen också).
Felmedd.
<info>
System.NullReferenceException: Objektreferensen har inte angetts till en instans av ett objekt.
</info>Sv: Lösning på mitt problem?
<code>
Sub Who_Pos(ByVal sender As Object, ByVal e As RepeaterItemEventArgs)
Dim tmpPosition As Label = CType(e.Item.FindControl("position"), Label)
tmpPosition.Text = e.Item.ItemIndex + 1
End Sub
</code>Sv: Lösning på mitt problem?
Men när jag gör en Response.Write så funkar det, men när jag använder tmpPosition.Text får jag felet.
Vad kan det bero på?Sv: Lösning på mitt problem?
Sub Who_Pos(ByVal sender As Object, ByVal e As RepeaterItemEventArgs)
Dim tmpPosition As Label = CType(e.Item.FindControl("position"), Label)
If Not tmpPosition Is Nothing Then
tmpPosition.Text = e.Item.ItemIndex + 1
Else
Me.Response.Write("Den är null!")
End If
End Sub
Sv: Lösning på mitt problem?
<asp:TYP ID="x" Runat="server"></asp:TYP> eller bara <asp:TYP ID="x" Runat="server"/>
Men jag ska testa din kod när jag får tillgång till datorn med projektet på.
/mSv: Lösning på mitt problem?
<asp:repeater id="IzDivision" Runat="server" OnItemDataBound="Who_Pos">
<HeaderTemplate>
<tr>
<td colspan="2"><b>Vilken Serie?</b></td>
<td width="40" align="center"><b>Matcher</b></td>
<td width="25" align="center"><b>V</b></td>
<td width="25" align="center"><b>O</b></td>
<td width="25" align="center"><b>F</b></td>
<td width="25" align="center"><b>+</b></td>
<td width="25" align="center"><b>-</b></td>
<td width="25" align="center"><b>+/-</b></td>
<td width="25" align="center"><b>P</b></td>
</tr>
</HeaderTemplate>
<ItemTemplate>
<tr style="background: #FFF;">
<td width="25">
<asp:Label ID="Position" Runat="server" /></td>
<td><%# DataBinder.Eval(Container.DataItem, "IzLagName") %></td>
<td align="center"><%# Container.DataItem("IzLagWin") + Container.DataItem("IzLagUnd") + Container.DataItem("IzLagLose") %></td>
<td align="center"><%# Container.DataItem("IzLagWin") %></td>
<td align="center"><%# Container.DataItem("IzLagUnd") %></td>
<td align="center"><%# Container.DataItem("IzLagLose") %></td>
<td align="center"><%# Container.DataItem("IzLagGoalForward") %></td>
<td align="center"><%# Container.DataItem("IzLagGoalBackward") %></td>
<td align="center"><%# Container.DataItem("IzLagGoalForward") - Container.DataItem("IzLagGoalBackWard") %></td>
<td align="center"><%# Container.DataItem("IzLagPoints") %></td>
</tr>
</ItemTemplate>
</asp:Repeater>
Sv: Lösning på mitt problem?
/m