Avatar billede kak Nybegynder
08. februar 2006 - 19:56 Der er 9 kommentarer og
2 løsninger

Opdatere tabel via databinding

Jeg forsøger at opdatere en tabel via databinding, men det vil ikke rigtig lykkes. Jeg har lavet en dropdown, og udfylder indholdet af min formular ud fra valget på den. Det virker fint, men jeg kan ikke opdatere min tabel. Her er min kode....

    Sub updTest(ByVal sender As Object, ByVal e As System.EventArgs)
        SqlDataSource1.Update()
    End Sub

......

    <asp:SqlDataSource ID="SqlDataSource1" runat="server" ConnectionString="<%$ ConnectionStrings:myConnectionString %>"
        SelectCommand="SELECT * FROM [tblTest] WHERE ([ID] = @ID)" UpdateCommand="UPDATE [tblTest] SET [Name] = @Name WHERE [ID] = @ID">
        <SelectParameters>
            <asp:ControlParameter ControlID="DropDownList1" Name="ID" PropertyName="SelectedValue"
                Type="Int64" />
        </SelectParameters>
        <UpdateParameters>
            <asp:Parameter Name="Name" />
            <asp:controlparameter Name="ID" ControlId="DropDownList1" PropertyName="SelectedValue" />
        </UpdateParameters>
    </asp:SqlDataSource>

....

      <asp:DataList ID="DataList1" runat="server" DataSourceID="SqlDataSource1">
        <ItemTemplate>
<asp:TextBox ID="Name" runat="server" text=<%# bind("Name") %>></asp:TextBox>
        </ItemTemplate> 
<asp:Button ID="ButtonSave" runat="server" Text="Gem" CommandName="Update" />
</asp:DataList>

Jeg har læst forskellige artikler på nettet, og fundet forskellige eksempler, men kan ikke finde en løsning der virker. Den opdaterer den korrekte record i min tabel, men sætter [name] til en tom værdi, i stedet for at tage værdien fra min textbox.

Er der nogle gode forslag, eller evt. et helt eksempel der virker?
Avatar billede dr_chaos Nybegynder
08. februar 2006 - 20:00 #1
fjern:
<asp:Parameter Name="Name" />
og prøv igen.
Avatar billede kak Nybegynder
08. februar 2006 - 20:26 #2
Så sker der ikke noget (der kommer ingen fejl, men den opdaterer heller ikke)

Skal den ikke bruge parameter name=... for at matche @name i sql-sætningen?

Det meste af koden er lavet automatisk af Visual Web Developer 2005 Express, og den satte <asp:Parameter Name="Name" /> ind. Jeg har også prøvet at lave name om til <asp:controlparameter... men får en fejl der siger, at den ikke kan finde "name" som der refereres til i controlparameteret.
Avatar billede dr_chaos Nybegynder
08. februar 2006 - 20:40 #3
prøv lige at vise mig hele koden til siden.
Avatar billede kak Nybegynder
08. februar 2006 - 20:45 #4
Der er temmelig meget kode, som ikke er relevant for denne funktion. Har du et eksempel på hvad der skal være, for at det virker?
Avatar billede dr_chaos Nybegynder
09. februar 2006 - 08:07 #5
ligger sqldatasourcen og datalisten lige ved siden af hinanden ?
ALtså på samme niveau. Ikke noget med at datalisten ligger i en tabel eller lignende ?
Avatar billede kak Nybegynder
09. februar 2006 - 13:08 #6
Jeg ved desværre ikke helt hvad du mener med samme niveau? Al den kode jeg har vist, ligger i samme .aspx side.
Avatar billede dr_chaos Nybegynder
09. februar 2006 - 13:28 #7
ja det ved jeg prøv at vis mig din kode.
Avatar billede kak Nybegynder
09. februar 2006 - 13:47 #8
Jeg har lige lavet en ny side, hvor kun den relevante kode er på, og den får du her. Jeg har naturligvis testet den, men feltet bliver ikke opdateret når jeg klikker på knappen.

