试图将一个循环的结果放入由另一个循环填充的数据网格中

时间:2016-12-14 18:29:59

标签: c# list datagridview

今天早些时候(在这里的帮助下)我们创建了以下代码。

var sLines = File.ReadAllLines("//dnc/WaterJet/MTI-WJ/" + cboPartProgram.Text)
                 .Where(s => !s.StartsWith("'") && s.Contains("S"))
                 .Select(s => new
                     {
                         SValue = Regex.Match(s, "(?<=S)[\\d.]*").Value
                     })
                 .ToArray();

foreach (var lines in sLines)
{
    double sTime = double.Parse(lines.SValue);
}

在app中进一步向下,从列表中填充datagridview,列表是由sql语句的结果创建的列表。

foreach (WjDwellOffsets offset in dwellTimes)
{
    origionalDwellOffsets.Add(offset.dwellOffset);

    dgvDwellTimes.Rows.Add(new object[] { offset.positionId, sTime, offset.dwellOffset, 0, offset.dwellOffset, "Update", (offset.dateTime > new DateTime(1900, 1, 1)) ? offset.dateTime.ToString() : "" });
    DataGridViewDisableButtonCell btnCell = ((DataGridViewDisableButtonCell)dgvDwellTimes.Rows[dgvDwellTimes.Rows.Count - 1].Cells[5]);
    btnCell.Enabled = false;
}

正如您所看到的,我只是将sTime放在那里以显示我需要的地方。但显然这不会起作用,1因为它已经脱离了背景,而且我试图将其融入其中的任何方式都会使所有内容翻倍或更糟,因为我在文件中循环播放,但之后我就是这样做了。循环浏览添加到数据网格中的内容等。如何将sTime结果(80行)与数据视图中填充的列表中的80行合并?我不确定如何将sTime的结果合并到网格中而不会搞砸它。

2 个答案:

答案 0 :(得分:0)

double sTime ;              

var sLines = File.ReadAllLines("//dnc/WaterJet/MTI-WJ/" +   cboPartProgram.Text)
                 .Where(s => !s.StartsWith("'") && s.Contains("S"))
                 .Select(s => new
                     {
                         SValue = Regex.Match(s, "(?<=S)[\\d.]*").Value
                     })
                 .ToArray();

foreach (var lines in sLines)
{
    sTime = double.Parse(lines.SValue);
}

foreach (WjDwellOffsets offset in dwellTimes)
{
    origionalDwellOffsets.Add(offset.dwellOffset);

    dgvDwellTimes.Rows.Add(new object[] { offset.positionId, sTime, offset.dwellOffset, 0, offset.dwellOffset, "Update", (offset.dateTime > new DateTime(1900, 1, 1)) ? offset.dateTime.ToString() : "" });
    DataGridViewDisableButtonCell btnCell = ((DataGridViewDisableButtonCell)dgvDwellTimes.Rows[dgvDwellTimes.Rows.Count - 1].Cells[5]);            
}

btnCell.Enabled = false;

答案 1 :(得分:0)

如果我理解你的问题,你正在寻找:

由于两个循环具有相同的计数器限制(在您的情况下为80),并且它们似乎不需要分离,您可以简单地将它们合并到一个正常的for循环中。

double stime;

for (int i = 0; i < sLines.Count(); i++)
{
    sTime = double.Parse(sLines[i].SValue); // Or sLines.ElementAt(i)

    origionalDwellOffsets.Add(dwellTimes[i].dwellOffset); // Or dwellOffset.ElementAt(i)

    dgvDwellTimes.Rows.Add(new object[] { dwellTimes[i].positionId, sTime, dwellTimes[i].dwellOffset, 0, dwellTimes[i].dwellOffset, "Update", (dwellTimes[i].dateTime > new     DateTime(1900, 1, 1)) ? dwellTimes[i].dateTime.ToString() : "" });
    DataGridViewDisableButtonCell btnCell = ((DataGridViewDisableButtonCell)dgvDwellTimes.Rows[dgvDwellTimes.Rows.Count - 1].Cells[5]);     
}