【问题标题】:C# Map .net DataTable to TemplateEngine Docx Word TableC# 将 .net DataTable 映射到 TemplateEngine Docx Word 表
【发布时间】:2017-07-20 12:49:21
【问题描述】:

我正在使用TemplateEngine.Docx,用于生成Word docx的模板引擎

我正在尝试将 DataTable 结果映射到 Word 文档表,下面的代码 sn-p 是通过硬编码来实现的

var valuesToFill = new Content(
   // Add table.
   new TableContent("Team Members Table")
   .AddRow(
     new FieldContent("Name", "Eric"),
     new FieldContent("Role", "Program Manager"))
   .AddRow(
     new FieldContent("Name", "Bob"),
     new FieldContent("Role", "Developer")),
   // Add field inside table that not to propagate.
     new FieldContent("Count", "2")
);

我尝试了下面的代码,但我无法弄清楚,

DataTable dt = new DataTable();
        dt.Clear();
        dt.Columns.Add("SOE_DT");
        dt.Columns.Add("SOE_TM");
        dt.Columns.Add("SOE_EV"); 

        dt.Rows.Add(new object[] { "19/07/2017", "16:00", "This is First Event" });
        dt.Rows.Add(new object[] { "19/07/2017", "16:30", "This is Second Event" });
        dt.Rows.Add(new object[] { "19/07/2017", "17:00", "This is Third Event" });
        dt.Rows.Add(new object[] { "19/07/2017", "18:00", "This is Fourth Event" });

TableContent tblSEQOfEvents = new TableContent("SEQOfEvents");
foreach (DataRow dtRow in dt.Rows)
        {
  //I Need to Add here tblSEQOfEvents.AddRow
            foreach (DataColumn dc in dt.Columns)
            {
                tblSEQOfEvents.AddRow(
                    new FieldContent(dc.ColumnName, dtRow[dc].ToString()
                    ));
            }
        }

结果显示在图像中。我知道,因为对于每个列循环,它循环 12 次而不是 4 次,如果有人帮助我纠正它,我只会显示剪断。 谢谢

更新 1

by This Stackoverflow Q/A 我可以通过以下代码完成它,是正确的方法还是我可以改进?

foreach (DataRow dtRow in dt.Rows)
        {
            string SOE_DT = dtRow["SOE_DT"].ToString();
            string SOE_TM = dtRow["SOE_TM"].ToString();
            string SOE_EV = dtRow["SOE_EV"].ToString();

            tblSEQOfEvents.AddRow(
                    new FieldContent("SOE_DT", SOE_DT),
                    new FieldContent("SOE_TM", SOE_TM),
                    new FieldContent("SOE_EV", SOE_EV)
                    );

        }

【问题讨论】:

  • 你问的问题是什么?你想达到什么目的?我看到“我正在尝试将 DataTable 结果映射到 Word 文档表”,但这实际上并没有告诉我们您正在寻找什么结果。尝试包含一个您期望的结果示例。
  • 感谢 cmets,第一个代码 sn-p 显示了如何使用模板在 Word 文档中设置表的值,我提到了我正在使用的 URL,即github.com/UNIT6-open/TemplateEngine.Docx 我希望手动编码通过使用 c# .Net DataTable 来完成,我展示了我使用的代码以及 Result Desired 结果的图片只显示了四行,因为示例数据表有四行

标签: c#


【解决方案1】:

TableContent.AddRow 接受 IContentItem[]..

可能是这样的..

        foreach (DataRow dtRow in dt.Rows)
        {
            //I Need to Add here tblSEQOfEvents.AddRow
            List<IContentItem> items = new List<IContentItem>();
            foreach (DataColumn dc in dt.Columns)
            {
                items.Add(new FieldContent(dc.ColumnName, dtRow[dc].ToString()));
            }
            tblSEQOfEvents.AddRow(items.ToArray());
        }

【讨论】:

  • 完美,像魅力一样工作非常感谢您
猜你喜欢
  • 1970-01-01
  • 2018-03-19
  • 1970-01-01
  • 2012-10-29
  • 2013-07-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多