DataGridView中自动完成组合框列不保留初始细胞休假值(DataGridView autoC

2019-09-19 14:57发布

我有一个自动完成组合框柱绑定的dataGridView,并自动完成工作,只是我观察一个行为这就是升技刺激性。

当我第一次键入自动完成单元格文本,并移动到与tabKey下一个单元格,我的选择是不保留,永远我选择了什么被清除,自动完成单元格为空。 如果是Ⅱ立即使用左箭头键返回到自动完成单元格并键入文字,我选择保留有任何问题,什么都。

所以,这个问题我有越来越细胞保留我的第一个初始选择,唯一的工作,现在各地是按Tab键到下一个单元格,然后返回到这个问题的自动完成组合框细胞和所有做打字全部结束。 在这一点上,它的工作原理。

难道还有一些事件中,我应该处理提交对细胞离开我选定的文本?

码:

private void dataGridView1_EditingControlShowing(object sender, DataGridViewEditingControlShowingEventArgs e)
    {
        if (e.Control is ComboBox)
        {
                ((ComboBox)e.Control).DropDownStyle = ComboBoxStyle.DropDown;
                ((ComboBox)e.Control).AutoCompleteMode = System.Windows.Forms.AutoCompleteMode.SuggestAppend;
                ((ComboBox)e.Control).AutoCompleteSource = AutoCompleteSource.ListItems;
        }
    }

编辑:在下面CellLeave,值也返回空,即使我已经做出了选择。

 private void dataGridView1_CellLeave(object sender, DataGridViewCellEventArgs e)
    {
        var Row = this.dataGridView1.CurrentRow.Index;
        string value = this.dataGridView1["itemID", Row].Value.ToString();
    }

Answer 1:

处理CurrentCellDirtyStateChanged事件解决了这个问题,我希望这不会导致到一些其他的问题,但!

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


Answer 2:

很简单,这可以通过调用来完成notifycurrentcelldirty event on editingcontrol showing event.

Private Sub dataGridView1_EditingControlShowing(sender As Object, 
                         e As Forms.DataGridViewEditingControlShowingEventArgs) 
                         Handles Me.EditingControlShowing
            dataGridView1.NotifyCurrentCellDirty(True)
End Sub

Private Sub dataGridView1_CurrentCellDirtyStateChanged(sender As Object, e As EventArgs) Handles Me.CurrentCellDirtyStateChanged
            If IsCurrentCellDirty = True Then
                CommitEdit(Forms.DataGridViewDataErrorContexts.Commit)
            End If
End Sub


文章来源: DataGridView autoComplete comboBox column not retaining values on initial cell leave