Hejsan!
Det är som så att jag har en .cs class till sidan (default.aspx som ett exempel) och i den cs sidan hämtar jag information från en databas som jag sedan skulle vilja fylla tabell med på den vanliga sidan. Hur gör jag det?
Jag har en runat server så att jag kommer åt den på i .cs filen.
default.aspx.cs
SqlConnection cnn = new SqlConnection();
try
{
cnn.ConnectionString = strCon;
SqlParameter prmID = new SqlParameter("ID", ID);
SqlCommand cmd = new SqlCommand();
cmd.CommandText = "SELECT * FROM [GameVersion] ORDER BY [ID] DESC";
//lagra i commadoject
cmd.Connection = cnn;
cmd.Parameters.Add(prmID);
//öppna connection
cnn.Open();
//kör queryn och lagra i datareader
SqlDataReader dr = cmd.ExecuteReader(CommandBehavior.CloseConnection);
dr.Read();
//HÄR VILL JAG LÄGGA TILL DET SOM JAG HAR HÄMTAT UR DATABASEN I VARJE
}
catch (System.Exception ex)
{
lblStatus.Text = "Något gick fel (" + ex.Message + ")";
}
finally
{
cnn.Close();
}
Där det står
//HÄR VILL JAG LÄGGA TILL DET SOM JAG HAR HÄMTAT UR DATABASEN I VARJE
Vill jag alltså lägga till det jag har hämtat ur databasen... Som du ser hämtar jag allt men jag vill inte skriva ut allt, jag vill bara skriva ut tre saker i tabellen, strunt samma vad det är nu, plocka bara ut de tre första kolumnerna den hämtar eller något då detta bara är till för att visa.
Så i min egen tabell ska det se ut så här
Som du ser vill jag lägga till det jag hämtar ut i olika kolumner i databasen... och som du ser i sista kolumnen vill jag även kunna formatera den till en länk.
Problemet är alltså helt enkelt hur jag placerar den information jag har hämtat i en egen tabell....
Jag vill även att den automatiska ska skapa nya rows i tabellen desto mer han hämtar. så hämtar han två rows ur databasen ska det bli två rows i min tabell också.
Jag har sett att det finns saker som innerhtml och innertext när jag väljer min tabell inne på .cs sidan så jag antar att det är det jag ska använda men jag förstår inte hur det fungerar där riktigt, så snälla, hjälp mig.
Och snälla ni, kom inte och säg att jag ska använda en gridview eller något inbyggt utan nu vill jag göra på det här sättet, så bespara mig från svar från att använda något sånt istället.
Och snälla ni, kom inte och säg att jag ska använda en gridview eller något inbyggt utan nu vill jag göra på det här sättet, så bespara mig från svar från att använda något sånt istället.
Du har inte tänkt på att det kanske finns en anledning till varför personer skulle förslå för dig att använda något inbyggt?
Ditt sätt att göra det på är både ett komplicerat och onödigt sätt att göra det på, samt att det strider mot allt vad som ASP.NET står för.
Speciellt "fel" är det att lägga in information på ASP.NET sidan där du har skrivit följande: //HÄR VILL JAG LÄGGA TILL DET SOM JAG HAR HÄMTAT UR DATABASEN I VARJE
Eftersom du inte vill ha tips på hur man borde göra, så tänker jag inte berätta för dig om hur man löser det med asp:repeater och dess onItemBound event som är det enklaste och smidigaste sättet att lösa det på om man vill bygga upp en egen tabell med data från databasen.
Även om jag skulle vilja ge dig ett svar, vilket jag inte vill, så är det du efterfrågar i princip omöjligt. ASP.NET är inte byggt för att hanteras så. Passar det inte så är det ASP eller PHP som gäller, och det finns ingen skam i det. Man ska använda det man trivs med. :)
Och snälla ni, kom inte och säg att jag ska använda en gridview eller något inbyggt utan nu vill jag göra på det här sättet, så bespara mig från svar från att använda något sånt istället.
Du har inte tänkt på att det kanske finns en anledning till varför personer skulle förslå för dig att använda något inbyggt?
Eftersom du inte vill ha tips på hur man borde göra, så tänker jag inte berätta för dig om hur man löser det med asp:repeater och dess onItemBound event som är det enklaste och smidigaste sättet att lösa det på om man vill bygga upp en egen tabell med data från databasen.
- M
Anledningen till varför jag vill göra på det här sättet är att jag tidigare har programmerat i php men skulle vilja testa mig på asp.net, men jag har aldrig riktigt förstått mig på alla dessa inbyggda funktioner. Jag tycker aldrig att jag får den frihet jag vill med dem eller kan formatera dem på det sätt jag vill så med att göra allt själv tänkte jag att jag skulle få det som jag vill.Antingen blir de förstora, de slutar aldrig där jag vill, en tabell kan jag ju t.ex. ställa in width men hur löser jag det i en gridview, datalist eller repeater, t.ex.?
Men okej, jag ska ge mig. Jag vill jättegärna ha tips om hur man löser detta med hjälp av något av de inbyggda funktionerna, men då vill jag inte bara ha ett simpelt svar om att jag ska använda den och den funktionen utan lite mer ingående hur jag ska göra det för att få det som jag vill .
Hur gör jag t.ex. för att göra en substring på en text i en repeater, hur visar jag en bild istället för sökvägen i en repeater osv...
PS, var inte meningen att verka vresig och sur, förlåt om någon tog det så.
Det är okej, smileenergy! :) Det är bara det att det är så många som hoppar på ASP.NET-tåget, för att det är det senaste, och sedan blir sura för att det inte fungerar som ASP och PHP, när det i själva verket är just detta som är det fina med ASP.NET. Det kräver ett annat tankesätt, men när man väl vant sig (vilket kan ta ett tag) så är fördelarna stora.
Ge ASP.NET en rejäl chans, och om det visar sig att det inte lirar med just din kreativa process så finns ju gott om alternativ.
Nåväl, vad beträffar ditt problem... Börja med att använda en Repeater, eftersom den bara är en iterator-kontroll, som inte skapar någon som helst egen HTML-kod. Du har med andra ord full kontroll över det som skapas.
PS, var inte meningen att verka vresig och sur, förlåt om någon tog det så.
Vi tog det inte så, men de inbyggda kontrollerna finns där av en anledning och det är för att de är bra, de är bra på olika saker, men de är bra.
I ditt fall så är det en repeater som gäller, här kommer ett kort exempel på hur det skulle se ut med ItemDataBound eventet, som är det "snyggaste" sättet att lösa det på, även om det kanske är mer komplext än att lösa det utan.
Vi börjar med din repeater (tänk på att allt är skrivet från huvudet, så jag kan ha glömt något)
Det är iprincip vad du behöver på själv ASPX sidan.
till C# sidan så behöver du 2 saker. En metod som hämtar all din data, och så ItemDataBound Eventet som sköter mappningen från data till dina kontroller på sidan.
Det är iprincip vad som behövs för att få det att fungera, nu är jag inte säker på ((DataRow) typcastingen, då jag sällan binder direkt från en dataReader, men om inte så får du ett fel som säger att du kan inte typomvandla från detta objekt till ett annat, och då brukar det stå vilket objekt det är...
Nu kommer du även få så många rader utskrivna som du hämtar från databasen i en ända lång tabell.
nu är jag inte säker på ((DataRow) typcastingen, då jag sällan binder direkt från en dataReader, men om inte så får du ett fel som säger att du kan inte typomvandla från detta objekt till ett annat, och då brukar det stå vilket objekt det är...
Nej, ingenting kan vara bara Object. DataItem:s returtyp är förvisso Object, men det är bara för att den verkliga typen kan vara vad som helst. Med en DataReader som källa borde man kunna casta till DbDataRecord.
Nej, ingenting kan vara bara Object. DataItem:s returtyp är förvisso Object, men det är bara för att den verkliga typen kan vara vad som helst. Med en DataReader som källa borde man kunna casta till DbDataRecord.
Det var det jag menade, men jag missade att han band direkt från en DataReader till Repeater (och därmed castade om objektet till en DataRow).
Finns det något enklare sätt än att binda datan med en datarow där jag kan få ut ut rätt id är jag idel öra.
För att göra ett enkelt exempel vill kan vi säga att jag vill ha en den här utformingen på tabellen och där han ska känna av vilket ID varje rad har.
kolumn1 | Kolumn 2 (tänk er att en bild visas istället för texten)
DELETE | Hej.jpg
DELETE | Webforum.jpg
DELETE | Tja.jpg
Ny row
DELETE | Hej2.jpg
DELETE | Webforum2.jpg
DELETE | Tja2.jpg
Jag vill alltså ha det så att han kör rätt SQL sats om jag klickar på delete, han ska ta reda på hej.jpgs ID...
och klickar jag på hej.jpg vill jag att bilden ska visas i ett större ex.
Ni förstår säkert vad jag är ute efter, det jag vill komma åt IDt utan att visa det.
Vilket är det enklaste och bästa sättet att visa saker på detta sätt?tänk på att han hämtar allt från en databas och vissa idn kan vara raderade. Jag vill även på ett bra sätt kunna lägga in en session och annan egen kod under varje sak man kan trycka på som bilden t.ex.
Och så funktionen Delete_Click som körs när du klickar på din linkbutton där vi enkelt kan ta fram rätt id:
protected void Delete_Click(object sender, EventArgs e) {
// hämta commandargument som inenhåller rätt id
int myId = ((LinkButton)sender).CommandArgument;
// och sen radera från databasen på lämpligt sätt
ExecuteNonQuery("Delete", myId);
}
Som du ser här vill jag bild, sen så ska han "hoppa ned en row" och skriva ut en hyperlink för delete.
Nu är det som så att jag vill att han ska repetera detta åt sidan tre gånger, alltså så här. bild | bild | bild...
Sen så ska han börja med en helt ny rad... så att det blir
bild | bild | bild
del. | del. | del.
bild | bild |bild
del. | del. | del.
Ja ni förstår säkert.. han ska upprepa det han skriver ut vertikalt tre gånger innan han börjar på en ny rad, hur löser jag det i en repeater?
Till aspx.cs sidan.
protected void Repeater1_ItemDataBound(object sender, RepeaterItemEventArgs e)
{
switch (e.Item.ItemType)
{
case ListItemType.AlternatingItem:
case ListItemType.Item:
((ImageButton)e.Item.FindControl("picture")).NavigateUrl = ((DataRow)e.Item.DataItem)[""].ToString();
((ImageButton)e.Item.FindControl("picture")).ImageUrl = ((DataRow)e.Item.DataItem)[""].ToString();
((Label)e.Item.FindControl("deleteLink")).NavigateUrl = ((DataRow)e.Item.DataItem)[1].ToString();
((Label)e.Item.FindControl("deleteLink")).Text = "Delete";
break;
}
}
private void BindDataToControl()
{
SqlConnection cnn = new SqlConnection();
try
{
cnn.ConnectionString = strCon;
SqlCommand cmd = new SqlCommand();
cmd.CommandText = "SELECT [id], [thumbImgScr], [orgImgScr] FROM [Picture] ORDER BY [id] DESC";
cmd.Connection = cnn;
cnn.Open();
SqlDataReader dr = cmd.ExecuteReader(CommandBehavior.CloseConnection);
Repeater1.DataSource = dr;
Repeater1.DataBind();
}
catch (System.Exception ex)
{
lblStatus.Text = "Något gick fel (" + ex.Message + ")";
}
finally
{
cnn.Close();
}
}
Vart någonstans i metoden Repeater1_ItemDataBound ska jag gå in i funktionen BindDataToControl() ?
Hur "knyter" jag de olika sakerna jag hämtar ut från sql satsen till imagebutton och label?
I ImageButton(picture) ska imageurl vara server.mappath(thumbImgScr) och navigateurl server.mappath(orgImgScr)
I Label(deleteLink) vill jag att om man klickar på den så ska man gå till funktionen DeletePicture() och ta med sig id för den bilden man har tryckt på delete under.
Hoppas att ni förstår vad jag menar och kan visa hur man ska göra.
Tack men om ni skulle kunna hjälpa mig att koppla och binda den här datan så skulle jag bli väldigt glad, som ni ser vill jag koppla olika databas kolumner till olika saker i switchen... Ni ser vad jag frågade om förra gången, skulle gärna vilja få det att fungera. Tack på förhand!
smileenergy skrev:
Till aspx.cs sidan.
protected void Repeater1_ItemDataBound(object sender, RepeaterItemEventArgs e)
{
switch (e.Item.ItemType)
{
case ListItemType.AlternatingItem:
case ListItemType.Item:
((ImageButton)e.Item.FindControl("picture")).NavigateUrl = ((DataRow)e.Item.DataItem)[""].ToString();
((ImageButton)e.Item.FindControl("picture")).ImageUrl = ((DataRow)e.Item.DataItem)[""].ToString();
((Label)e.Item.FindControl("deleteLink")).NavigateUrl = ((DataRow)e.Item.DataItem)[1].ToString();
((Label)e.Item.FindControl("deleteLink")).Text = "Delete";
break;
}
}
private void BindDataToControl()
{
SqlConnection cnn = new SqlConnection();
try
{
cnn.ConnectionString = strCon;
SqlCommand cmd = new SqlCommand();
cmd.CommandText = "SELECT [id], [thumbImgScr], [orgImgScr] FROM [Picture] ORDER BY [id] DESC";
cmd.Connection = cnn;
cnn.Open();
SqlDataReader dr = cmd.ExecuteReader(CommandBehavior.CloseConnection);
Repeater1.DataSource = dr;
Repeater1.DataBind();
}
catch (System.Exception ex)
{
lblStatus.Text = "Något gick fel (" + ex.Message + ")";
}
finally
{
cnn.Close();
}
}
Vart någonstans i metoden Repeater1_ItemDataBound ska jag gå in i funktionen BindDataToControl() ?
Hur "knyter" jag de olika sakerna jag hämtar ut från sql satsen till imagebutton och label?
I ImageButton(picture) ska imageurl vara server.mappath(thumbImgScr) och navigateurl server.mappath(orgImgScr)
I Label(deleteLink) vill jag att om man klickar på den så ska man gå till funktionen DeletePicture() och ta med sig id för den bilden man har tryckt på delete under.
Hoppas att ni förstår vad jag menar och kan visa hur man ska göra.
Vart någonstans i metoden Repeater1_ItemDataBound ska jag gå in i funktionen BindDataToControl() ?
Ingenstans. BindDataToControl fyller repeatern med data och (om eventet är definierat) det får Repeater1_ItemDataBound att köras en gång för varje rad i datakällan.
smileenergy skrev:
Hur "knyter" jag de olika sakerna jag hämtar ut från sql satsen till imagebutton och label?
Du hämtar värdena från DataItem och stoppar in dem där du vill ha dem. Din exempelkod är hyfsat rätt, men du måste förstås ange vad du ska hämta från datakällan (inte ange bara "") och datakällan ska vara av rätt typ. Om du binder till en Reader så är det inte DataRow, utan DbDataRecord.
okej. Jag tycks ha fått det att fungera. Men som du sa tidigare ska jag även använda mig utav en datalist för att visa filerna i kolumner men vad ska jag skriva i itemdatabound för att visa bilder och skapa en sökväg istället för bara sökvägen?
som det ser ut nu i varje kolumn så står det /picture/bild.jpg... vad skriver jag där istället om jag vill visa det som en bild? är det i itemdatabound jag lägger till om jag vill ha länk också? klickar jag på en bild på vill jag att den ska gå till en viss sida t.ex. bilder.aspx och ta med sig en session...
Så om någon kunde hjälpa mig med koden för att visa bilder istället för sökvägen i en datalist samt berätta vart jag lägger in länk och session, är det i itemdatabound eller är det i något annat event?
275 ms totalt · 4 externa anrop · v20260731065814-full.6fe65c25