循环和字符串形成

时间:2011-11-03 15:08:05

标签: c# string-formatting

我有一个非常简单的一般编程问题,但我无法得到我正在寻找的结果。基本上,我有一个名为dataGridView3的DataGridView(2列),我希望用户能够输入他/她想要的字段,并根据这些字段创建一系列字符串。我的问题是,形成的字符串一次只能包含4个dataGridView元素,但是对于我当前的实现,它将每行放在第一个字符串中(参见示例)。

以下是我目前使用的代码。

            for (int i = 0; i < dataGridView3.Rows.Count; i++)
            {
                if (i % 4 == 0)
                {
                    newPA61String += "PA61";
                    for (int j = i; j < dataGridView3.Rows.Count - 1; j++)
                    {
                        newPA61String += " " + (dataGridView3.Rows[j].Cells[0].Value.ToString().PadLeft(5, leftPaddingChar))
                            + " " + (dataGridView3.Rows[j].Cells[1].Value.ToString().PadRight(6, rightPaddingChar));
                    }
                    newPA61String = newPA61String.PadRight(56, rightPaddingChar);
                    newPA61String += "\r\n";
                }        
            }

使用6行数据,此代码为我提供了输出:

PA61 00001 a      00002 b      00003 c      00004 d      00005 e      00006 f     
PA61 00005 e      00006 f     

我希望它看起来像这样;但是,我不能按照我想要的方式操纵它:

PA61 00001 a      00002 b      00003 c      00004 d 
PA61 00005 e      00006 f     

我的第一直觉就是在达到指定长度后截断第一个字符串,但是字符串是通过将所有内容放在由“\ r \ n”分割的一行上形成的,所以这样做会消除第一个4列。

我知道解决方案可能相当明显,但我现在有一天......

提前致谢,如果您需要任何其他信息,请询问。

2 个答案:

答案 0 :(得分:1)

变化:

for (int j = i; j < dataGridView3.Rows.Count - 1; j++)

为:

for (int j = i; j < Math.Min(dataGridView3.Rows.Count, i + 4); j++)

您可以将Math.Min表达式移出循环。

虽然我发现while循环更清楚这种事情。

答案 1 :(得分:0)

迭代要插入的PA61项目数,而不是遍布行,然后计算行和列(或单元格)数字,如下所示:

for (int i = 0; i < pa61ItemsCount; i++)
{
    int row = i / 4;
    int cell = i % 4;
    ...
}