DataGridView ComboBox не сохраняет, когда фокус - PullRequest
0 голосов
/ 28 сентября 2011

После выбора значения в DataGridView ComboBox и нажатия кнопки сохранения в bindingnavigator данные не обновляются в базе данных. Пользователь должен потерять фокус для обновления данных. Есть ли способ решить эту проблему?

Ответы [ 2 ]

1 голос
/ 30 сентября 2011

Weird. Я сделал это недавно, и это сработало как шарм. В моем приложении, когда gridview находится в режиме редактирования (Readonly false), и когда вы выбираете ячейку, она становится выпадающим списком, а когда вы покидаете ячейку, она будет вести себя как текстовое поле. Вот что я сделал

void dgUpdateItems_CellEnter(object sender, DataGridViewCellEventArgs e)
{
    DataGridView dg = (DataGridView)sender;
    if (e.ColumnIndex == dg.Columns["ItemCategory"].Index)
    {
        if (e.ColumnIndex == e.RowIndex)
        {
            dg[e.ColumnIndex, e.RowIndex].ReadOnly = true;
            return;
        }
        DataGridViewComboBoxCell cmbCell = new DataGridViewComboBoxCell();
        ComboUpdate(cmbCell);
        cmbCell.Value = ((DataGridView)sender)[e.ColumnIndex, e.RowIndex].Value.ToString();
        ((DataGridView)sender)[e.ColumnIndex, e.RowIndex] = cmbCell;
    }
}

void dgUpdateItems_CellLeave(object sender, DataGridViewCellEventArgs e)
{
    DataGridView dg = (DataGridView)sender;
    if (e.ColumnIndex == dg.Columns["ItemCategory"].Index)
    {
        if (e.ColumnIndex == e.RowIndex)
            return;

        string str = dg[e.ColumnIndex, e.RowIndex].Value.ToString();
        DataGridViewComboBoxCell cmb = (DataGridViewComboBoxCell)dg[e.ColumnIndex, e.RowIndex];
        string val = cmb.Value.ToString();

        dg[e.ColumnIndex, e.RowIndex] = new DataGridViewTextBoxCell();
        dg[e.ColumnIndex, e.RowIndex].Value = val;

Это какая-то часть моего кода, если не понимаю, дайте мне знать. Вот ссылка проверить это. Это может помочь. ComboBox в DatagridView в режиме редактирования

И извините, забыл сказать вам самое важное, оно работало, даже когда оно сфокусировано. И если вы ищете что-то еще, пожалуйста, бросьте камень в мою голову. Надеюсь, это поможет.

0 голосов
/ 28 сентября 2011

Попробуйте позвонить UpdateSource перед сохранением так:

ComboBox c = Keyboard.FocusedElement as ComboBox;
if ((c != null) && (c.GetBindingExpression(ComboBox.TextProperty) != null))
  c.GetBindingExpression(ComboBox.TextProperty).UpdateSource();

НТН

...