23. august 2003 - 13:40
Der er
1 kommentar og
1 løsning
Nested repeater
Jeg har et problem med en repeater, som skal vise ordrer og ordrelinier for hver ordre... Problemet er at alle ordrelinier i databasen vises under hver ordre og altså ikke kun under den ordre, de faktisk hører til... Her er lidt kode:
<asp:repeater id="repOrders" runat="server">
<ItemTemplate>
<tr>
<td width="70">
<asp:Label ID="lblOrderId" Text='<%# DataBinder.Eval(Container.DataItem, "OrderId")%>' Runat=server />
</td>
<td>
<a href='Customers.aspx?CustomerId=<%# DataBinder.Eval(Container.DataItem, "CustomerId")%>' class="txtlink">
<asp:Label ID="lblProductName" Text='<%# DataBinder.Eval(Container.DataItem, "ShipTo")%>' Runat=server /></a>
</td>
<td width="20">
<a href='DeleteProduct.aspx?ProductId=<%# DataBinder.Eval(Container.DataItem, "OrderId")%>'>
<img src="graphics/delete.gif" border="0" alt="Slet produkt"></a>
</td>
<td width="20">
<a href='EditProduct.aspx?ProductId=<%# DataBinder.Eval(Container.DataItem, "OrderId")%>'>
<img src="graphics/edit.gif" border="0" alt="Rediger produkt"></a>
</td>
</tr>
<asp:Repeater ID="repItems" runat="server">
<ItemTemplate>
<tr>
<td width="70">
<asp:Label ID="Label1" Text='<%# DataBinder.Eval(Container.DataItem, "OrderItemId")%>' Runat=server />
</td>
<td>
<a href='Customers.aspx?CustomerId=<%# DataBinder.Eval(Container.DataItem, "OrderItemId")%>' class="txtlink">
<asp:Label ID="Label2" Text='<%# DataBinder.Eval(Container.DataItem, "OrderItemId")%>' Runat=server /></a>
</td>
<td width="20">
<a href='DeleteProduct.aspx?ProductId=<%# DataBinder.Eval(Container.DataItem, "OrderItemId")%>'>
<img src="graphics/delete.gif" border="0" alt="Slet produkt"></a>
</td>
<td width="20">
<a href='EditProduct.aspx?ProductId=<%# DataBinder.Eval(Container.DataItem, "OrderItemId")%>'>
<img src="graphics/edit.gif" border="0" alt="Rediger produkt"></a>
</td>
</tr>
</ItemTemplate>
</asp:Repeater>
</ItemTemplate>
</asp:repeater>
23. august 2003 - 13:41
#1
Imports System.Data
Imports System.Data.SqlClient
Imports shopAdmin.DataAccess
Public Class Orders
Inherits System.Web.UI.Page
Protected WithEvents Button1 As System.Web.UI.WebControls.Button
Protected WithEvents tbOrderId As System.Web.UI.WebControls.TextBox
Protected WithEvents repOrders As System.Web.UI.WebControls.Repeater
Protected WithEvents repItems As System.Web.UI.WebControls.Repeater
Protected WithEvents lblOrderId As System.Web.UI.WebControls.Label
Protected WithEvents ddlOrderStatus As System.Web.UI.WebControls.DropDownList
Dim intOrderId As Integer
Dim intOrderStatus As Integer
#Region " Web Form Designer Generated Code "
'This call is required by the Web Form Designer.
<System.Diagnostics.DebuggerStepThrough()> Private Sub InitializeComponent()
End Sub
Private Sub Page_Init(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Init
'CODEGEN: This method call is required by the Web Form Designer
'Do not modify it using the code editor.
InitializeComponent()
End Sub
#End Region
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
If Not Page.IsPostBack Then
Get_StatusCodes(-1)
End If
If tbOrderId.Text = "" Then
intOrderId = -1
Else
intOrderId = CInt(tbOrderId.Text)
End If
If ddlOrderStatus.SelectedItem.Value = "Alle" Then
intOrderStatus = -1
Else
intOrderStatus = CInt(ddlOrderStatus.SelectedItem.Value)
End If
BindData()
End Sub
Private Sub BindData()
repOrders.DataSource = Get_Orders(intOrderStatus, intOrderId).Tables("Orders")
repOrders.DataBind()
End Sub
Private Function Get_Orders(ByVal OrderStatus As Integer, ByVal OrderId As Integer) As DataSet
Dim DbConnect As New DataAccess.objDataAccess()
Dim dsOrderItems As New DataSet()
Dim dsOrders As New DataSet()
dsOrders = DbConnect.RunSPReturnDS("Select_Orders", "Orders", New SqlParameter("@OrderStatus", OrderStatus), New SqlParameter("@OrderId", OrderId))
dsOrderItems = DbConnect.RunSPReturnDS("Select_OrderItems", "OrderItems", New SqlParameter("@OrderStatus", OrderStatus), New SqlParameter("@OrderId", OrderId))
dsOrders.Merge(dsOrderItems)
dsOrders.Relations.Add("OrderRelation", dsOrders.Tables("Orders").Columns("OrderId"), dsOrders.Tables("orderItems").Columns("OrderId"))
Get_Orders = dsOrders
End Function
Private Sub Get_StatusCodes(ByVal StatusCode)
Dim DbConnect As New DataAccess.objDataAccess()
Dim ds As New DataSet()
ds = DbConnect.RunSPReturnDS("Select_StatusCodes", "OrderStatusCodes", New SqlParameter("@StatusCode", StatusCode))
ddlOrderStatus.DataSource = ds
ddlOrderStatus.DataTextField = "Description"
ddlOrderStatus.DataValueField = "StatusCode"
ddlOrderStatus.DataBind()
ddlOrderStatus.Items.Insert(0, "Alle")
ddlOrderStatus.SelectedIndex = 0
End Sub
Private Sub repOrders_ItemDataBound(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.RepeaterItemEventArgs) Handles repOrders.ItemDataBound
'her
Dim repOrderItems As New Repeater()
repOrderItems = CType(e.Item.FindControl("repItems"), Repeater)
repOrderItems.DataSource = Get_Orders(intOrderStatus, intOrderId).Tables("OrderItems")
repOrderItems.DataBind()
'orderLinesRepeater.DataSource = dsOrders
'BindData()
End Sub
End Class