Как проверить, установлен ли флажок в представлении сетки данных или нет - PullRequest
3 голосов
/ 28 октября 2011

Как я могу проверить состояние bool флажка, который находится в datagridview. Я хотел бы иметь true, если отмечен, и false, если он не отмечен. Может ли кто-нибудь мне помочь.

Можно ли справиться с этим в dataGridView_CellContentClick

Ответы [ 5 ]

6 голосов
/ 28 октября 2011

Это немного рассматривается на страницах MSDN для DataGridView здесь и здесь .

В частности, они говорят:

Для кликов в DataGridViewCheckBoxCell это событие происходит до флажок изменяет значение, поэтому, если вы не хотите рассчитывать Ожидаемое значение на основе текущего значения, вы обычно будете обрабатывать вместо этого событие DataGridView.CellValueChanged. Потому что это событие происходит только тогда, когда пользовательское значение зафиксировано, что обычно происходит, когда фокус покидает клетку, вы также должны обрабатывать Событие DataGridView.CurrentCellDirtyStateChanged. В этом обработчике, если текущая ячейка является ячейкой флажка, вызовите DataGridView.CommitEdit метод и передать значение Commit.

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

Итак, вы получите:

dataGridView1.CurrentCellDirtyStateChanged += new EventHandler(dataGridView1_CurrentCellDirtyStateChanged);
dataGridView1.CellValueChanged += new DataGridViewCellEventHandler(dataGridView1_CellValueChanged);

void dataGridView1_CellValueChanged(object sender, DataGridViewCellEventArgs e)
{
    if (dataGridView1.Columns[e.ColumnIndex].Name == "CB")
    {
        MessageBox.Show(dataGridView1.Rows[e.RowIndex].Cells[e.ColumnIndex].Value.ToString());    
    }
}

void dataGridView1_CurrentCellDirtyStateChanged(object sender, EventArgs e)
{
    dataGridView1.CommitEdit(DataGridViewDataErrorContexts.Commit);
}

А что касается получения проверенного значения - это просто свойство Value объекта DataGridViewCheckBoxCell.

Итак, если вы идете:

dataGridView1.Rows[rowindex].Cells[cellindex].Value 

вы получаете логическое значение, соответствующее флажку (после того, как изменение было зафиксировано).

0 голосов
/ 09 марта 2014

Работает на 100%.

 private void grd_CellContentClick(object sender, DataGridViewCellEventArgs e)
        {

            grd.CommitEdit(DataGridViewDataErrorContexts.Commit);
            bool Result = Convert.ToBoolean((grd[e.ColumnIndex, e.RowIndex] as DataGridViewCheckBoxCell).Value);
        }
0 голосов
/ 28 октября 2011

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

bool IsChecked = Convert.ToBoolean((dataGridView1[ColumnIndex, RowIndex] as DataGridViewCheckBoxCell).FormattedValue))
0 голосов
/ 28 октября 2011
private void dataGridView1_CellContentClick(object sender, DataGridViewCellEventArgs e)
{
    var checkcell = new DataGridViewCheckBoxCell();
    checkcell.FalseValue = false;
    checkcell.TrueValue = true;
    checkcell.Value = false;
    dataGridView1[0, 0] = checkcell; //Adding the checkbox

    if (((bool)((DataGridViewCheckBoxCell)dataGridView1[0, 0]).Value) == true)
    {
        //Stuff to do if the checkbox is checked
    }
}
0 голосов
/ 28 октября 2011

если в конструкторе определен флажок, это будет так же просто, как сослаться на имя флажка и проверить его свойство «флажок» на true / false.

Но я подозреваю, что вы добавляете флажок в сетку данных по коду?

в этом случае вам нужно сохранить ссылку на чекбокс где-нибудь. Если бы я, где вы, я бы добавил все флажки, которые я добавляю в сетку данных в список, или если вы хотите ссылаться на них по имени, я бы добавил их в словарь.

Вы также можете привязать событие к событию Checked_Changed с флажком, выбрав его и щелкнув по маленькому значку болта на панели свойств, найдя событие checkedChanged и дважды щелкнув его.

в коде события вы можете получить флажок, нажав: CheckBox mycheckbox = отправитель как CheckBox;

, а затем сослаться на mycheckbox.checked, чтобы получить bool, для которого проверено или нет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...