Добавление строк Datagridview из одной сетки в другую

У меня есть две формы Form1 (DGV1) и Form2 (DGV2) с контролем Datagridview на обеих формах.

В Form1 есть ссылка на кнопку Form2, где пользователь может добавлять строки в Form1 datagridview (DGV1) .. В Form2 Datagridview есть флажок в первом столбце, и пользователь может выбрать только одну строку за раз. Так есть две кнопки на Form2 1) Готово 2) Добавить элементы

Когда пользователь нажимает «Добавить элементы», выбирая строки один за другим, строки должны быть добавлены в datagridview в Form1, а при нажатии кнопки «Готово» форма 1 должна отображаться со всеми добавляемыми строками.

int index = objQM.gvItemDetails.Rows.Add();
int Sno = index + 1;
string Desc = gvInventory.Rows[RowIndex].Cells[6].Value.ToString();
int Sellqty = LoadSellQty();
 decimal UnitCost = Convert.ToDecimal(gvInventory.Rows[RowIndex].Cells[8].Value.ToString());
 decimal Amount = LoadSellQty() * UnitCost;
 objQM.gvItemDetails.Rows.Insert(index,false, Sno, Desc, Sellqty, UnitCost, Amount);

Я могу добавить одну строку в Form1 datagridview, но при добавлении второй строки строка, добавленная ранее, будет потеряна.

Можете ли вы предложить способ решить эту проблему.

Спасибо.

0
nl ja de
Просто уточнить: objQM.gvItemDetails - это DGV1 и gvInventory - это DGV2? Сразу вы можете добавить только одну строку (выбранную («В Form2 Datagridview есть флажок в первом столбце, и пользователь может выбрать только одну строку за раз»)? Это весь код, который обрабатывает добавление строки?
добавлено автор gzaxx, источник
Да, вы правы. GvItemDetails - это родительская сетка, а gvInventory - дочерняя сетка. Сначала я проверяю, установлен ли флажок в сетке gvInventory. if (Convert.ToBoolean (gvInventory.Rows [RowIndex] .Cells [0] .Forma & zwnj; ttedValue)) {
добавлено автор Prathap, источник

1 ответы

Вы добавляете для каждой строки, выбранной в gvInventory две строки в родительской сетке (это желаемый способ работы?), Если не попробовать:

int index = objQM.gvItemDetails.Rows.Add();
DataGridViewRow row = objQM.gvItemDetails.Rows[index]; //here you get a reference to added row
row.Cells[0] = false;
row.Cells[1] = index + 1; //old Sno
row.Cells[2] = gvInventory.Rows[RowIndex].Cells[6].Value.ToString();
row.Cells[3] = LoadSellQty();
row.Cells[4] = Convert.ToDecimal(gvInventory.Rows[RowIndex].Cells[8].Value.ToString());
row.Cells[5] = LoadSellQty() * UnitCost;

Таким образом вы добавляете новую строку и заполняете ее значениями. Из кода, который вы дали, неясно, почему первая строка потеряна, поэтому, возможно, мне понадобится дополнительная информация.

0
добавлено
Потому что вы пытаетесь добавить его снова! :) Эта строка int index = objQM.gvItemDetails.Rows.Add (); добавляет новую строку и возвращает свой индекс, а следующие строки заполняют данные, а именно :).
добавлено автор gzaxx, источник
Рад, что он работает :) и не проблема спариваться :)
добавлено автор gzaxx, источник
Удалите эту строку: objQM.gvItemDetails.Rows.Add (); он больше не нужен.
добавлено автор gzaxx, источник
Да, я заметил, что добавляет две строки в Parent grid.thanks. Когда я пытаюсь добавить строку datagridview в gvItemDetails, как показано ниже objQM.gvItemDetails.Rows.Add (строка); он выдает ошибку, принадлежащую элементу управления datagridview. Можете ли вы помочь мне, где я буду ошибаться
добавлено автор Prathap, источник
Я изменил код как objQM.gvItemDetails.Rows [index] .Clone (), и он работает Cool. Но проблема заключается в создании дополнительной строки. Так как я могу ее избежать.
добавлено автор Prathap, источник
Как вы уже упоминали строку int index = objQM.gvItemDetails.Rows.Add (); создает дополнительную фиктивную строку. Любая альтернатива для этого.
добавлено автор Prathap, источник
Привет gzaxx ... Я сделал небольшое изменение в коде и отлично работает. Я добавил эту строку objQM.gvItemDetails.Rows.Add (); без индекса int и создал статическую переменную int index и увеличил ее значение при вставке. Спасибо человеку.
добавлено автор Prathap, источник
Привет, gzaxx .. он работает нормально, но если я добавлю 2 строки, он отобразит первые 2 строки вместе с двумя фиктивными строками. Если я добавлю 3 строки, он также отобразит 3 фиктивных строки после вставки выбранных строк. Можете ли вы помочь мне с этим.
добавлено автор Prathap, источник
static int index = 0; private void LoadItemDetails forQuotations() {if (Convert.ToBoolean (gvInventory.Rows [RowIndex] .Cells [0] .Forma & zwnj; ttedValue)) {objQM.gvItemDetails.Rows.Add (); DataGridViewRow row = (DataGridViewRow) objQM.gvItemDetails.Rows [index] .Clone (); decimal UnitCost = Convert.ToDecimal (gvInventory.Rows.RowIndex] .Cells [8] .Value. & zwnj; ToString ()); row.Cells [0] .Value = false; row.Cells [1] .Value = index + 1; row.Cells [2] .Value = gvInventory.Rows [RowIndex] .Cells [6] .Value.ToString (); row.Cel & zwnj; ls [3] .Value = LoadSellQty ();
добавлено автор Prathap, источник
row.Cells [4] .Value = Convert.ToDecimal (gvInventory.Rows [RowIndex] .Cells [8] .Value. & zwnj; ToString ()); row.Cells [5] .Value = LoadSellQty() * UnitCost; objQM.gvItemDetails.Rows.Insert (индекс, строка); Индекс ++;
добавлено автор Prathap, источник
Потрясающие. Я думал, что мне нужно добавить эту строку кода objQM.gvItemDetails.Insert (index, row), и это вызывает другую ошибку. Теперь все прекрасное dude.Works отлично.
добавлено автор Prathap, источник
Привет, чувак ... Как я могу отфильтровать datagridview, когда нет данных datatable .., как это имеет место в моем scenerio.
добавлено автор Prathap, источник
Microsoft Stack Jobs
Microsoft Stack Jobs
1 788 участник(ов)

Work & freelance only Microsoft Stack. Feed https://t.me/Microsoftstackjobsfeed Чат про F#: @Fsharp_chat Чат про C#: @CSharpChat Чат про Xamarin: @xamarin_russia Чат общения:@dotnettalks

Microsoft Developer Community Chat
Microsoft Developer Community Chat
584 участник(ов)

Чат для разработчиков и системных администраторов Microsoft Developer Community. __________ Новостной канал: @msdevru __________ Баним за: оскорбления, мат, рекламу, флуд, флейм, спам, NSFW контент, а также большое количество оффтоп тем. @banofbot