Как я могу отобразить количество отмеченных флажков в текстовом поле из столбца в сетке данных?

У меня есть DataGridView с колонкой CheckBox в нем. (Это система инвентаризации.) Эта проверка используется для перемещения серийных номеров изделий из одного места в другое в нашей компании.

У меня также есть текстовое поле, в котором на данный момент сотрудник вводит количество перемещаемых предметов, затем проверяет соответствующие серийные номера и перемещает их.

Я хотел бы, чтобы число в текстовом поле было сгенерировано в зависимости от того, сколько серийных номеров проверено. Это вообще возможно? На данный момент я пробовал около сотни различных решений, и все они либо заканчиваются странными ошибками, либо не дают мне никаких результатов.

1 ответ

Решение

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

Это должно обновить текстовое поле, когда вы установите и снимите флажок:

private void dgv_CurrentCellDirtyStateChanged(object sender, EventArgs e)
{
    if (dgv.IsCurrentCellDirty && dgv.CurrentCell.OwningColumn.Name == "MyCheckColumn")
        dgv.CommitEdit(DataGridViewDataErrorContexts.Commit);
}

private void dgv_CellValueChanged(object sender, DataGridViewCellEventArgs e)
{
    if (e.RowIndex == -1) //just a guard for the header row
        return;

    if (dgv.Columns[e.ColumnIndex].Name == "MyCheckColumn")
        textBox.Text = dgv.Rows.Cast<DataGridViewRow>().Count(r => Convert.ToBoolean(r.Cells["MyCheckColumn"].Value)).ToString();
}

Надеюсь, Линк работает. Если нет, вам придется сделать это старомодным foreach путь с переменной суммы. Я знаю DataGridViewRowCollection иногда может быть привередливым

Другие вопросы по тегам