webForumDet fria alternativet

Textbox i Repeater till databas

.NET

20 svar · 529 visningar · startad av greggan

Medlem sedan jan. 2004678 inlägg
Frågan#1

Knepig rubrik, vet inte riktigt hur jag ska formulera mig men jag ska försöka så gott jag kan.

Jag hämtar data från en tabell i en databas och lägger in den i en asp:textbox med hjälp av en asp:repeater.

Det ser ut så här:

<asp:repeater id="users" runat="server">
<itemtemplate>
<asp:textbox TextMode="MultiLine" Height="150" text='<%# DataBinder.Eval(Container.DataItem, "info") %>' runat="server" id="tb1"></asp:textbox><br/>
</itemtemplate>
</asp:repeater>

Under detta har jag även lagt in en spara knapp som ska spara det man ändrar i textbox i tabellen igen.

SQL-satsen ser ut såhär:

Dim cmd as new OleDbCommand("INSERT INTO users(info) VALUES('" & tb1.Text & "') ",cn)

Men nu får jag ett felmeddelande om att tb1 "is not declared" men den är ju tydligt "declaredad" i min repeater.

Då slog mig tanken att när min textbox ligger i repeater så kanske den inte blir hittad i koddelen av sidan. Är det så? Och hur kan jag komma runt problemet? :l

Medlem sedan apr. 20012 266 inlägg
#2

Ja det stämmer, du kommer runt problemet genom att du enklast använder ItemCommand för DataGriden och sedan från denna använder du FindControl("tb1").

Medlem sedan jan. 2004678 inlägg
#3

hmm.. okej, jag får testa det imorn, förstår nog inte riktigt såhär på rak arm, men jag gillar att testa mig fram. Ska försöka med dom tips jag fått. Men som sagt, det får bli imorn. Tack så länge iaf. =)

Medlem sedan jan. 2004678 inlägg
#4

ska jag köra datagrid då eller? och ska textboxen ligga utanför datagriden och sen anropar datagriden textboxen med itemcommand eller ska textboxen ligga i datagrid och sen ska jag använda itemcommand för sql?
förstår inte riktigt :(

Medlem sedan jan. 2004678 inlägg
#5

någon som kan hjälpa mig? hur ska jag lösa problemet så jag på samma sida kan hämta text från en databas och lägga in det i en textbox och sen också om man klickar på spara få texten i textboxen att sparas i databasen?? HJÄLP!!?? :(

Medlem sedan apr. 2004778 inlägg
#6

Eftersom du använder en repeater så förutsätter jag att du får en lista med x antal textboxar?
Vill du ändra i flera av textboxarna och sedan genomföra ändringarna i alla textboxarna när du klickar Spara?

Medlem sedan jan. 2004678 inlägg
#7

grejjen är den att jag är inte säker på vad jag ska använda, troligtvis ska jag inte använda en repeater... jag vill få upp en textruta där folk ska kunna skriva en presentation om sig själva, sedan ska dom kunna spara och då hamnar det i databasen.. nästa gång när dom går in på inställningssidan så ska pressentationstexten finnas kvar i textrutan och dom ska kunna ändra och sedan spara igen. Vilket är det bästa sättet och hur ska jag göra det? Kört fast totalt. :(

Medlem sedan apr. 2004778 inlägg
#8

Om du bara ska visa en TextBox ska du inte använda Repeater, DataGrid, DataList eller nåt. Du ska bara lägga din TextBox på sidan.

Medlem sedan jan. 2004678 inlägg
#9

ja, men om jag vill ha information från databasen som ska fylla textboxen då? hur gör jag då?

Medlem sedan apr. 2004778 inlägg
#10

Då plockar du ut det databasresultat du behöver och stoppar in det i txtBoxen.Text. Man behöver inte DataBinda för att få in databasresultat i en kontroll.

Jag rekommenderar att du kör igenom exemplen på http://asp.net/Tutorials/quickstart.aspx så att du lär dig att förstå grunderna i ASP.NET.

Medlem sedan jan. 2004678 inlägg
#11

jag kan redan grunderna i asp.net, jag har bara fått det här med hur man hämtar data från databasen lite om bakfoten. På vilket mer sätt kan man få ut datan till en kontroll om man inte ska använda databind?

jag har tidigare försökt få det jag hämtar från databasen till en sträng men inte lyckats med det och när jag har frågat här har folk hela tiden rekomenderat mig att köra nåt databind istället.

Medlem sedan apr. 2004778 inlägg
#12

Databind använder man när man ska ha in något i en DataGrid, Repeater, DataList, DropDownList, m.m. Det är när du har fått ut en lista med databasresultat som du ska visa.
I ditt fall så verkar det som att du ska plocka ut användarinformation. Då kör du en DB-fråga som plockar ut den användarens information. Använd en DataReader.
Sedan kan du t.ex. använda
minTextBox.Text = minDataRdr("UserInformation")

För att få in resultatet i textboxen.

Det går att DataBinda enstaka kontroller också. Om du går igenom Tutorials på asp.net så ser du exempel på detta under länken "Data Binding Server Controls".
Jag anser att det tillhör grunderna i asp.net att veta vad man använder kontroller som DataGrid, Repeater, DataList, m.m. till så gå igenom exemplen så att du förstår detta.

Medlem sedan jan. 2004678 inlägg
#13

okej jag trodde nästan att man kunde göra på det sättet, men alla har sagt att jag skulle köra nåt databinding objekt för att det var bäst.

tack så mycket för hjälpen :)

att kalla det grunderna vet jag inte riktigt, databindingobjekten som har med databaser att göra är ju inte det simplaste i ASP.NET även om det är det man använder mest kanske. jag har läst två böcker om ASP.NET och de tar inte upp databaser (och databinding) förrän efter 1/3 - 1/2 av boken, vilket tyder på att det inte riktigt är grunderna.

Men våra åsikter skiljer sig och det är väl strunt samma. :birp
Men än en gång tack så mycket för hjälpen :)

Medlem sedan jan. 2004678 inlägg
#14

det fungerar ändå inte.

den säger att den inte hittar någon data i raden/kolumnen, vilket är konstigt eftersom det finns data där.

såhär skrev jag ihop koden, är den fel?

sub page_load(obj as object, e as eventargs)
Dim cn as new OleDbConnection("PROVIDER=Microsoft.Jet.OLEDB.4.0;DATA SOURCE=C:\Inetpub\databaser\loggin.mdb;")
Dim cmd as new OleDbCommand("select * from users WHERE nick='" + "greggan" + "'" ,cn)
Dim dr as OledbDataReader
cn.Open()
dr = cmd.ExecuteReader()
tb1.text = dr("info")
cn.Close()
end sub

sen är det ju lite konstigt att det ska bli fel om det inte finns någon data i kolumnen, för om det inte finns någon data så vill jag ju att textboxen ska bli tom. Detta kanske man kan lösa med en liten if- eller trysats, men det verkar konstigt ändå.

Medlem sedan maj 20012 812 inlägg
#15

ditt datareader objekt kommer att var tomt tills du gör en Read() på den.

Alltså måste du göra en dr.Read() för att hämta ut en rad från databasen till din reader.

- magnus

Medlem sedan apr. 2004778 inlägg
#16

Vad är det exakta felmeddelandet?

Har du provat att köra sql-frågan direkt i databasen så att du är säker på att du får tillbaka ett resultat?

Prova även:

 Dim cmd as new OleDbCommand("select * from users WHERE nick='greggan'" ,cn)

Ska inte spela någon roll men är det något jag lärt mig genom åren är att aldrig utesluta någonting när jag felsöker bara för att jag "tror" att något ska vara rätt.

Medlem sedan jan. 2004678 inlägg
#17

Sådär nu löste det sig, det var att jag inte hade gjort en read. Tack så mycket Gladh för det.

Tack även för det där tipset PDahlen.

PDahlen skrev:

Ska inte spela någon roll men är det något jag lärt mig genom åren är att aldrig utesluta någonting när jag felsöker bara för att jag "tror" att något ska vara rätt.

kan vara bra att ha i åtanke :)

