Avatar billede kak Nybegynder
14. marts 2006 - 09:37 Der er 13 kommentarer og
1 løsning

Brug af SqlDataSource.Update

Jeg har lavet en databound formular, hvorfra jeg opdaterer en tabel. Det virker fint og ser nogenlunde således ud:

<asp:formview id="formview1" runat="server" DefaultMode=Edit DataSourceID="SqlDataSource2">
      <EditItemTemplate>
<asp:TextBox ID="Name" runat="server" text=<%# Bind("Name") %>></asp:TextBox>
..... (flere felter)......
                <asp:Button ID="Button1" Text="Update" CommandName="Update" runat="server"/>
                               
                <asp:Button ID="Button2" Text="Test Update" onclick="saveCust" runat="server"/>
        </EditItemTemplate>
</asp:formview>
<asp:SqlDataSource ID="SqlDataSource2" runat="server" ConnectionString="<%$ ConnectionStrings:myConnectionString %>"
    SelectCommand="SELECT * FROM [tblCustomers] WHERE ([CustomerID] = @CustomerID) ORDER BY [Name]" UpdateCommand="UPDATE [tblCustomers] SET [Name] = @Name WHERE [CustomerID] = @CustomerID">
            <UpdateParameters>
                <asp:Parameter Name="Name" Type="String" />
                <asp:Parameter Name="CustomerID" Type="Int64" />
            </UpdateParameters>
            <SelectParameters>
                <asp:ControlParameter ControlID="DropDownList1" Name="CustomerID" PropertyName="SelectedValue"
                    Type="Int64" />
            </SelectParameters>
        </asp:SqlDataSource>


Når jeg klikker på "button1" virker det som det skal. Den korrekte record bliver opdateret i min db. Men Button2 kan jeg ikke få til at virke. Den kalder denne sub:

Sub saveCust(ByVal source As Object, ByVal e As System.EventArgs)
        SqlDataSource2.Update()
End sub

Sub'en bliver kørt (har testet med en msgbox i den) men min record bliver ikke opdateret?! Jeg har sat disse to linier ind i den, som et forsøg:
        Dim strSql
        strSql = SqlDataSource2.UpdateCommand

strSql indeholder den rigtige updatecommand fra sqldatasource2. Jeg har også udskiftet sqldatasource2.update() med en "normal" myConn... hvor jeg så har indsat strSql som sql-kommando, men stadig intet resultat.

Jeg gætter på, at den bare ikke kan se værdien af de felter der skal hentes fra formen, når update() køres udenfor selve formen. Men hvordan får jeg den til det? Jeg vil gerne kunne lave nogle flere handlinger, når der klikkes på knappen.
Avatar billede dr_chaos Nybegynder
14. marts 2006 - 17:21 #1
tror det er fordi dine update paramtre er tomme
Avatar billede kak Nybegynder
14. marts 2006 - 17:23 #2
Men hvordan får jeg fat på værdierne?
Avatar billede dr_chaos Nybegynder
14. marts 2006 - 17:47 #3
kan få dem ud via FormView1.FindControl("stringid");
Måske på andre måder.
Vender lige tilbage senere.
Avatar billede dr_chaos Nybegynder
14. marts 2006 - 18:00 #4
prøv lige med
<asp:SqlDataSource ID="SqlDataSource2" runat="server" ConnectionString="<%$ ConnectionStrings:myConnectionString %>"
    SelectCommand="SELECT * FROM [tblCustomers] WHERE ([CustomerID] = @CustomerID) ORDER BY [Name]" UpdateCommand="UPDATE [tblCustomers] SET [Name] = @Name WHERE [CustomerID] = @CustomerID">
            <UpdateParameters>
<asp:ControlParameter ControlID="DropDownList1" Name="CustomerID" PropertyName="SelectedValue"
                    Type="Int64" />
            </UpdateParameters>
            <SelectParameters>
                <asp:ControlParameter ControlID="DropDownList1" Name="CustomerID" PropertyName="SelectedValue"
                    Type="Int64" />
            </SelectParameters>
        </asp:SqlDataSource>
Avatar billede kak Nybegynder
14. marts 2006 - 19:45 #5
Hvis jeg gør det, får jeg denne fejl:

System.Data.SqlClient.SqlException: Must declare the variable @Name

(den fejler på SqlDataSource2.Update()
Avatar billede dr_chaos Nybegynder
14. marts 2006 - 19:50 #6
Kan du have din update knap i formview ?
Avatar billede kak Nybegynder
14. marts 2006 - 19:54 #7
Jeg er ikke helt med på, hvad du mener? Knappen er inde i min formview1
Avatar billede dr_chaos Nybegynder
14. marts 2006 - 19:56 #8
Ah
Hvorfor vil du have button 2
Avatar billede kak Nybegynder
14. marts 2006 - 20:04 #9
Fordi jeg gerne vil lave en side med to formviews, og opdatere dem begge med ét klik. Der er også andre tilfælde, hvor jeg gerne vil lave flere handlinger, samtidig med at formularen opdateres.
Avatar billede dr_chaos Nybegynder
14. marts 2006 - 20:46 #10
I din sub kan du kalde FormView1.UpdateItem(true); <-- c# men burde være stortset det samme i vb.

Prøv med denne datasource
<asp:SqlDataSource ID="SqlDataSource2" runat="server" ConnectionString="<%$ ConnectionStrings:myConnectionString %>"
    SelectCommand="SELECT * FROM [tblCustomers] WHERE ([CustomerID] = @CustomerID) ORDER BY [Name]" UpdateCommand="UPDATE [tblCustomers] SET [Name] = @Name WHERE [CustomerID] = @CustomerID">
              <SelectParameters>
                <asp:ControlParameter ControlID="DropDownList1" Name="CustomerID" PropertyName="SelectedValue"
                    Type="Int64" />
            </SelectParameters>
        </asp:SqlDataSource>
Avatar billede dr_chaos Nybegynder
14. marts 2006 - 20:47 #11
Skal vidst bare kalde
FormView1.UpdateItem(True)
og
FormView2.UpdateItem(True)
Avatar billede dr_chaos Nybegynder
14. marts 2006 - 20:48 #12
UpdateItem opdaterer den nuværende record i datasourcen.
Avatar billede kak Nybegynder
14. marts 2006 - 22:29 #13
Så lykkes det!

FormView1.UpdateItem(True) virker og det er samme syntax i vb.
Smider du et svar, så du kan få point!
Avatar billede dr_chaos Nybegynder
15. marts 2006 - 08:12 #14
perfekt og svar :)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester