webForumDet fria alternativet

Repeater eller liknande...

.NET

24 svar · 565 visningar · startad av Eminem

Medlem sedan dec. 200313 inlägg
Frågan#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">&nbsp;[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

Medlem sedan juni 20011 732 inlägg
#2

Response.Write ska du mycket riktigt inte använda. Precis som du skriver i rubriken, använd en repeater!

http://www.dotnetjunkies.com/QuickStart/aspplus/default.aspx?url=/quickstart/aspplus/samples/webforms/ctrlref/webctrl/repeater/doc_repeater.aspx

Medlem sedan dec. 200313 inlägg
#3

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.

Medlem sedan juni 20011 732 inlägg
#4

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>
Medlem sedan sep. 20026 425 inlägg
#5

http://www.dileno.hel.nu/aspnet/#OleDbDataReader, dock enbart att göra om till C#. :D
Sen använder du NETworks kod, Eminem.

Medlem sedan dec. 200313 inlägg
#6

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

Medlem sedan juni 20011 732 inlägg
#7

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();
Medlem sedan dec. 200313 inlägg
#8

Ä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'

Medlem sedan sep. 20011 914 inlägg
#9

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];
}
Medlem sedan juni 20011 732 inlägg
#10

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... :)

Medlem sedan dec. 200313 inlägg
#11

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>
Medlem sedan juni 20011 732 inlägg
#12

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();
Medlem sedan dec. 200313 inlägg
#13

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

Medlem sedan juni 20011 732 inlägg
#14

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.

Medlem sedan dec. 200313 inlägg
#15

Får det bara inte att fungera...

Screen ur access:

access.jpg
Medlem sedan dec. 200313 inlägg
#16

ASPX-sidan

Medlem sedan dec. 200313 inlägg
#17

cs

Medlem sedan juni 20011 732 inlägg
#18

I koden har du funktionen "public DataTable GetData()" men du returnerar ett dataset...

DataTable dt = new DataTable();
...
adapter.Fill(dt);
return dt.DefaultView;
Medlem sedan dec. 200313 inlägg
#19

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;
Medlem sedan juni 20011 732 inlägg
#20

Ta bort defaultview...

255 ms totalt · 4 externa anrop · v20260731065814-full.e96017d9
119 ms — deklarationer (db)
0 ms — hämta statistik (cache)
133 ms — hämta tråd, inlägg och bilagor (db)
119 ms — ändringar (db)