Как проверить все выбранные флажки, когда вы устанавливаете один в C # datagridview - PullRequest
0 голосов
/ 18 января 2019

Я довольно новичок в разработке на C #, но здесь все.Я работаю над плагином для Autodesk revit, который создает форму окна с сеткой данных, которая заполняется несколькими столбцами флажков при загрузке формы.То, что я хотел бы сделать, это выбрать несколько ячеек флажков и установить один из выбранных полей, чтобы проверить все выбранные поля.

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

    DataGridViewSelectedCellCollection selCells = null;
    private void revDataGridView_SelectionChanged(object sender, EventArgs e)
    {
        selCells = revDataGridView.SelectedCells;
    }

    private void revDataGridView_CellValueChanged(object sender, DataGridViewCellEventArgs e)
    {
        foreach(DataGridViewCell cell in selCells)
        {
            cell.Value = revDataGridView[e.ColumnIndex, e.RowIndex].Value;
        }
    }

Моя проблема заключается в том, что, как только я нажимаю на одну ячейку, она сбрасывает DataGridView.SelectedCells к этомуодна ячейка, и я теряю предыдущий выбор.Любая помощь будет принята с благодарностью!

РЕДАКТИРОВАТЬ: Я решил это путем сохранения выбора в другой переменной (selCells) и использования комбинации обработчиков событий CellMouseUp, CellMouseDown и CellValueChanged:

private void revDataGridView_CellMouseUp(object sender, DataGridViewCellMouseEventArgs e)
    {
        if (selCells != null && selCells.Count>1)
        {
            revDataGridView.EndEdit();
            selCells = revDataGridView.SelectedCells; 
        }
        else if(selCells !=null && selCells.Count == 1)
        {
            selCells = revDataGridView.SelectedCells;
            revDataGridView.EndEdit();
        }
    }
    //when a value is changed, apply change to all selected cells
    private void revDataGridView_CellValueChanged(object sender, DataGridViewCellEventArgs e)
    {
        foreach(DataGridViewCell cell in selCells)
        {
            if (cell.ReadOnly == false)
            {
                cell.Value = revDataGridView[e.ColumnIndex, e.RowIndex].Value;
                cell.Selected = true; 
            }
        }
    }
    //clear selection upon mouse button down
    private void revDataGridView_CellMouseDown(object sender, DataGridViewCellMouseEventArgs e)
    {
        revDataGridView.ClearSelection();
    }
...