Avatar billede kak Nybegynder
04. marts 2006 - 11:42 Der er 2 kommentarer og
1 løsning

Problemer med brug af databinding

Jeg bruger databinding til at indsætte data i og opdatere en formular til databasen. Det virker fint, men jeg synes det giver nogle andre problemer.

Når jeg opdaterer, bruger jeg denne knap:
<asp:Button ID="Button1" Text="Update" CommandName="Update" runat="server"/>

Men af og til, vil jeg gerne lave et par andre handlinger, før jeg kører update, så derfor har jeg lavet en sub der ser således ud:
    Sub doMyUpdate(ByVal source As Object, ByVal e As System.EventArgs)
      SqlDataSource1.Update()
    End sub           

Den kalder jeg med denne knap:               
<asp:Button ID="Button2" Text="Test Update" onclick="doMyUpdate" runat="server"/>

Men det virker ikke. Der bliver ikke opdateret, og der kommer heller ingen fejl.

Jeg vil også gerne automatisk indsætte en række værdier i en dropdown. Det gør jeg med denne her:

    Sub setHours(ByVal sender As Object, ByVal e As System.EventArgs)
        Dim i As Integer
        For i = 0 To 48
            DropDownlist1.Items.Insert(i, i)
        Next
    End Sub

Men den kan ikke finde DropDownlist1, når den ligger inde i min databinding-formular, altså inde i dette her:

<asp:formview ID="Formview1" runat="server" DefaultMode=Edit DataSourceID="SqlDataSource1">
    <EditItemTemplate>
        ............

Jeg har også prøvet med form1.Formview1.DropDownlist1.Items.Insert(i, i) men det hjælper ikke.

Jeg har altså problemer med at få fat på de elementer der ligger inde i min formular, som ellers virker med databinding.

Er der nogen der ved, hvordan jeg kan bibeholde databinding, men samtidig kalde elementerne? Og hvordan jeg kan bruge sqldatasource1.update()?
Avatar billede dr_chaos Nybegynder
05. marts 2006 - 15:29 #1
paste lige din kode.
Avatar billede kak Nybegynder
05. marts 2006 - 15:47 #2
Koden er temmelig lang, og der er en hel del der ikke er relevant for dette her. Men her er det nødvendige. Først den sub, hvorfra jeg vil ændre i DropDownlist1:

    Sub setHours(ByVal sender As Object, ByVal e As System.EventArgs)
        Dim i As Integer
        For i = 0 To 48
            DropDownlist1.Items.Insert(i, i)
        Next
    End Sub

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

Og her er min formular der er databound:

  <form runat="server">

    <div>
             
          <asp:DropDownList ID="DropDownList2" runat="server" AutoPostBack="true" DataSourceID="SqlDataSource1" DataTextField="Name" DataValueField="CustomerID" AppendDataBoundItems="true">
          <asp:ListItem text="<-Vælg kunde->" Value="0"></asp:ListItem>
        </asp:DropDownList>
       
    <hr />

    <asp:SqlDataSource ID="SqlDataSource1" runat="server" ConnectionString="<%$ ConnectionStrings:myConnectionString %>"
        SelectCommand="SELECT * FROM [tblCustomers]">
    </asp:SqlDataSource>
     

   

        <asp:formview id="formview1" runat="server" DefaultMode=Edit DataSourceID="SqlDataSource2" OnDataBound="setHours">
            <EditItemTemplate>
            <asp:Label ID="IDLabel" runat="server" Text='<%# Bind("CustomerID") %>' Visible=false></asp:Label>
                    <asp:DropDownList ID="DropDownlist1" runat="server">
                </asp:DropDownList> 

..... herefter kommer alle de andre felter, som i denne sammenhæng ikke er relevante, og så slutter jeg af med dette er.....

                <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">
            <DeleteParameters>
                <asp:Parameter Name="original_CustomerID" Type="Int64" />
            </DeleteParameters>
            <UpdateParameters>
                <asp:Parameter Name="Name" Type="String" />
                <asp:Parameter Name="CustomerID" Type="Int64" />
            </UpdateParameters>
            <SelectParameters>
                <asp:ControlParameter ControlID="DropDownList2" Name="CustomerID" PropertyName="SelectedValue"
                    Type="Int64" />
            </SelectParameters>
        </asp:SqlDataSource>
    </div>
   
    </form> 



Button1 virker fint, og opdaterer min tabel. Dels vil jeg gerne have Button2 til at virke, så jeg bedre kan styre hvad der skal ske ved opdatering (lige nu opdaterer den slet ikke) og dels vil jeg gerne have setHours til at virke. Men jeg kan ikke kalde dropdownlist1 derfra.
Avatar billede kak Nybegynder
05. marts 2006 - 18:31 #3
Jeg har fundet løsningen. Man skal åbenbart bruge "DirectCast" og "FindControl", og nedenstående eksempel virker.

        Dim dpl As DropDownList
        For i = 0 To 48
            dpl = DirectCast(formview1.FindControl("dropdownlist1"), DropDownList)

            dpl.Items.Insert(i, i)
        Next
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