Avatar billede MartinLauritsen Nybegynder
14. oktober 2015 - 12:04

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();
        }
    }
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester