Цикл и формирование строки - PullRequest
0 голосов
/ 03 ноября 2011

У меня довольно простая общая проблема программирования, но я не могу получить результаты, которые я ищу. По сути, у меня есть DataGridView с именем dataGridView3 (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 ]

1 голос
/ 03 ноября 2011

Изменение:

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 более понятны для такого рода вещей.

0 голосов
/ 03 ноября 2011

Выполните итерацию по количеству вставляемых элементов PA61, а не по строкам, а затем вычислите число строк и столбцов (или ячеек) следующим образом:

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