2012-01-10 1 views
1

繰り返しテーブル内に繰り返しテーブルがネストされています。ネストした表には、5つの列があります.1つは1年、4つは異なる四半期(財務)です。プロジェクトが1年以上続く場合は、ネストした表に行を動的に追加する必要があります。したがって、プロジェクトが2年間続く場合は、入れ子になったテーブルに2行追加してデータで埋める必要があります.3年後に3などを追加する必要があります。InfoPath 2010:繰り返しテーブル内に入れ子になっている繰り返しテーブル/セクションに行をプログラムで追加するときに問題が発生する

ネストされた表にデータを移入させる。最初のテーブルには外側のXmlWriterを、ネストしたテーブルには入れ子になったXmlWriterを使用してループを使用しています。次にコード例を示します。

public void BuildHwSwForecastRow(string vendor, string description, string totalCost, XPathNavigator root) 
    { 
     string myNameSpace = NamespaceManager.LookupNamespace("my"); 

     using (XmlWriter writer = root.SelectSingleNode ("/my:myFields/my:HW_SW_Other_Forecast/my:Forecasts",NamespaceManager).AppendChild()) 
     { 
      writer.WriteStartElement("Forecast", myNameSpace); 
      writer.WriteElementString("HSOF-VendorName", myNameSpace, vendor); 
      writer.WriteElementString("HSOF-Description", myNameSpace, description); 
      writer.WriteElementString("HSOF-TotalCost", myNameSpace, totalCost); 

      using (XmlWriter insideWriter = root.SelectSingleNode("//my:HW_SW_Other_Forecast/my:Forecasts/my:Forecast/my:Quarterly_Breakdowns", NamespaceManager).AppendChild()) 
      { 
       insideWriter.WriteStartElement("Quarterly_Breakdown", myNameSpace); 
       insideWriter.WriteElementString("HSOF-Year", myNameSpace, "2011"); 
       insideWriter.WriteElementString("HSOF-Q1", myNameSpace, ""); 
       insideWriter.WriteElementString("HSOF-Q2", myNameSpace, ""); 
       insideWriter.WriteElementString("HSOF-Q3", myNameSpace, ""); 
       insideWriter.WriteElementString("HSOF-Q4", myNameSpace, ""); 
       insideWriter.WriteEndElement(); 
       insideWriter.Close(); 
      } 
      writer.WriteElementString("HSOF-Total", myNameSpace, "0.0"); 
      writer.WriteEndElement(); 
      writer.Close(); 
     } 
    } 

答えて

1

これを試してみてください。唯一の違いは、ブロックを使用する2番目のブロックが最初のブロックを使用していることです。

public void BuildHwSwForecastRow(string vendor, string description, string totalCost, XPathNavigator root) 
{ 
    string myNameSpace = NamespaceManager.LookupNamespace("my"); 

    using (XmlWriter writer = root.SelectSingleNode ("/my:myFields/my:HW_SW_Other_Forecast/my:Forecasts",NamespaceManager).AppendChild()) 
    { 
     writer.WriteStartElement("Forecast", myNameSpace); 
     writer.WriteElementString("HSOF-VendorName", myNameSpace, vendor); 
     writer.WriteElementString("HSOF-Description", myNameSpace, description); 
     writer.WriteElementString("HSOF-TotalCost", myNameSpace, totalCost); 


     writer.WriteElementString("HSOF-Total", myNameSpace, "0.0"); 
     writer.WriteEndElement(); 
     writer.Close(); 
    } 

    using (XmlWriter insideWriter = root.SelectSingleNode("//my:HW_SW_Other_Forecast/my:Forecasts/my:Forecast/my:Quarterly_Breakdowns", NamespaceManager).AppendChild()) 
     { 
      insideWriter.WriteStartElement("Quarterly_Breakdown", myNameSpace); 
      insideWriter.WriteElementString("HSOF-Year", myNameSpace, "2011"); 
      insideWriter.WriteElementString("HSOF-Q1", myNameSpace, ""); 
      insideWriter.WriteElementString("HSOF-Q2", myNameSpace, ""); 
      insideWriter.WriteElementString("HSOF-Q3", myNameSpace, ""); 
      insideWriter.WriteElementString("HSOF-Q4", myNameSpace, ""); 
      insideWriter.WriteEndElement(); 
      insideWriter.Close(); 
     } 
} 
+1

回答をいただきありがとうございます。私は明らかに間違いがありました。私は、別のルートに行き、完全な行のXMLを構築し、そのように追加しました。 – stayinwett

関連する問題