【发布时间】:2015-03-16 11:34:29
【问题描述】:
我有一个 xml 文件,我正在访问该文件以创建项目所用时间的报告。我将唯一日期返回到在 winform 上动态创建的标签,并希望编译每个唯一日期在项目上花费的时间。我已经能够退回每个日期下的所有项目或仅一个项目。目前我坚持只返回一个项目。谁能帮帮我吗??如果数据正确,这就是数据的样子。
04/11/15
26820 2.25
27111 8.00
04/12/15
26820 8.00
04/13/15
01det 4.33
26820 1.33
27225 4.25
etc.
这就是我检索数据的方式
string[] weekDateString = elementDateWeekstring();
string[] uniqueDates = null;
string[] weeklyJobNumber = elementJobNumWeek();
string[] weeklyTicks = elementTicksWeek();
这就是我获取唯一日期的方式。
IEnumerable<string> distinctWeekDateIE = weekDateString.Distinct();
foreach (string d in distinctWeekDateIE)
{
uniqueDates = distinctWeekDateIE.ToArray();
}
这就是我创建标签的方式。
try
{
int dateCount;
dateCount = uniqueDates.Length;
Label[] lblDate = new Label[dateCount];
int htDate = 1;
int padDate = 10;
for (int i = 0; i < dateCount; i++ )
{
lblDate[i] = new Label();
lblDate[i].Name = uniqueDates[i].Trim('\r');
lblDate[i].Text = uniqueDates[i];
lblDate[i].TabIndex = i;
lblDate[i].Bounds = new Rectangle(18, 275 + padDate + htDate, 75, 22);
targetForm.Controls.Add(lblDate[i]);
htDate += 22;
foreach (string x in uniqueDates)
{
int[] posJobNumber;
posJobNumber = weekDateString.Select((b, a) => b == uniqueDates[i].ToString() ? a : -1).Where(a => a != -1).ToArray();
for (int pjn = 0; pjn < posJobNumber.Length; pjn++)
{
if (x.Equals(lblDate[i].Text))
{
Label lblJobNum = new Label();
int htJobNum = 1;
int padJobNum = 10;
lblJobNum.Name = weeklyJobNumber[i];
lblJobNum.Text = weeklyJobNumber[i];
lblJobNum.Bounds = new Rectangle(100, 295 + padJobNum + htJobNum, 75, 22);
targetForm.Controls.Add(lblJobNum);
htJobNum += 22;
htDate += 22;
padJobNum += 22;
}
}
}
}
}
我已经坚持了大约 3 个月。有没有人可以向我描述为什么我无法正确检索与特定日期相关的工作编号。我不相信这些是专门作为日期返回的。只是一个看起来像日期的字符串。
我非常感谢我能得到的任何帮助。我完全感到困惑。感谢您提前回复。我非常感谢您的帮助。
编辑:@Sayka - 这是 xml 示例。
<?xml version="1.0" encoding="utf-8"?>
<Form1>
<Name Key="4/21/2014 6:51:17 AM">
<Date>4/21/2014</Date>
<JobNum>26820</JobNum>
<RevNum>00000</RevNum>
<Task>Modeling Secondary</Task>
<Start>06:51 AM</Start>
<End>04:27 PM</End>
<TotalTime>345945089017</TotalTime>
</Name>
<Name Key="4/22/2014 5:44:22 AM">
<Date>4/22/2014</Date>
<JobNum>26820</JobNum>
<RevNum>00000</RevNum>
<Task>Modeling Secondary</Task>
<Start>05:44 AM</Start>
<End>06:56 AM</End>
<TotalTime>43514201221</TotalTime>
</Name>
<Name Key="4/22/2014 6:57:02 AM">
<Date>4/22/2014</Date>
<JobNum>02e-n-g</JobNum>
<RevNum>00000</RevNum>
<Task>NET Eng</Task>
<Start>06:57 AM</Start>
<End>07:16 AM</End>
<TotalTime>11706118875</TotalTime>
</Name>
....
</Form1>
这就是我从 xml 文件中获取信息并返回字符串 [] 的方式。
public static string[] elementDateWeekstring()
{
//string datetxtWeek = "";
XmlDocument xmldoc = new XmlDocument();
fileExistsWeek(xmldoc);
XmlNodeList nodeDate = xmldoc.GetElementsByTagName("Date");
int countTicks = 0;
string[] dateTxtWeek = new string[nodeDate.Count];
for (int i = 0; i < nodeDate.Count; i++)
{
dateTxtWeek[i] = nodeDate[i].InnerText;
countTicks++;
}
return dateTxtWeek;
}
Job number 和 Ticks 以类似的方式返回。我已经能够在整个代码中重用这些 sn-ps。这是一个一维的xml文件??它将始终返回与日期或刻度相等的工作编号的位置。我永远不会有更多或更少的任何一种元素。
【问题讨论】:
-
你使用调试器了吗?断点?单步执行您的代码?将预期值与实际值进行比较?第一个不匹配在哪里?首先出错的是什么?它究竟发生在哪里?为什么?
-
在 posJobNumber = ... 的 'foreach()' 中。它返回与第一个日期匹配的第一个作业编号,然后继续循环。就好像它在那个语句中没有增加。我不明白(我认为)这个 LINQ 语句??我想这就是所谓的。我最初试图返回 .IndexOf 但我无法只返回那些成功匹配日期的。
-
你怎么会用不懂的LINQ语句?将其编码为显式循环,看看是否效果更好。
-
嗯,这听起来像是我必须做的。我会回到IndexOf。我认为它想吸收所有元素,而不仅仅是匹配的元素。感谢您的建议@DrKoch。我很感激:-D
-
怎么能把Label的名字,一个数字?
标签: c# winforms dynamic labels