XML节点innerText使用C#在dataGridView单元格值中加载两次

时间:2014-05-07 07:53:28

标签: c# datagridview

我尝试使用C#向dataGridView单元格添加一些值。我每周都有一个专栏(周一至周日)。为此,我使用此代码:

xdoc.Load(Properties.Settings.Default.TaskPlannerXmlPath);

foreach (XmlNode task in xdoc.SelectNodes("/tasks/task"))
{
    string date = task["taskDate"].InnerText;
    string day = date.Substring(0, date.IndexOf(","));

    for (int w = 0; w < timeTableGridView.Columns.Count; w++)
    {
        string colName = timeTableGridView.Columns[w].Name;

        if (colName == day)
        {
            timeTableGridView.Rows.AddNew();

            for (int ew = 0; ew < timeTableGridView.Rows.Count; ew++)
            {
                timeTableGridView.Rows[ew].Cells[colName].Value = task["taskName"].InnerText;
            }
        }
    }
}

我读取了一个XML文件以获取InnerText。我的XML看起来像这样:

<?xml version="1.0" encoding="utf-8"?>
<tasks>
  <task>
    <taskName>test shutdown</taskName>
    <taskDate>Friday, 2. May 2014</taskDate>
    <taskTime>00:00</taskTime>
    <taskType>Shutdown</taskType>
  </task>

  <task>
    <taskName>test start</taskName>
    <taskDate>Sunday, 4. May 2014</taskDate>
    <taskTime>12:00</taskTime>
    <taskType>Wake Up</taskType>
  </task>
</tasks>

所以现在它应该添加到列#34;星期五&#34;文本&#34;测试关闭&#34;在#34;星期日&#34;它应该添加&#34;测试开始&#34;。但它并没有。它增加了&#34;测试关机&#34;在专栏#34;星期五&#34;然后它添加&#34;测试开始&#34;第二列&#34;星期日&#34;。

我只是没有摆脱它。

有什么建议吗? :)

2 个答案:

答案 0 :(得分:1)

那是因为你的循环

for (int w = 0; w < timeTableGridView.Columns.Count; w++)

遍历每周的每一天。如果其中一个与你从xml中获得的那个相同(这将永远发生),你是否正在添加一个新行(代表什么?)然后在每个行中存在你在一个任务中设置任务一天。

我认为您在理解数据网格视图中的内容和方式时可能会遇到一些问题。现在数据是多余的,因为具有7列的行将始终仅使用其中的1列,而所有其他列将为空。

修改

问题是:您不能以这种方式在数据网格视图中表示日历(它可行,但此时它太难了)。假设你想要做某种调度程序,你的列应该是

任务名称,日期,时间和类型

然后xml中的每个任务都应该作为一行加载。

答案 1 :(得分:0)

根据您的示例,当您到达星期日时,您已经通过调用timeTableGridView.Rows.AddNew创建了两行(一个用于星期一,另一个用于星期日)。以下循环在&#34;星期日&#34;列,但迭代两次,因为有两行:

for (int ew = 0; ew < timeTableGridView.Rows.Count; ew++)