<%@ Page Language="VB" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<script runat="server">

    Sub updSub(ByVal sender As Object, ByVal e As System.EventArgs)
        SqlDataSource2.Update()
    End Sub
   
</script>

<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
    <title>Untitled Page</title>
</head>
<body>
    <form id="form1" runat="server">
    <div>
        <asp:DropDownList ID="DropDownList1" runat="server" AutoPostBack="True" DataSourceID="SqlDataSource1" DataTextField="Name" DataValueField="ID">
        </asp:DropDownList><asp:SqlDataSource ID="SqlDataSource1" runat="server" ConnectionString="<%$ ConnectionStrings:myConnectionString %>"
            SelectCommand="SELECT * FROM [tblTest]"></asp:SqlDataSource>
       
        <asp:DataList ID="DataList1" runat="server" DataKeyField="ID" DataSourceID="SqlDataSource2">
            <ItemTemplate>
                ID:
                <asp:Label ID="IDLabel" runat="server" Text='<%# Eval("ID") %>'></asp:Label><br />
                Name:
                <asp:Label ID="NameLabel" runat="server" Text='<%# Eval("Name") %>'></asp:Label><br />
                <asp:TextBox ID="Name" runat="server" text=<%# bind("Name") %>></asp:TextBox>
                <asp:Button ID="ButtonSave" runat="server" Text="Gem" onclick="updSub" />
            </ItemTemplate>
        </asp:DataList><asp:SqlDataSource ID="SqlDataSource2" runat="server" ConnectionString="<%$ ConnectionStrings:myConnectionString %>"
            DeleteCommand="DELETE FROM [tblTest] WHERE [ID] = @ID" InsertCommand="INSERT INTO [tblTest] ([Name]) VALUES (@Name)"
            SelectCommand="SELECT * FROM [tblTest] WHERE ([ID] = @ID)" UpdateCommand="UPDATE [tblTest] SET [Name] = @Name WHERE [ID] = @ID">
            <DeleteParameters>
                <asp:Parameter Name="ID" Type="Int64" />
            </DeleteParameters>
            <UpdateParameters>
                <asp:Parameter Name="Name" Type="String" />
                <asp:Parameter Name="ID" Type="Int64" />
            </UpdateParameters>
            <SelectParameters>
                <asp:ControlParameter ControlID="DropDownList1" Name="ID" PropertyName="SelectedValue"
                    Type="Int64" />
            </SelectParameters>
            <InsertParameters>
                <asp:Parameter Name="Name" Type="String" />
            </InsertParameters>
        </asp:SqlDataSource>
    </div>
    </form>
</body>
</html>
Avatar billede kak Nybegynder
09. februar 2006 - 15:40 #9
Jeg har nu fået det til at virke, ved at udskifte <asp:DataList ID="DataList1... med dette her:

        <asp:formview runat="server" DefaultMode=Edit DataSourceID="SqlDataSource2">
            <EditItemTemplate>
                ID:
                <asp:Label ID="IDLabel" runat="server" Text='<%# Bind("ID") %>'></asp:Label><br />
                Name:
                <asp:Label ID="NameLabel" runat="server" Text='<%# Eval("Name") %>'></asp:Label><br />
                <asp:TextBox ID="Name" runat="server" text=<%# bind("Name") %>></asp:TextBox>
                <asp:Button ID="Button1" Text="Update" CommandName="Update" runat="server"/>
            </EditItemTemplate>
        </asp:formview>

Jeg har altså lavet en asp:formview i stedet og (meget vigtigt) sat DefaultMode=Edit.
<ItemTemplate> har jeg ændre til <EditItemTemplate> og så bruger jeg blot denne knap til at opdatere <asp:Button ID="Button1" Text="Update" CommandName="Update" runat="server"/>
Avatar billede kak Nybegynder
17. februar 2006 - 09:01 #10
dr_chaos, jeg vil gerne give dig nogle point for din hjælp! Så vil du oprette et svar?
Avatar billede dr_chaos Nybegynder
17. februar 2006 - 09:02 #11
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