erkaMedlem sedan dec. 19994 597 inlägg Jag har en repeater som skriver ut värden i 10 textfält, klickar man på knappen i formuläret som repetern ligger i körs en update sub.
Problemet är att någe blir fel när jag skickar in parametrarna.
För att försöka underlätta ska jag bara försöka uppdatera ett av textfälten nu.
Textfältet skrivs ut med följande
<asp:TableRow RunAt="server">
<asp:TableCell RunAt="server">
<asp:textbox Columns="108" cssClass="FormFalt"
ID="strPresentation" Rows="6" runat="server"
TextMode="MultiLine" Text='<%# Container.DataItem
("UsrPresentation") %>' />
</asp:TableCell>
</asp:TableRow>
koden för att lägga till parametern är
cmdUpdate.Parameters.Add("@UsrPresentation", strPresentation.Text)
den klagar på
Compiler Error Message: BC30451: Name 'strPresentation' is not declared.
jag kan ju lösa det genom att deklarera i subben
Din strPresentation as String = Request.Params("strPresentation")
och sedan skriva
cmdUpdate.Parameters.Add("@UsrPresentation", strPresentation)
tror jag iaf att man kan, men i mitt exempel i min asp.net bok så skriver de enbart
cmdUpdate.Parameters.Add("@UsrPresentation", strPresentation.Text)
Varför fungerar det inte för mig ?
Tacksam
PaceMedlem sedan juni 20015 947 inlägg Är strPresentation någon form av webbkontroll/objekt?
Om inte så får du ta och hämta datan från Request objektet.
erkaMedlem sedan dec. 19994 597 inlägg strPresentation är ju en webkontroll i form av textbox
<asp:textbox Columns="108" cssClass="FormFalt"
ID="strPresentation" Rows="6" runat="server"
TextMode="MultiLine" Text='<%# Container.DataItem
("UsrPresentation") %>' />
Men det funkar inte, darn
Skriver jag så här
cmdUpdate.Parameters.Add("@UsrPresentation", Request.Params("strPresentation"))
så får jag
Exception Details: System.Data.SqlClient.SqlException: Prepared statement '(@UsrPresentation nvarchar(4000))UPDATE LL_users SET UsrPresenta' expects parameter @UsrPresentation, which was not supplied.
PaceMedlem sedan juni 20015 947 inlägg Om du använder codebehind så måste du deklarera strPresentation som en publik textbox.
erkaMedlem sedan dec. 19994 597 inlägg Nope nada codebehind på denna sida. Skickar med hela som en txt fil. Får meddelandet
Exception Details: System.Data.SqlClient.SqlException: Prepared statement '(@UsrPresentation nvarchar(4000))UPDATE LL_users SET UsrPresenta' expects parameter @UsrPresentation, which was not supplied.
Tacksam
PMedlem sedan jan. 20012 107 inlägg hmm du måste inte importera System.Data?
erkaMedlem sedan dec. 19994 597 inlägg Såg att jag inte hade med den nu, dock får jag ändå samma felmeddelande <%@ import Namespace="System.Data" %>
NETworkMedlem sedan juni 20011 679 inlägg Du måste nog ge UsrPresentation ett värde så här:
cmdUpdate.Parameters.Add(new SqlParameter("@UsrPresentation", SqlDbType.NVarChar, 50));
cmdUpdate.Parameters["@UsrPresentation"].Value = Request.Params("strPresentation");
erkaMedlem sedan dec. 19994 597 inlägg Har provat det också men får fortfarande
Exception Details: System.Data.SqlClient.SqlException: Prepared statement '(@UsrPresentation nvarchar(800))UPDATE LL_users SET UsrPresentat' expects parameter @UsrPresentation, which was not supplied.
Då anger jag
Dim strSQL As String = String.Format("UPDATE LL_users SET UsrPresentation = @UsrPresentation WHERE (PK_UsrId = "+ IntUsrId +")")
Dim strPresentation As String = Request.Params("strPresentation")
ConMyData = New SqlConnection(strConn)
cmdUpdate = NEW SqlCommand(strSQL,conMyData)
cmdUpdate.Parameters.Add(new SqlParameter("@UsrPresentation", SqlDbType.NVarChar,800))
cmdUpdate.Parameters("@UsrPresentation").Value = Request.Params("strPresentation")
ConMyData.Open()
cmdUpdate.ExecuteNonQuery()
ConMyData.Close()
Känns som om man blir galen snart :( kan man inte skriva som man gjorde i klassisk asp, alltså skriver variablen med innehållet direkt i frågan, men då måste jag ju ta bort ' tecken och ersätta dem med '', det skulle tydligen fixas automatiskt om man gör det med parametrar, men varför fungerar det inte tro
NETworkMedlem sedan juni 20011 679 inlägg Har du skrivit ut Request.Params("strPresentation") och kollat vad den innehåller?
erkaMedlem sedan dec. 19994 597 inlägg Ooops den innehåller ingenting, vad i hela friden kan det bero på
NETworkMedlem sedan juni 20011 679 inlägg Eftersom du har din kontroll i en kontroll (din textbox i en repeater) så måste du gå via din repeater för att hitta din textbox... typ nåt i den här stilen (fritt skrivet, säkert fel, men du kanske förstår principen):
((TextBox)MyRepeater.Items[e.Item.ItemIndex].FindControl("strPresentation")).Text
erkaMedlem sedan dec. 19994 597 inlägg Neh nu blir jag snart galen :) Lyckas inte komma åt strPresentation på det vägen heller. Jag skulle kunna göra så kanske om jag kunde få e att bli RepeaterItemEventArgs, men det lyckas jag ju inte göra eftersom man ska klicka på min imgbutton och köra OnClick på den,usch vad det här var struligt
Har nu lagt min <asp:ImageButton> inne i min repeater </ItemTemplate> för jag antar att den måste vara där om jag på något sätt ska samköra dem
NETworkMedlem sedan juni 20011 679 inlägg Hm, vänta nu här... kommer du någonsin att hämta mer än en rad från din databas??? Har du alltid en användare med en uppsättning data!? Då behöver du ingen repeater! Bort med den, kasta in användaruppgifterna i dina textboxar direkt så är det inga problem att spara sen! Det jag skrev ovan kan du glömma, ser att din button inte ligger i din repeater... :)
Om du nu skulle ha en knapp i din repeater någon gång i framtiden så kan du sätta ett commandargument på den för att enkelt veta vilken knapp som blivit tryckt på, exempelvis:
<asp:ImageButton CommandArgument='<%# Container.DataItem("ID") %>' runat="server"></asp:ImageButton>