2017-08-29 44 views
0

我需要使用datatable在gridview中顯示我的xml。 我的XML由這樣:基於自定義XML節點填充數據表

Click here to see the XML

現在我得到的數據以這樣的方式

   XmlDocument doc = new XmlDocument(); 
      doc.Load(@"path\MyXml.xml"); //Percorso file xml 

      DataTable dt = new DataTable(); 
      foreach (XmlNode xns in doc.SelectSingleNode("Settembre")) 
      { 
        string tagName = xns.Name; 
        if (!dt.Columns.Contains(tagName)) 
        { 
         dt.Columns.Add(tagName); 
        } 

      } 

與I基礎上的子標籤添加我的專欄的這部分代碼「Settembre」(例如「ven_01」),這是有效的。

然後我寫的東西(「塞滕佈雷」的子標籤的子標籤的innerText屬性,如「Mattina_Turno_1」在「ven_01」)進入細胞以這種方式

 DataRow dr = dt.NewRow(); 
      foreach (XmlNode xns in doc.SelectSingleNode("Settembre")) 
      { 
        dr[xns.Name] = xns.InnerText; 
      } 
      dt.Rows.Add(dr); 

      GridView1.DataSource = dt; 
      GridView1.DataBind(); 

而這個作品但我想要做的是顯示由innerText的父節點構成的第一列作爲每行的第一列第一個單元格中的行名稱(它們的最大值是3,更好地解釋標籤是「Mattina_Turno1」,「 Mattina_Turno_2「和」Pomeriggio「,裏面可以有一些innerText)

這是我試圖做一段時間。 此外,由於行名只有3,列名可以多於3我想要恢復它們,所以,如果可能的話,在列標題中顯示行名稱(所以「Mattina_Turno1」,「Mattina_Turno_2 「和」Pomeriggio「)以及行命名爲」Settembre「子標籤(例如」ven_01「)。

我希望我讓我理解

請不要因爲我在網上搜索了很多,並沒有找到一個解決辦法標記爲複製,從而複製,請不要downvote和標誌,其實不然。

回答

0

我找到了解決方法做這個:

   DataTable dt = new DataTable(); 
      dt.Columns.Add("Data"); 
      foreach (XmlNode xns in doc.DocumentElement) 
      { 
       if (xns.Name == "Settembre") ///IMPLEMENTARE SELEZIONE AUTOMATICA DEL MESE IMPORTANTE!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! 

        foreach (XmlNode xn in xns) 
        { 
         string tagName = xn.Name; 
         var a = dt.Rows.Add(tagName); 
        // int index_of_a = dt.Rows.IndexOf(a); 

        } 
      } 
      dt.Columns.Add("Mattina Turno 1"); 
      dt.Columns.Add("Mattina Turno 2"); 
      dt.Columns.Add("Pomeriggio"); 


      expo_days.DataSource = dt; 
      expo_days.DataBind(); 

      foreach (XmlNode xns in doc.DocumentElement) 
      { 
       if (xns.Name == "Settembre") ///IMPLEMENTARE SELEZIONE AUTOMATICA DEL MESE IMPORTANTE!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! 

        foreach (XmlNode xn in xns) 
        { 
         string tagName = xn.Name; 
         var a = dt.Rows.Add(tagName); 
         // int index_of_a = dt.Rows.IndexOf(a); 
         DataRow[] rows = dt.Select("Data = '"+tagName+"'"); 

         foreach (XmlNode xna in xn) 
         { //sistemare le celle in base alla colonna della gridview 
          if(xna.Name == "Mattina_Turno_1") //here i specify in wich column is the "Mattina_Turno_1" and fill in that cell, and so on 
          expo_days.Rows[dt.Rows.IndexOf(rows[0])].Cells[3].Text = xna.InnerText; 
          if (xna.Name == "Mattina_Turno_2") 
           expo_days.Rows[dt.Rows.IndexOf(rows[0])].Cells[4].Text = xna.InnerText; 
          if (xna.Name == "Pomeriggio") 
           expo_days.Rows[dt.Rows.IndexOf(rows[0])].Cells[5].Text = xna.InnerText; 

         } 


        } 
      }