Как удалить или изменить, используя 2 флажка в DataGridView? - PullRequest
0 голосов
/ 28 декабря 2011

Я отображаю данные в объекте DataGridView.Первый столбец представляет удаление, а второй - редактирование как флажки, остальное - данные.

Я пытаюсь удалить и редактировать выбранные данные, когда один из флажков установлен.

Я застрял в том, как что-то сделать, когда был установлен один из флажков, в основном, как проверить, какое поле было щелкнуто.

Как мне это сделать?

Iсделайте так, чтобы снять отметку с любого другого поля, проверенного ранее:

public MainWindow()
{
    InitializeComponent();

    dgvPC.CellContentClick += new DataGridViewCellEventHandler(ContentClick_CellContentClick);
}

void ContentClick_CellContentClick(object sender, DataGridViewCellEventArgs e)
{
    foreach (DataGridViewRow row in dgvPC.Rows)
    {
        row.Cells[Delete1.Name].Value = false;
        row.Cells[Edit1.Name].Value = false;
    }
}

Я добавляю данные как таковые:

if (security.DecryptAES(read.GetString(1), storedAuth.Password, storedAuth.UserName) == "PC Password")
{
    // Count PC passwords.
    countPC++;

    dgvPC.Rows.Add(read.GetInt32(0), false, false, 
        security.DecryptAES(read.GetString(5), storedAuth.Password, storedAuth.UserName), 
        security.DecryptAES(read.GetString(6), storedAuth.Password, storedAuth.UserName));
}

1 Ответ

1 голос
/ 28 декабря 2011

Из вашего заявления я делаю вывод, что вы не можете определить, какой флажок рассматривается

Таким образом, чтобы сузить, вы должны попытаться использовать CellValueChanged событие сетки

void grd_CellValueChanged(object sender, DataGridViewCellEventArgs e)
{
     if ((sender as DataGridView).CurrentCell is DataGridViewCheckBoxCell)
     {
          //Now you know its a checkbox
          //use the ColumnIndex of the CurrentCell and you would know which is the column
          // check the state by casting the value of the cell as boolean
     }
}

Если вы хотите, чтобы действие было немедленным, вам придется зафиксировать значение, и это происходит, когда фокус выходит за пределы ячейки. Попробуйте обработать CurrentCellDirtyStateChanged сетки

Нечто подобное должно работать для вас

void grd_CurrentCellDirtyStateChanged(object sender, EventArgs e)
{
    if (grd.IsCurrentCellDirty)
    {
        grd.CommitEdit(DataGridViewDataErrorContexts.Commit);
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...