webForumDet fria alternativet
Logga in / Bli medlem

datalist i datalist?

.NET

5 svar · 435 visningar · startad av stolpskottet

Medlem sedan mars 200527 inlägg
Trådstart#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>
Medlem 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.

Medlem 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!

Medlem 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.

Medlem 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
Medlem 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?

263 ms totalt · 4 externa anrop · v20260731065814-full.51f67c91
119 ms — deklarationer (db)
0 ms — hämta statistik (cache)
141 ms — hämta tråd, inlägg och bilagor (db)
119 ms — ändringar (db)