Циклическое прохождение через datalist ASP.NET
Я использую datalist для отображения результатов поиска, например, я извлекаю этот образец полей в этот образ
Я извлекаю имя и описание, используя [Text='<%# Eval("field") %>'] в соответствующих метках, а также извлекаю категорию и пользователя, используя код позади них
Это прекрасно работает только для первого элемента, как вы видите, но остальная часть элемента показывает пробелы. Причина использования этого подхода заключается в том, что я храню значения пользователя и категорий в виде внешних ключей (идентификаторов) в разных таблицах, отличных от той, к которой я привязываю datalist, и хочу отображать тексты вместо идентификаторов в результатах поиска. Как я могу сделать так, чтобы эти две метки (категория и пользователь) были заполнены таким же образом, как и те, что имеют Eval.
P. S. Все четыре метки в одном &ЛТ;свойства itemtemplate&ГТ;
Что я уже пробовал:
For row = 0 To rowcount - 1 idd = dt1.Rows(row)(0) DetailsAdapter2 = New SqlDataAdapter(" select Category.subcategory, Users.username from [Category] JOIN [LostItem] ON (Category.CategoryID = LostItem.CategoryID) JOIN [Users] ON (LostItem.[User] = Users.[userid] ) WHERE (LostItem.LostId=" & idd & " ) ", con) Dim dt2 As New DataTable DetailsAdapter2.Fill(dt2) Dim rowcount1 As Integer = dt2.Rows.Count For row1 = 0 To rowcount1 - 1 Dim CategoryLabel As Label = DirectCast(DataList1.Items(0).FindControl("CategoryLabel"), Label) CategoryLabel.Text = DirectCast(dt2.Rows(row1)(0), String) Dim UserLabel As Label = DirectCast(DataList1.Items(0).FindControl("UserLabel"), Label) UserLabel.Text = DirectCast(dt2.Rows(row1)(1), String) Next Next
полный код:
< Dim command As SqlDataAdapter command = New SqlDataAdapter("select * FROM Lostitem WHERE city=@city AND datelost=@datelost AND (name Like '%' + @name + '%' OR name Like '%' + '""' + '%') ", con) Dim ide2 As Integer = ddlCities.SelectedValue command.SelectCommand.Parameters.AddWithValue("@City", ide2) command.SelectCommand.Parameters.AddWithValue("@datelost", TextBox1.Text) command.SelectCommand.Parameters.AddWithValue("@name", TextBox2.Text) Dim DetailsAdapter2 As SqlDataAdapter Dim dt1 As New DataTable command.Fill(dt1) DataList1.DataSource = dt1 DataList1.DataBind() If Not Me.Page.User.Identity.IsAuthenticated Then Dim ClaimButton As Button = DirectCast(DataList1.Items(0).FindControl("ClaimButton"), Button) ClaimButton.Visible = False End If Dim rowcount As Integer = dt1.Rows.Count Dim idd As Integer For row = 0 To rowcount - 1 idd = dt1.Rows(row)(0) DetailsAdapter2 = New SqlDataAdapter(" select Category.subcategory, Users.username from [Category] JOIN [LostItem] ON (Category.CategoryID = LostItem.CategoryID) JOIN [Users] ON (LostItem.[User] = Users.[userid] ) WHERE (LostItem.LostId=" & idd & " ) ", con) Dim dt2 As New DataTable DetailsAdapter2.Fill(dt2) Dim rowcount1 As Integer = dt2.Rows.Count For row1 = 0 To rowcount1 - 1 Dim CategoryLabel As Label = DirectCast(DataList1.Items(0).FindControl("CategoryLabel"), Label) CategoryLabel.Text = DirectCast(dt2.Rows(row1)(0), String) Dim UserLabel As Label = DirectCast(DataList1.Items(0).FindControl("UserLabel"), Label) UserLabel.Text = DirectCast(dt2.Rows(row1)(1), String) Next Next