Medlem sedan jan. 2004678 inlägg
#18

det känns som att det bara blir sjukare och sjukare.

när jag går in på sidan så fylls min textruta med texten från databasen.

när jag sedan ändrar i texten i textrutan och väljer spara (spara_click i koden) så sparas inte texten i databasen så den gamla texten kommer fram igen. Vad är felet?

jag blir inte klok på det här! :q :(

<script runat="server">
sub page_load(obj as object, e as eventargs)
uppdatera()
end sub

sub spara_click(obj as object, e as eventargs)
	Dim cn as new OleDbConnection("PROVIDER=Microsoft.Jet.OLEDB.4.0;DATA SOURCE=C:\Inetpub\databaser\loggin.mdb;")
	Dim cmd as new OleDbCommand("UPDATE users SET info = '" & tb1.Text & "' WHERE nick='" + session("userid") + "'",cn)
    cn.open()
	Cmd.ExecuteNonQuery()
	cn.close()
	'uppdatera()
end sub

sub uppdatera()
Dim cn as new OleDbConnection("PROVIDER=Microsoft.Jet.OLEDB.4.0;DATA SOURCE=C:\Inetpub\databaser\loggin.mdb;")
Dim cmd as new OleDbCommand("select * from users WHERE nick='" + session("userid") + "'" ,cn)
Dim dr as OledbDataReader
cn.Open()
dr = cmd.ExecuteReader()
dr.read()
tb1.text = dr("info")
dr.close()
cn.Close()
end sub
</script>
Medlem sedan apr. 2004778 inlägg
#19

Inte alls konstigt. När du gör din PostBack så hämtar du data från databasen igen i Page_Load och sedan uppdaterar du databasen med PostBack funktionen.
Du måste lägga in

If Not Page.IsPostBack Then
 Uppdatera()
End iF

i din Page_Load.

Medlem sedan jan. 2004678 inlägg
#20

tack så mycket :)

jag trodde att det kunde ha nåt med post back att göra men ändå så kändes det som att man var fel ute.

262 ms totalt · 4 externa anrop · v20260731065814-full.86ec41c2
118 ms — deklarationer (db)
0 ms — hämta statistik (cache)
133 ms — hämta tråd, inlägg och bilagor (db)
121 ms — ändringar (db)