webForumDet fria alternativet

datalist i datalist?

5 svar · 433 visningar · startad av stolpskottet

stolpskottetMedlem sedan mars 200527 inlägg
#1

Skulle behöva lite hjälp med mina datalister. Jag försöker att visa en datalist i en annan datalist.
Fungerar bra så länge jag inte försöker sätta ett 'selectedindex' på den andra datalisten.

Men vad saknar jag för att kunna visa den andra selecteditemtemplaten?
Ytterst tacksam för ett bra svar!

    Dim objDb as New databas

    Sub page_load(ByVal obj As Object, ByVal e As EventArgs)
        dl1.DataSource = objDb.hamtadata("ip")
        dl1.DataBind()
    End Sub
    
    Sub command1(ByVal obj As Object, ByVal e As DataListCommandEventArgs)
        dl1.SelectedIndex = e.Item.ItemIndex
        dl1.DataBind()
    End Sub
    
    Sub bind(ByVal obj As Object, ByVal e As DataListItemEventArgs)
        If e.Item.ItemType = ListItemType.SelectedItem Then
            Dim datalist2 As DataList = CType(e.Item.FindControl("dl2"), DataList)
            datalist2.DataSource = objDB.visainfo(e.Item.DataItem(0))
            datalist2.DataBind()
        End If
    End Sub

<asp:DataList runat="server" ID="dl1" OnItemCommand="command1" OnItemDataBound="bind">
    
    <SelectedItemTemplate>
        <%#Container.DataItem(0)%>
            <asp:DataList ID="dl2" runat="server" OnItemCommand="command2">
                
                <SelectedItemTemplate>
                    <%#Container.DataItem(0)%>            
                    <%#Container.DataItem(1)%>
                    <%#Container.DataItem(2)%>
                </SelectedItemTemplate>
                
                <ItemTemplate>
                    <asp:LinkButton runat="server" Text='<%#Container.DataItem(0)%>' CommandName='<%#Container.DataItem(0)%>' />
                </ItemTemplate>
            
            </asp:DataList>
    </SelectedItemTemplate>
    
    <ItemTemplate>
        <asp:LinkButton runat="server" Text='<%#Container.DataItem(0)%>' CommandName='<%#Container.DataItem(0)%>' />
    </ItemTemplate>
    
    </asp:DataList>
renholmMedlem sedan apr. 20012 266 inlägg
#2

I OnItemCreated för dl1 bör du kunna hitta dl2 genom FindControl() och på så sätt ändra SelectedIndex.

stolpskottetMedlem sedan mars 200527 inlägg
#3

Kan du utveckla det där lite?

Jag ska alltså göra en ny händerlsehanterare för dl1 som kallas genom OnItemCreated?

Hur får jag ut den valda ItemIndex där?

Hur ska jag använda FindControl för att sedan sätta SelectedIndex?


CType(e.Item.FindControl("dl2"), DataList)

eller


CType(dl1.FindControl("dl2"), DataList)

eller rent av page.findcontrol?

Tack på förhand!

renholmMedlem sedan apr. 20012 266 inlägg
#4

Skulle satsa på dl2 = CType(e.Item.FindControl("dl2"), DataList); dl2.SelectedIndex = <vad som helst>. Här kan du alltså sätta vilken rad som markeras som vald i dl2.

stolpskottetMedlem sedan mars 200527 inlägg
#5

hmmmmmm...........

ja, har gjort några framsteg

nu kan jag få ut valda indexet för den inre datalisten genom:

Sub command2(ByVal obj As Object, ByVal e As DataListCommandEventArgs)
        If e.CommandSource.CommandName = "in" Then
            response.write(e.Item.ItemIndex)
        End If
End Sub

 <asp:DataList ID="dl1">
    
    <SelectedItemTemplate>
                    
            <asp:DataList ID="dl2" runat="server" OnItemCommand="command2" >
                
                <SelectedItemTemplate>
                  
                </SelectedItemTemplate>
                
                <ItemTemplate>
                    <asp:LinkButton runat="server" Text='<%#Container.DataItem(0)%>' CommandName="in" />
                </ItemTemplate>
            
            </asp:DataList>
            
    </SelectedItemTemplate>
    
    <ItemTemplate>
        <asp:LinkButton runat="server" Text='<%#Container.DataItem(0)%>' />
    </ItemTemplate>
    
    </asp:DataList>

men det är ju synd att säga att det här fungerar speciellt bra:


Sub test(ByVal obj As Object, ByVal e As DataListItemEventArgs)
    If e.Item.ItemType = ListItemType.SelectedItem Then
        Dim dl2 As DataList = CType(Page.FindControl("dl2"), DataList)
        dl2.SelectedIndex = e.Item.ItemIndex
    end if
End sub
stolpskottetMedlem sedan mars 200527 inlägg
#6

Jaha, ska vi då konstatera att det är omöjligt att ställa selectedindex för en datalist i en annan?

129 ms totalt · 3 externa anrop · v20260731065814-full.fb544a5a
0 ms — hämta forumlista (cache)
0 ms — hämta statistik (cache)
124 ms — hämta tråd, inlägg och bilagor (db)