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



我尝试使用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>

所以现在它应该在"Friday"列中添加文本"test shutdown",在"Sunday"列中添加文本"test start"。但事实并非如此。它在"Friday"列中添加了"test shutdown",然后在"Sunday"列中添加了两次"test start"。

我只是没有摆脱它。

有什么建议吗?:)

这是因为你的循环

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

迭代一周中的每一天。如果其中一个与您从xml中获得的相同(这总是会发生),您将添加一个新行(这将代表什么?),然后为每一行存在您在给定的一天设置任务。

我想你可能在理解在你的datagridview中表示什么和如何表示方面有一些问题。现在数据是冗余的,因为有7列的行总是只使用其中的1列,而所有其他的都是空的。

编辑:

问题是:你不能用这种方式在datagridview中表示日历(这是可行的,但在这一点上太困难了)。假设您想要执行某种调度器,您的列应该是

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

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

根据您的示例,到周日时,您已经通过调用timeTableGridView.Rows.AddNew创建了两行(一个用于周一,另一个用于周日)。下面的循环对"sunday"列进行操作,但迭代两次,因为有两行:

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

最新更新