4

我有一个带有 autoComplete 组合框列的绑定 dataGridView ,并且自动完成功能正在工作,只是观察到一种令人讨厌的行为。

当我第一次在自动完成单元格中键入文本并使用 tabKey 移动到下一个单元格时,我的选择不会保留,我选择的内容被清除并且自动完成单元格保留为空。如果 ii 立即使用左箭头键返回到该自动完成单元格并输入文本,我选择的任何内容都会保留,没有任何问题。

所以,我遇到的问题是让单元格保留我的第一个初始选择,现在唯一的解决方法是 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 上,即使我做出了选择,值也会返回为 null。

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

2 回答 2

3

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

private void dataGridView1_CurrentCellDirtyStateChanged(object sender, EventArgs e)
{
    if (dataGridView1.IsCurrentCellDirty)
    {
        dataGridView1.CommitEdit(DataGridViewDataErrorContexts.Commit);
    }
}
于 2012-07-17T11:34:06.550 回答
0

非常简单,这可以通过调用来完成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
于 2014-12-23T10:26:08.660 回答