Как скопировать строку из одного BindingList, привязанного к DataGridView, в другой DataGridView и BindingList - PullRequest
0 голосов
/ 29 апреля 2019

Я работаю над проектом инвентаризации, в котором есть список деталей и список товаров.Каждый продукт должен иметь хотя бы одну часть, связанную с ним.Список деталей находится в BindingList, то есть DataSource для нескольких DataGridView с, и есть отдельный BindingList, который является DataSource для связанных деталей.Мне нужно взять строку (часть), выбранную в одной DGV, и скопировать всю строку в другую DGV одним нажатием кнопки.

Я использовал "1BestCsharp blog" "C #Учебное пособие - Как отобразить проверенные строки в Datagridview к другому DataGridView [с исходным кодом] "Видео YouTube (https://www.youtube.com/watch?v=ErrVyyogKCQ&list=PLFDH5bKmoNqyDKntkVv-NURTAlPIhMPqA&index=19),, но произошла ошибка во время выполнения. Я не записал ошибку, но в ней говорилось, что я не могуиспользуйте код в этом видео из-за установки DataSource.

Я также рассмотрел код C # в Как скопировать содержимое из одного DataGridview в другой DataGridview , но, похоже, этобольше ориентировано на копирование всего DGV на другой DGV, что мне не нужно.

Моя DGV конфигурация:

dgvModProdAllPrtList.SelectionMode = DataGridViewSelectionMode.FullRowSelect;
            dgvModProdAllPrtList.DefaultCellStyle.SelectionBackColor = dgvModProdAllPrtList.DefaultCellStyle.BackColor;
            dgvModProdAllPrtList.DefaultCellStyle.SelectionForeColor = dgvModProdAllPrtList.DefaultCellStyle.ForeColor;
            dgvModProdAllPrtList.RowHeadersVisible = false;
            dgvModProdAllPrtList.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.Fill;
            dgvModProdAllPrtList.DataSource = Inventory.PartsList;
            dgvModProdAllPrtList.Columns[0].HeaderText = "Part ID";
            dgvModProdAllPrtList.Columns[1].HeaderText = "Part Name";
            dgvModProdAllPrtList.Columns[2].HeaderText = "Inventory";
            dgvModProdAllPrtList.Columns[3].HeaderText = "Price";
            dgvModProdAllPrtList.Columns[4].Visible = false;
            dgvModProdAllPrtList.Columns[5].Visible = false;

            dgvModProdAssociatedPrt.SelectionMode = DataGridViewSelectionMode.FullRowSelect;
            dgvModProdAssociatedPrt.DefaultCellStyle.SelectionBackColor = dgvModProdAssociatedPrt.DefaultCellStyle.BackColor;
            dgvModProdAssociatedPrt.DefaultCellStyle.SelectionForeColor = dgvModProdAssociatedPrt.DefaultCellStyle.ForeColor;
            dgvModProdAssociatedPrt.RowHeadersVisible = false;
            dgvModProdAssociatedPrt.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.Fill;
            dgvModProdAssociatedPrt.DataSource = Product.AssociatedParts;
            dgvModProdAssociatedPrt.Columns[0].HeaderText = "Part ID";
            dgvModProdAssociatedPrt.Columns[1].HeaderText = "Part Name";
            dgvModProdAssociatedPrt.Columns[2].HeaderText = "Inventory";
            dgvModProdAssociatedPrt.Columns[3].HeaderText = "Price";
            dgvModProdAssociatedPrt.Columns[4].Visible = false;
            dgvModProdAssociatedPrt.Columns[5].Visible = false;

Код выбора строки:

        private void dgvModProdAllPrtList_CellClick(object sender, DataGridViewCellEventArgs e)
        {
            IndAddPrt = e.RowIndex;
            Inventory.CurrentPartID = (int)dgvModProdAllPrtList.Rows[IndAddPrt].Cells[0].Value;
            Inventory.CurrentPart = Inventory.lookupPart(Inventory.CurrentPartID);
            dgvModProdAllPrtList.DefaultCellStyle.SelectionBackColor = Color.CornflowerBlue;
        }

Я уверен, что есть довольно простой способ сделать это, но я просто не уверен, что это будет.

...