InfoPath 2010: проблема с программным добавлением строк в повторяющуюся таблицу/раздел, вложенный в повторяющуюся таблицу

У меня есть повторяющаяся таблица, вложенная в повторяющуюся таблицу. Вложенная таблица содержит 5 столбцов, 1 для года, 4 для разных кварталов (финансовых). Мне нужно динамически добавлять строки во вложенную таблицу, если проект длился дольше одного года. Итак, если бы проект длился 2 года, мне нужно было бы добавить 2 строки во вложенную таблицу и заполнить ее данными, если бы он длился 3 года, мне нужно было бы добавить 3 и т. д.

Я не могу заставить вложенную таблицу заполнить какие-либо данные. Я использую цикл с внешним 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();
        }
    }

person stayinwett    schedule 10.01.2012    source источник


Ответы (1)


Попробуй это. Единственная разница в том, что второй блок использования находится за пределами первого блока использования.

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();
        }
}
person Tang    schedule 10.05.2012
comment
Спасибо за ответ, оглядываясь назад, немного поработав с ним, я вижу очевидную ошибку, которую совершил. В итоге я пошел другим путем и построил полный XML-код строки и добавил его таким образом. - person stayinwett; 03.06.2012