当我有两个输入时,为什么我的程序只显示一个输出?

时间:2016-06-30 02:23:53

标签: c#

我插入了两个输入数据(例如二月,三月),但结果只显示最后一个输入,即三月中的数据。

在测试代码后,我意识到它只显示最后的输入数据。我该怎么做才能显示所有输入数据呢?

不正确:只显示一个输出:

Incorrect: only one output is shown

正确:应显示所有输入数据: Correct: should show all the input data

int count = 0;

foreach (DataTable dt in ds.Tables)    
{

    var ws = wb.Worksheets.Add(dt.TableName);

    if (count == 0)
    {
        string[] columnNames = dt.Columns.Cast<DataColumn>().Select(x => x.ColumnName).ToArray();
        string[] rowValue = new string[dt.Rows.Count];
        for (int i = 0; i < dt.Rows.Count; i++)
        {
            rowValue = dt.Rows[i].ItemArray.Select(x => x.ToString()).ToArray();
        }

        DateTime dttryparse;
        for (int i = 0; i < columnNames.Count(); i++)
        {
            ws.Cell(1, i + 1).SetValue(columnNames[i]);
        }
        for (int i = 0; i < rowValue.Count(); i++)      
        {
            if (rowValue[i].Contains("$"))
            {
                ws.Cell(2, i + 1).SetValue(rowValue[i]);
                ws.Cell(2, i + 1).Style.NumberFormat.Format = "$ #,##0.00";
                ws.Cell(2, i + 1).DataType = XLCellValues.Text;
            }
            else if (rowValue[i].Contains("%"))
            {
                ws.Cell(2, i + 1).SetValue(rowValue[i]);
                ws.Cell(2, i + 1).DataType = XLCellValues.Text;
                ws.Cell(2, i + 1).Style.NumberFormat.Format = "0.0%";
            }
            else if (DateTime.TryParse(rowValue[i], out dttryparse))
            {
                ws.Cell(2, i + 1).SetValue(DateTime.Parse(rowValue[i]));
                ws.Cell(2, i + 1).DataType = XLCellValues.DateTime;
            }

        }
        ws.Columns().AdjustToContents();
        count += 1;
    }
    else
    {
        var rowValue = dt.Rows[0].ItemArray.Select(x => x.ToString()).ToArray();
        double dbltryparse = 0;
        DateTime dttryparse;

        for (int i = 0; i < dt.Rows.Count; i++)
        {
            if (rowValue[i].Contains("$"))
            {
                ws.Cell(2, i + 1).SetValue(rowValue[i]);
                ws.Cell(2, i + 1).Style.NumberFormat.Format = "$ #,##0.00";
                ws.Cell(2, i + 1).DataType = XLCellValues.Text;
            }
            else if (rowValue[i].Contains("%"))
            {
                ws.Cell(2, i + 1).SetValue(double.Parse(rowValue[i]));
                ws.Cell(2, i + 1).DataType = XLCellValues.Text;
                ws.Cell(2, i + 1).Style.NumberFormat.Format = "0.0%";
            }
            else if (DateTime.TryParse(rowValue[i], out dttryparse))
            {
                ws.Cell(2, i + 1).SetValue(DateTime.Parse(rowValue[i]));
                ws.Cell(2, i + 1).DataType = XLCellValues.DateTime;
            }
        }
        ws.Columns().AdjustToContents();
    }
}

1 个答案:

答案 0 :(得分:3)

for (int i = 0; i < dt.Rows.Count; i++)
{
    rowValue = dt.Rows[i].ItemArray.Select(x => x.ToString()).ToArray();
}

遍历所有行,提取值,并用下一行值覆盖它们,直到它退出循环时到达最后一行(听起来很熟悉?),让rowValue包含值最后一行。

如果您使用调试器逐步完成此操作,那将会发生的事情非常明显。