Fadimoh Ответов: 2

Добавьте строки datagridview1 в datagridview2 несколько раз


У меня есть два datagridview, мне нужно добавить строки из datagridview1 в datagridview2

если ячейка datagridview1 [3] value =1, то результат добавляет строку один раз в datagridview2,
(Все в порядке, работает нормально)

(Моя Проблема В Этом)
в противном случае, если значение ячейки datagridview1 [3] больше 1, результат добавляет ту же строку несколько раз, что и число значений ячейки [3] в datagridview2

Спасибо,

Что я уже пробовал:

private void button2_Click(object sender, EventArgs e)
        {
            dataGridView56.Rows.Clear();
            for (int i = 0; i < dataGridView1.Rows.Count - 1; i++)
            {
                int value;
                string qty = dataGridView1.Rows[i].Cells[3].Value.ToString();
                if (int.TryParse(qty, out value))
                {
                    if (value == 1)
                    {
                        dataGridView2.Rows.Add();
                        dataGridView2.Rows[i].Cells["jobno"].Value = dataGridView1.Rows[i].Cells[0].Value.ToString();
                    }

                    else if (value > 1)

                    {
                        int x = value;
                        foreach (DataGridViewRow row in dataGridView2.Rows)
                        {
                            
                            dataGridView2.Rows.Add();
                            dataGridView2.Rows[x].Cells["jobno1"].Value = dataGridView1.Rows[i].Cells[0].Value.ToString();
                        }
                        x++;
                    }         
                }
            }
        }

2 Ответов

Рейтинг:
13

Richard Deeming

Попробуйте что-нибудь вроде этого:

if (int.TryParse(qty, out value) && value > 0)
{
    string jobNo = dataGridView1.Rows[i].Cells[0].Value.ToString();
    for (int j = 0; j < value; j++)
    {
        int newRowIndex = dataGridView2.Rows.Add();
        dataGridView2.Rows[newRowIndex].Cells["jobno"].Value = jobNo;
    }
}


Fadimoh

Привет,
Мистер Ричард
Спасибо за Вашу поддержку, все работает нормально :)

Спасибо,

Maciej Los

5ed!

Fadimoh

Привет,
Мистер Ричард

Я сталкиваюсь с проблемой, есть пустые строки, поступающие в dataGridView2

Спасибо,

Richard Deeming

Тогда у вас должны быть пустые строки в исходной сетке. Проверьте, есть ли jobNo является пустой строкой перед запуском внутреннего for петля.

string jobNo = dataGridView1.Rows[i].Cells[0].Value.ToString();
if (!string.IsNullOrEmpty(jobNo))
{
    for (int j = 0; j < value; j++)
    {
        ...
    }
}

Fadimoh

В исходной сетке нет пустых строк

Richard Deeming

Затем вам нужно будет отладить свой код, чтобы увидеть, что происходит не так.

Рейтинг:
1

CHill60

Посмотрите на ваше заявление else … вы включили

foreach (DataGridViewRow row in dataGridView2.Rows)
Таким образом, вы добавите то же количество строк, что и dataGridView2 в настоящее время.
Я думаю, что это должно быть (непроверено)
else if (value > 1)

{
    int x = value;
    int j;
    for(j = 0;j < value; j++)
    {

        dataGridView2.Rows.Add();
        dataGridView2.Rows[x].Cells["jobno1"].Value = dataGridView1.Rows[i].Cells[0].Value.ToString();
    }
}


Fadimoh

Спасибо Мистер чилл
я получил эту ошибку

Система.Исключение argumentoutofrangeexception: индекс находился вне допустимого диапазона. Должно быть неотрицательным и меньше размера коллекции.
Имя параметра: индекс'