Вложенные репитеры из базы данных MySQL с использованием OdbcDataReader в ASP.NET 2.0
Я задал этот вопрос некоторое время назад, но не получил ответа, с тех пор я был занят другими делами, но вернулся к нему сегодня и до сих пор не могу его взломать.
Мой оригинальный вопрос: https://stackru.com/questions/11868289/using-a-one-to-many-relationship-to-show-a-category-menu-using-asp-repeaters-vb
Теперь, с тех пор я пытаюсь понять, что я делаю неправильно, когда пытаюсь следовать этой статье http://www.codeproject.com/Articles/6140/A-quick-guide-to-using-nested-repeaters-in-ASP-NET и различные учебники Microsfot
Я думаю, что упускаю шаг или неправильно что-то понимаю с заполнением набора данных... и теперь, проведя это утро, ходя кругами, я запутался до чертиков.
Это доводит меня до стены.
Я получил это далеко: (я использую ASP.NET 2.0 и базу данных MySQL, кстати)
Sub getCategories() Handles Me.Load
Dim DBConnection = ConfigurationManager.ConnectionStrings("dbConnNew").ConnectionString
Dim connection As OdbcConnection = New OdbcConnection(DBConnection)
Dim connect As New OdbcCommand("SELECT masterCat.name AS masterCat, masterCat.id as mcId, category.id as cId, category.name AS category, category.mapsTo as catMapsTo, subCat.mapsTo as subCatMapsTo, subCat.name AS subCat FROM masterCat INNER JOIN category ON masterCat.id = category.mapsTo INNER JOIN subCat ON category.id = subCat.mapsTo WHERE masterCat.id <> '9' ORDER BY masterCat.priority", connection)
Dim DS As New DataSet()
connection.Open()
Dim read As OdbcDataReader = connect.ExecuteReader(CommandBehavior.CloseConnection)
DS.Load(read, LoadOption.OverwriteChanges, "masterCat, category, subCat")
'DS.Relations.Add("mCatid", DS.Tables("masterCat").Columns("mcId"), DS.Tables("category").Columns("cId")) << This Line Breaks
connection.Close()
masterCat.DataSource = DS
masterCat.DataBind()
End Sub
Private Sub CategoryRepeater_ItemDataBound(sender As Object, e As System.Web.UI.WebControls.RepeaterItemEventArgs) Handles masterCat.ItemDataBound
Dim item As RepeaterItem = e.Item
If (item.ItemType = ListItemType.Item) OrElse (item.ItemType = ListItemType.AlternatingItem) Then
Dim catRpt = DirectCast(item.FindControl("catRepeater"), Repeater)
Dim drv As DataRowView = DirectCast(item.DataItem, DataRowView)
catRpt.DataSource = drv.CreateChildView("mcId")
catRpt.DataBind()
End If
End Sub
И разметка:
<ul>
<asp:Repeater ID="masterCat" runat="server">
<ItemTemplate>
<li>
<%# Container.DataItem("masterCat")%>
<ul>
<asp:Repeater ID="catRepeater" runat="server">
<ItemTemplate>
<li>
<%# Container.DataItem("category")%>
</li>
</ItemTemplate>
</asp:Repeater>
</ul>
</li>
</ItemTemplate>
</asp:Repeater>
</ul>
Напомним, я пытаюсь создать вложенный повторитель основных категорий, категорий и подкатегорий. Приведенный выше код просто идет двумя шагами, я думаю, третий должен быть просто повторением.
Мои данные расположены в трех таблицах, которые выглядят так
masterCat
id | name | priority (for sorting)
category
id | name | mapsTo (this is the ID of the masterCat to which this relates)
subCat
id | name | mapsTo (ID of the category to which this relates)
Вышеуказанный SQL-запрос корректно возвращает все данные с этими столбцами:
masterCat - name of the master category
mcId - ID of the master category
cId - ID of a category
category - name of a category
catMapsTo - the ID of the masterCategory to which category relates
subCat - subCategory name
subCatMapsTo - the ID of the category to which the subCategory relates
В итоге мне нужно что-то похожее (в этом примере всего два уровня)
- Мастер Кэт
- категория
- категория
- категория
- Мастер Кэт
- категория
- категория
- категория
- Мастер Кэт
- категория
- категория
- категория
</li>
Помощь будет высоко ценится!