E Eminem Medlem sedan dec. 2003 13 inlägg Frågan 5 dec. 2003 08:43 #1 Tjena mors!
Är en nybörjare på .NET, men har jobbat med ASP innan. Har följande kod som jag skall ha i ett forum.
<!-- Post 1 -->
<tr>
<td bgcolor="#9da87d">
<table cellspacing="0" cellpadding="1" width="600" border="0">
<tr>
<td><img src="/data/img/1px.gif" width="1" height="1" border="0" alt=""></td>
</tr>
<tr>
<td width="5"><img src="/data/img/1px.gif" width="5" height="1" border="0" alt=""></td>
<!-- Namn -->
<td class="white10pxbold">[b]Namn[/b]</td>
<!-- /Namn -->
<!-- Knappar -->
<td rowspan="3" valign="middle" align="right"><img src="/data/img/user.gif"><img src="/data/img/1px.gif" width="10" height="1"><img src="/data/img/reply.gif"><img src="/data/img/1px.gif" width="7" height="1"></td>
<!-- /Knappar -->
</tr>
<tr>
<td width="5"><img src="/data/img/1px.gif" width="5" height="1" border="0" alt=""></td>
<!-- Datum -->
<td class="black10px">[b]Datum[/b]</td>
<!-- /Datum -->
</tr>
<tr>
<td width="5"><img src="/data/img/1px.gif" width="5" height="1" border="0" alt=""></td>
<!-- Tråd -->
<td class="white10pxbold"><img src="/data/img/flag.gif" width="5" height="10" border="0" alt="Nytt inlägg" align="middle"> [b]Ämne[/b]</td>
<!-- /Tråd -->
</tr>
<tr>
<td><img src="/data/img/1px.gif" width="1" height="1" border="0" alt=""></td>
</tr>
</table>
</td>
</tr>
<tr>
<tr>
<td bgcolor="#c5d0a6" colspan="3" class="black10px">
<blockquote><br>
[b]Meddelande[/b]
<br><br>
-------------------<br>
[b]Signatur[/b]
</blockquote>
</td>
</tr>
</tr>
<tr>
<td><img src="/data/img/1px.gif" width="1" height="10" border="0" alt=""></td>
</tr>
<!-- /Post 1 -->
Har sedan till att börja med en accessdatabas med informationen i. Det som är fet stil är ställena som informationen skall läggas till i.
Vilket är det bästa sättet att loopa ut informationen. I ASP så körde jag alltid Response.Write i loopen, men i .NET är väl inte det det bästa.
Lite tips vore tacksamt :)
Kanske skall tillägga att jag kör i C#
:birp
NETwork Medlem sedan juni 2001 1 732 inlägg E Eminem Medlem sedan dec. 2003 13 inlägg Okej... Är som sagt inte någon klippa på detta än.
Har denna kod i en .cs fil
string conn;
string mySQL;
conn = "Provider=Microsoft.Jet.OleDB.4.0;" + "Data Source = Server.MapPath(/data/db/forum.mdb);";
OleDbConnection myConn = new OleDbConnection(conn);
myConn.Open();
mySQL = "SELECT * FROM threads";
OleDbCommand MyOleDbCommand = new OleDbCommand(mySQL,myConn);
Hur gör jag för att få informationen i den HTML-kod jag presenterade ovan?
En repeater kan jag göra, men vet inte hur jag skall skriva själva koden i .cs-filen så att jag kan hämta värdena i min .aspx-fil.
NETwork Medlem sedan juni 2001 1 732 inlägg Du måste fylla din repeater med en collection av något slag (exempelvis en arraylist eller en datatable) och sedan binda datan till repeatern.
myRep.DataSource = "din datakälla";
myRep.Databind();
Sedan kan du loopa ut dina data i din repeater:
<asp:Repeater id=myRep runat="server">
<ItemTemplate>
<%# DataBinder.Eval(Container.DataItem, "Namn") %>,
<%# DataBinder.Eval(Container.DataItem, "Datum") %>,
<%# DataBinder.Eval(Container.DataItem, "Ämne") %>
<br/>
</ItemTemplate>
</asp:Repeater>
http://www.dileno.hel.nu/aspnet/#OleDbDataReader , dock enbart att göra om till C#. :D
Sen använder du NETworks kod, Eminem.
E Eminem Medlem sedan dec. 2003 13 inlägg Oki, har varit sjuk ett tag...
private void Page_Load(object sender, System.EventArgs e)
{
string conn;
string mySQL;
conn = "Provider=Microsoft.Jet.OleDB.4.0;" + "Data Source = " + Server.MapPath("/data/db/forum.mdb");
OleDbConnection myConn = new OleDbConnection(conn);
myConn.Open();
mySQL = "SELECT * FROM threads";
OleDbCommand myCmd = new OleDbCommand(mySQL,myConn);
Result = myCmd.ExecuteReader();
myRep.DataSource = Result;
myRep.DataBind();
}
Och i test.aspx
<asp:Repeater id=myRep runat="server">
<ItemTemplate>
<%# DataBinder.Eval(Container.DataItem, "threadData") %>
</ItemTemplate>
</asp:Repeater>
Men den skriver inte ut någonting... Blir galen :birp
NETwork Medlem sedan juni 2001 1 732 inlägg Om du försöker använda en datareader (?) så läser en datareader bara data rad för rad, men det är ingen collection som du direkt kan använda för att fylla din kontroll med data... ska du använda en datareader måste du lagra de data du hämtar med den i exempelvis en array som du i sin tur använder för att fylla din kontroll!
Om jag vore dig skulle jag fylla dina data i en datatable istället.
DataTable dt = new DataTable();
myCmd.Fill(dt);
myRep.DataSource = dt.DefaultView;
myRep.DataBind();
E Eminem Medlem sedan dec. 2003 13 inlägg Är som sagt inte så haj på detta...
Den klagar på raden
myCmd.Fill(dt);
C:\Inetpub\wwwroot\forum\test.aspx.cs(37): 'System.Data.OleDb.OleDbCommand' does not contain a definition for 'Fill'
D Dino Medlem sedan sep. 2001 1 914 inlägg Om du skall göra enligt NETworks tillvägagångssätt.
private void Page_Load(object sender, System.EventArgs e)
{
if(!IsPostBack)
{
BindData();
}
}
public void BindData()
{
myRep.DataSource = GetData();
myRep.DataBind();
}
public DataTable GetData()
{
DataSet ds = new DataSet();
string connS = "Provider=Microsoft.Jet.OleDB.4.0;" + "Data Source = " + Server.MapPath("/data/db/forum.mdb");
string mySQL = "SELECT * FROM threads";
OleDbConnection conn = new OleDbConnection(connS);
OleDbDataAdapter adapter = new OleDbDataAdapter();
adapter.SelectCommand = new OleDbCommand(mySQL, conn);
adapter.Fill(ds);
return ds.Tables[0];
}
NETwork Medlem sedan juni 2001 1 732 inlägg Ursäkta mig, det ska naturligtvis vara en OleDbDataAdapter som du fyller din datatable med, se Dinos kod... Men i ditt fall använd en datatable , inte ett dataset, så sparar du på systemresurserna... :)
E Eminem Medlem sedan dec. 2003 13 inlägg Tack för all hjälp men den returnerar fortfarande ingenting.
Får inga felmeddelanden men sidan är tom. Är det fel på min reapeater?
<asp:Repeater id="myRep" runat="server">
<ItemTemplate>
<p><%# DataBinder.Eval(Container.DataItem, "threadData") %></p>
</ItemTemplate>
</asp:Repeater>
NETwork Medlem sedan juni 2001 1 732 inlägg Nej, din repeater ser riktig ut. Är du säker på att du hämtar något i databasen? Finns kolumnen "threadData"? Ett enkelt sätt att se allt som finns i din collection är att fylla en datagrid med den:
<asp:datagrid id="myDG" runat="server"></asp:datagrid>
myDG.DataSource = dt;
myDG.DataBind();
E Eminem Medlem sedan dec. 2003 13 inlägg
NETwork skrev:
Nej, din repeater ser riktig ut. Är du säker på att du hämtar något i databasen? Finns kolumnen "threadData"? Ett enkelt sätt att se allt som finns i din collection är att fylla en datagrid med den:
<asp:datagrid id="myDG" runat="server"></asp:datagrid>
myDG.DataSource = dt;
myDG.DataBind();
Kolumnen threadData finns och innehåller fyra st poster. Och den sista koden kan inte en nybörjare som jag fatta vart jag skall lägga in i den kod som dino postade :l
NETwork Medlem sedan juni 2001 1 732 inlägg Använder du Dinos kod eller den kod du hade från början? Istället för att fylla din repeater så fyller du din datagrid på exakt samma sätt, lägg till eller byt bara ut myRep.DataSource mot myDG.DataSource (eller vad din dagagrid nu har för id) och databind din datagrid! :) En datagrid har fördelen att den automatiskt skriver ut alla data den fylls med så länge du inte anger något annat.
E Eminem Medlem sedan dec. 2003 13 inlägg Får det bara inte att fungera...
Screen ur access:
NETwork Medlem sedan juni 2001 1 732 inlägg I koden har du funktionen "public DataTable GetData()" men du returnerar ett dataset...
DataTable dt = new DataTable();
...
adapter.Fill(dt);
return dt.DefaultView;
E Eminem Medlem sedan dec. 2003 13 inlägg Kanske är jag som gör fel men ändrade det du skrev och fick följande:
C:\Inetpub\wwwroot\forum\test.aspx.cs(55): Cannot implicitly convert type 'System.Data.DataView' to 'System.Data.DataTable'
På raden:
return dt.DefaultView;