2011-08-29 2 views
1

DataGridView 바인딩을 올바르게 내 datatable에 가져 왔지만 자동 완성이 텍스트 상자 열 중 하나에서 올바르게 작동하려고합니다. 자동 완성 기능은 작동하지만 데이터 그먼트 뷰의 열 하나만으로 제한하려고합니다. 현재 모든 열에 대해 또는 전혀 수행하지 않습니다. 어떤 아이디어? 아래 코드.Textbox DataGridView Winform에서 자동 완성

private void dataGridDetail_EditingControlShowing(object sender, DataGridViewEditingControlShowingEventArgs e) 
    { 
     if (dataGridDetail.CurrentCell.ColumnIndex == 2) 
     { 
      var source = new AutoCompleteStringCollection(); 
      String[] stringArray = Array.ConvertAll<DataRow, String>(products.Select(), delegate(DataRow row) { return (String)row["code"]; }); 
      source.AddRange(stringArray); 

      TextBox prodCode = e.Control as TextBox; 
      if (prodCode != null) 
      { 
       prodCode.AutoCompleteMode = AutoCompleteMode.SuggestAppend; 
       prodCode.AutoCompleteCustomSource = source; 
       prodCode.AutoCompleteSource = AutoCompleteSource.CustomSource; 

      } 
     } 
    } 

답변

2

if 조건은 사용자가 현재 세 번째 열을 선택했는지 확인하는 것입니다.

해당 열을 모두 편집 가능하게 설정 하시겠습니까? 아니면 현재 선택된 행의 셀 하나만? 양식에서 다른 버튼에 의해 편집이 어떻게 트리거됩니까? 이 경우 편집이 활성화되면 모든 셀을 선택할 수 있습니까?

올바른 열을 색인화하고 자동 완성을 사용하도록 설정해야합니다.

private void dataGridDetail_EditingControlShowing(object sender, DataGridViewEditingControlShowingEventArgs e) 
{ 
    if (dataGridDetail.CurrentCell.ColumnIndex == 2) 
    { 
     var source = new AutoCompleteStringCollection(); 
     String[] stringArray = Array.ConvertAll<DataRow, String>(products.Select(), delegate(DataRow row) { return (String)row["code"]; }); 
     source.AddRange(stringArray); 

     TextBox prodCode = e.Control as TextBox; 
     if (prodCode != null) 
     { 
      prodCode.AutoCompleteMode = AutoCompleteMode.SuggestAppend; 
      prodCode.AutoCompleteCustomSource = source; 
      prodCode.AutoCompleteSource = AutoCompleteSource.CustomSource; 

     } 
    }else 
      prodCode.AutoCompleteCustomSource = null; 
} 
+0

: else 문에 라인이 변수는 자신의 코드에서

따라서 현재 컨텍스트에 존재하지 않는 유형의 오류가 발생합니다 때문에, 그것을 조금 개선했다 전체 세 번째 열을 자동 완성으로 편집 가능하게 만듭니다. 늘어나는만큼 내가 위의 코드를 이해 ... 편집 컨트롤을 보여주는 세포가 datagridview에서 편집 될 때마다 발생합니다. 그런 다음 세 번째 열만 자동 완성을 수신하는지 확인합니다. – user526549

+0

아니요 사용자가 현재 세 번째 열의 DataGrid에서 셀을 클릭했는지 확인합니다. – kmcc049

+1

괜찮 았어. 나를 올바른 방향으로 가리켜 주셔서 감사합니다. 나중에 오늘 내 솔루션을 게시하겠습니다. – user526549

5

prodCode.AutoCompleteCustomSource를 해제하려고! 예

private void dataGridDetail_EditingControlShowing(object sender, DataGridViewEditingControlShowingEventArgs e) 
{ 
    if(dataGridDetail.EditingControl.GetType()==typeof(DataGridViewTextBoxEditingControl)) 
    {  
     TextBox prodCode = e.Control as TextBox;   
     if (dataGridDetail.CurrentCell.ColumnIndex == 2) 
     {       
     var source = new AutoCompleteStringCollection(); 
     String[] stringArray = Array.ConvertAll<DataRow, String>(products.Select(), delegate(DataRow row) { return (String)row["code"]; }); 
     source.AddRange(stringArray); 

     TextBox prodCode = e.Control as TextBox; 
     if (prodCode != null) 
     { 
      prodCode.AutoCompleteMode = AutoCompleteMode.SuggestAppend; 
      prodCode.AutoCompleteCustomSource = source; 
      prodCode.AutoCompleteSource = AutoCompleteSource.CustomSource; 

     } 
     } 
     else { prodCode.AutoCompleteCustomSource = null; } 
    } 
} 
+0

prodCode가 범위를 벗어났습니다. – Hisham

0

Abuleen의 제안은 최고입니다 : 올바른 열 수없는 경우