4

autoComplete 콤보 상자 열이있는 바운드 DataGridView가 있는데 자동 완성 기능이 작동하는 것을 제외하고 한 가지 동작을 관찰하고 있습니다.DataGridView autoComplete 초기 셀의 값을 유지하지 않는 comboBox 열

처음에 자동 완성 셀에 텍스트를 입력하고 tabKey를 사용하여 다음 셀로 이동하면 선택 항목이 유지되지 않고 선택한 항목이 지워지고 자동 완성 셀이 null로 남습니다. ii가 바로 왼쪽 화살표 키를 사용하여 해당 자동 완성 셀로 돌아가 텍스트를 입력하면 내가 선택한 항목이 문제없이 유지됩니다.

그래서 문제는 셀이 내 첫 번째 초기 선택을 유지하도록하는 것입니다. 현재 유일한 해결 방법은 다음 셀을 Tab로 누른 다음이 문제가있는 autoComplete 콤보 상자 셀로 돌아가서 모든 모든 문자 입력을 수행하는 것입니다. 위에. 이 시점에서 작동합니다.

셀 삭제시 선택한 텍스트를 처리해야하는 일부 이벤트가있을 수 있습니까?

코드 :

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)로 반환됩니다. CurrentCellDirtyStateChanged 이벤트를 처리

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

답변

3

문제를 해결, 내가 그것을하지만 다른 문제로 발생하지 않습니다 바랍니다!

private void dataGridView1_CurrentCellDirtyStateChanged(object sender, EventArgs e) 
     { 
      if (dataGridView1.IsCurrentCellDirty) 
      { 
       dataGridView1.CommitEdit(DataGridViewDataErrorContexts.Commit); 
      } 
     } 
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 
를 호출하여 수행 할 수 있습니다

관련 문제