webForumDet fria alternativet

Hjälp - Child Repeater

.NETur .NET

1 svar · 265 visningar · startad av Nson

Medlem sedan juni 2001145 inlägg
Frågan#1

Har massivt problem med att få följande enkla sak att fungera.

<asp:DataList id="parentDataList" runat="server" DataKeyField="categoryid" OnItemDataBound="DataBind_childRepeater">
					<ItemTemplate>
						<b>
							<%# DataBinder.Eval(Container.DataItem, "categoryname") %>
						</b>
						<br>
						<asp:Repeater runat="server" ID="childRepeater" >
							<ItemTemplate>
								<%# DataBinder.Eval(Container.DataItem, "directoryname") %>
								,
							</ItemTemplate>
						</asp:Repeater>
					</ItemTemplate>
				</asp:DataList>

aspx.vb sidan:

    Private Sub Page_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        'Put user code to initialize the page here

        Dim sqlParant As New SqlClient.SqlCommand

        sqlParant.CommandText = "SELECT * FROM [dbo].[web.categorys]"

        sqlParant.CommandType = CommandType.Text

        Dim dsParent As DataSet = sqllib.DataSet(sqlParant)

        parentDataList.DataSource = dsParent

        parentDataList.DataBind()
    End Sub

    Public Sub DataBind_childRepeater(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.DataListItemEventArgs)

        Dim sqlChild As New SqlClient.SqlCommand

        Dim sqltxt As String = "SELECT * FROM [dbo].[web.categorys] WHERE categoryid='{category_id}'"

        Replace(sqltxt, "{category_id}", parentDataList.DataKeys(parentDataList.SelectedIndex).ToString)

        Dim sql As New SqlClient.SqlCommand

        sql.CommandText = sqltxt

        sql.CommandType = CommandType.Text

        Dim tmpRepeater As Repeater = CType(e.Item.FindControl("childRepeater"), Repeater)

        tmpRepeater.DataSource = sqllib.DataRead(sql)

        tmpRepeater.DataBind()

    End Sub

Får hela tiden felet:

Index was out of range. Must be non-negative and less than the size of the collection. Parameter name: index

Hjälp :q

Medlem sedan juni 2001145 inlägg
#2

Löste det hela genom att:

 Public Sub DataBind_childRepeater(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.DataListItemEventArgs)

        Dim sqlChild As New SqlClient.SqlCommand

        Dim sqltxt As String = "SELECT * FROM [dbo].[web.directorys] WHERE categoryid='{category_id}'"

        Dim key As Integer = CInt(parentDataList.DataKeys(e.Item.ItemIndex))
        
        Dim sql As New SqlClient.SqlCommand

        Dim sqlComText As String = Replace(sqltxt, "{category_id}", key).ToString

        sql.CommandText = sqlComText

        sql.CommandType = CommandType.Text

        Dim tmpRepeater As Repeater = CType(e.Item.FindControl("childRepeater"), Repeater)

        tmpRepeater.DataSource = sqllib.DataRead(sql)

        tmpRepeater.DataBind()

    End Sub
131 ms totalt · 3 externa anrop · v20260731065814-full.b746b907
0 ms — hämta forumlista (cache)
0 ms — hämta statistik (cache)
128 ms — hämta tråd, inlägg och bilagor (db)