ramy nemer Ответов: 1

Как вставить значения из datatable в определенные столбцы dgv


у меня есть datatable, обновленный с sql server, я хочу заполнить определенные столбцы из datatable в определенные столбцы в datagridview
вот мой код :
foreach (DataRow row in usersInincident.Rows)
                        {
                            dataGridView5.AllowUserToAddRows = false;
                            dataGridView5.Rows.Add();

                            var v  = row["PuserNickname"].ToString();
                            var v1 = row["puserserialno"].ToString();
                            var v2 = row["puserfname"].ToString();
                            var v3 = row["puserlname"].ToString();
                            var v4 = row["gradename"].ToString();
                            var v5 = row["tokenname"].ToString();
                            var v6 = row["policeuserrole"].ToString();



                            foreach (DataGridViewRow gridRow in dataGridView5.Rows)
                            {
                                DataGridViewCell cell = gridRow.Cells[1] as DataGridViewCell;
                                DataGridViewCell cell1 = gridRow.Cells[2] as DataGridViewCell;
                                DataGridViewCell cell2 = gridRow.Cells[3] as DataGridViewCell;
                                DataGridViewCell cell3 = gridRow.Cells[4] as DataGridViewCell;
                                DataGridViewCell cell4 = gridRow.Cells[5] as DataGridViewCell;
                                DataGridViewCell cell5 = gridRow.Cells[6] as DataGridViewCell;
                                DataGridViewCell cell6 = gridRow.Cells[7] as DataGridViewCell;

                                cell.Value = v;
                                cell1.Value = v1;
                                cell2.Value = v2;
                                cell3.Value = v3;
                                cell4.Value = v4;
                                cell5.Value = v5;
                                cell6.Value = v6;

                            }
                        }


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

он дает мне ту же строку при заполнении dgv

[no name]

Что говорит вам ваш отладчик, когда вы проходите через это?

ramy nemer

он проходит через первый foreach только один раз, как только он входит во второй foreach, он проходит через него до тех пор, пока не закончит (значения не меняются с 1-го foreach)

[no name]

Что ж, тогда это ваш ответ. Вы просто заполняете вторую сетку одной строкой из первой сетки. Если это не то, что вы хотите сделать, тогда не делайте этого.

ramy nemer

datatable имеет три строки,что он делает, это заполнение dgv в трех одинаковых строках,как я должен заполнить их в dgv при указании его столбцов, не используя databind

[no name]

Да, это именно то, что вы сказали ему сделать. Компьютеры глупы, они делают только то, что вы им говорите. Начните с того, что не заполняйте вторую сетку. Поместите только те данные во вторую сетку, которые вы хотите туда поместить.

ramy nemer

его заполнение мне последняя запись только в dgv

1 Ответов

Рейтинг:
2

Richard Deeming

Вам нужно научиться пользоваться отладчиком! Если вы пройдете через свой код, проблема станет очевидной.

Посмотрите еще раз на то, что делает ваш код:

for each row in the source:
    add a new row to the destination
    extract the values from the source row
    
    for each row in the destination, including all previously added rows
        set the columns to the values extracted from the source
    {end of inner loop}
{end of outer loop}


Если ваш источник имеет две строки, вы добавляете первую строку в пункт назначения и обновляете ее значениями из первой строки в источнике. Затем вы добавляете вторую строку в пункт назначения и обновите обе строки назначения со значениями из второй строки в источнике.

Решение также очевидно: не обновляйте каждый строка в пункте назначения; обновляйте только ту строку, которую вы только что добавили.
foreach (DataRow row in usersInincident.Rows)
{
    int indexOfNewRow = dataGridView5.Rows.Add();
    DataGridRow gridRow = dataGridView5.Rows[indexOfNewRow];
    
    // Now copy the values from row to gridRow...
}


Maciej Los

Отличное объяснение!
Я не смог бы объяснить это лучше.