получить данные проверенной строки из 1 dataGrid в другую сетку данных, удалить непроверенную строку из другой сетки данных

1

У меня есть 2 datagridview в WinForms dgv1 dgv2 dgv1 имеет несколько столбцов, включая 1 CheckBoxColumn, dgv2 имеет несколько столбцов, но не CheckBoxColumn. Я хочу функциональность, которая позволяет мне, когда я проверяю CheckBoxColumn, данные этого конкретного Строка должны быть выбраны и перейти в Dgv2. так я помещаю выбранные строки из dgv1 в dgv2. Но если я отменил чек (или разблокировать), проверил checkBox в dgv1, что определенную строку следует удалить из dgv2. Помогите мне это исправить. Я буду благодарен вам, ребята, с нетерпением жду этого. :)

вот мой код, рассмотрим datagridview6 = dgv1 и datagridview10 = dgv2

private void dataGridView6_CellContentClick(object sender, DataGridViewCellEventArgs e)
{
    dataGridView10.Visible = true;           
         if (dataGridView6.CurrentCell.ColumnIndex == 7)
            {
                if (dataGridView6.CurrentCell.Value != null)
                {
                    bool checkstate = (bool)dataGridView6.CurrentCell.Value;

                    if (checkstate == false)
                    {
                        dataGridView6.CurrentCell.Value = true;                                           
                    }
                else
                 {//here help in logic to delete unchecked row
                    dataGridView6.CurrentCell.Value = false;
                     int j= int.Parse(dataGridView6.Rows[e.RowIndex].ToString());
                     dataGridView10.Rows.Remove(dataGridView10.Rows[j]);
                  }
               }
         else
         {dataGridView6.CurrentCell.Value = true;
           dataGridView10.Rows.Insert(i);          dataGridView10.Rows[i].Cells[1].Value=dataGridView6.CurrentRow.Cells[2].Value.ToString();
dataGridView10.Rows[i].Cells[2].Value = dataGridView6.CurrentRow.Cells[3].Value.ToString();
dataGridView10.Rows[i].Cells[3].Value = dataGridView6.CurrentRow.Cells[5].Value.ToString();
           }
     }

/* в этой логической проверке строка выбирается в dgv2, но при снятии флажка удаление не работает.

обе сетки данных не связаны с базой данных, m выбирает значение с использованием класса SQlCommand.

Теги:
winforms
visual-studio-2010
datagridview

2 ответа

1
Лучший ответ

Для этого вам нужно сохранить RowIndex из dgv2 в dgv2 Проверено Row Tag.

например, когда вы выбираете любую строку из dgv1 вы добавляете эти записи в dgv2 dgv2. Теперь вам нужно сохранить этот новый индекс строки созданной строки в dgv1.CurrentRow.

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

///Inserting default records
///The fifth column value is a primary key value
///Application will check that value with second grid and performs remove and add rows
///we cannot use row index to remove row. because the row index will be changed if any row removed from dgv2.
///I have placed this code in form load event.
dgv1.Rows.Add(false, "Nimesh", "Gujarat", "India", 1);
dgv1.Rows.Add(false, "Prakash", "MP", "India", 2);
dgv1.Rows.Add(false, "Rohit", "Maharashtra", "India",  3);
dgv1.Rows.Add(false, "Jasbeer", "Panjab", "India",  4);
dgv1.Rows.Add(false, "Venkteshwar", "Karnatak", "India", 5);
dgv1.Rows.Add(false, "Rony", "Delhi", "India", 6);


///We cannot use CellChange event becauase it will be executed after cell end edit.
///We cannot use CellContentClick event coz it will not call when you double click or clicking quickly multiple times.
///So we are using CellMouseUp event 


private void dgv1_CellMouseUp(object sender, DataGridViewCellMouseEventArgs e)
{
    if (dgv1.CurrentCell == null)
        return;

    dgv2.Visible = true;
    if (dgv1.CurrentCell.ColumnIndex == 0)
    {
        bool bValue = (bool)dgv1.CurrentCell.GetEditedFormattedValue(e.RowIndex, DataGridViewDataErrorContexts.CurrentCellChange);
        if (bValue)
        {
            for (int iRow = 0; iRow < dgv2.Rows.Count; iRow++)
            {
                if (dgv2.Rows[iRow].Tag != null && dgv2.Rows[iRow].Tag.Equals(dgv1.CurrentRow.Cells[4].Value))
                    return;
            }
            int iNewRowIndex = dgv2.Rows.Add();
            dgv2.Rows[iNewRowIndex].Cells[0].Value = dgv1.CurrentRow.Cells[1].Value;
            dgv2.Rows[iNewRowIndex].Cells[1].Value = dgv1.CurrentRow.Cells[2].Value;
            dgv2.Rows[iNewRowIndex].Cells[2].Value = dgv1.CurrentRow.Cells[3].Value;
            dgv2.Rows[iNewRowIndex].Tag = dgv1.CurrentRow.Cells[4].Value;
        }
        else
        {
            if (dgv1.CurrentRow.Cells[4].Value != null)
            {
                for (int iRow = 0; iRow < dgv2.Rows.Count; iRow++)
                {
                    if (dgv2.Rows[iRow].Tag != null && dgv2.Rows[iRow].Tag.Equals(dgv1.CurrentRow.Cells[4].Value))
                    {
                        dgv2.Rows.RemoveAt(iRow);
                        break;
                    }
                }
            }
        }
    }
}
  • 1
    о, извините, это должно быть круглой скобкой. Я обновил свой ответ. скажи мне, если ты получишь ошибку
  • 1
    В какой строке отображается вторая ошибка?
Показать ещё 6 комментариев
0

Добавьте скрытые столбцы в обоих DataGridView. Когда пользователь проверяет checkboxcolumn, присвойте уникальное значение скрытому столбцу. Скопируйте все ячейки строки из первого DataGridView во второй. Когда пользователь снимет флажок, просто найдите строку по значению скрытого столбца. RemoveAt() строка.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню