Problemer med xml og nestede repeaters
Hej er rimelig ny til xml og nestede repeaters. Jeg har en xml fil der ser såen herud,<Tours date="25-09-2015">
<Tour>
<Subnoder>data</Subnoder>
</Tour>
</Tours>
<Tours date="25-09-2015">
<Tour>
<Subnoder>data</Subnoder>
</Tour>
</Tours>
jeg prøver så at binde dem i asp repeater
hvor jeg har en overordent repeater hvor jeg bruger date som header, og der under prøver jeg at binde hver enkelt tour så de subnoder der passer til dem, bliver vist under hver date. Mit problem er at den tager alle tour hver gang i min foreach loop.
min asp side
<asp:Repeater runat="server" ID="CategoryRepeater">
<ItemTemplate>
<h3><%# DataBinder.Eval(Container.DataItem, "date") %></h3>
<div style="padding: 10px;" class="panel-body accordion">
<asp:Repeater ID="childRepeater" runat="server">
<ItemTemplate>
<h3 style="padding: 3px;"><%#Eval("Header_Tour")%> </h3>
<table class="table table-responsive">
<tr>
<td>Opsamlings dato:<%#Eval("PickUpDate")%> </td>
<td></td>
</tr>
</table>
</ItemTemplate>
</asp:Repeater>
</div>
</ItemTemplate>
</asp:Repeater>
og min C# side
private void Page_Load(object sender, System.EventArgs e)
{
DataSet ds = new DataSet();
ds.ReadXml(MapPath("./xmlFiler/DriverListResponse.xml"));
CategoryRepeater.DataSource = ds;
CategoryRepeater.DataBind();
}
override protected void OnInit(EventArgs e)
{
InitializeComponent();
base.OnInit(e);
}
private void InitializeComponent()
{
this.CategoryRepeater.ItemDataBound += new System.Web.UI.WebControls.RepeaterItemEventHandler(this.CategoryRepeater_ItemDataBound);
this.Load += new System.EventHandler(this.Page_Load);
}
public DataTable createDataTable()
{
XmlDocument doc = new XmlDocument();
string xmlFile = Server.MapPath("./xmlFiler/DriverListResponse.xml");
doc.Load(xmlFile);
DataTable dt = new DataTable();
DataColumn dc = new DataColumn();
dc = new DataColumn();
dc.ColumnName = "Header_Tour";
dc.DataType = typeof(string);
dt.Columns.Add(dc);
dc = new DataColumn();
dc.ColumnName = "PickUpDate";
dc.DataType = typeof(string);
dt.Columns.Add(dc);
XmlElement root = doc.DocumentElement;
if (!(root == null))
{
try
{
XmlNodeList nodes = root.SelectNodes("//Tours/Tour");
foreach (XmlNode tours in nodes)
{
XmlNode strHeader = tours.SelectSingleNode("Header_Tour");
XmlNode strPickUpdate = tours.SelectSingleNode("PickUpDate");
dt.Rows.Add(new object[] { strHeader.InnerText, strPickUpdate.InnerText });
}
}
catch (Exception ex)
{
Response.Write(ex);
}
}
return dt;
}
private void CategoryRepeater_ItemDataBound(object sender, System.Web.UI.WebControls.RepeaterItemEventArgs e)
{
RepeaterItem item = e.Item;
if ((item.ItemType == ListItemType.Item) ||
(item.ItemType == ListItemType.AlternatingItem))
{
childRepeater = (Repeater)item.FindControl("childRepeater");
childRepeater.DataSource = createDataTable();
childRepeater.DataBind();
}
}