0

DataGridViewComboBoxColumn에서 별난 결과가 있습니다.DataGridComboBoxColumn은 CellEnter에서 첫 번째 값을 표시합니다.

1) 값이 설정되어 있지 않고 드롭 다운 화살표가 아닌 셀을 클릭하면 옵션의 첫 번째 값이 값으로 표시되고 셀을 클릭하면 빈 페이지로 돌아갑니다 값. 선택한 값이 없기 때문에 오해의 소지가 있지만 셀을 클릭하기 전까지는 첫 번째 값을 보여줍니다.

하나 개의 솔루션은 이미 값이있는 셀을 선택하면

2), 다음 않는 셀을 선택 ... 그러나 나는 여전히 다음 문제로 고통하고, 첫 번째 옵션은 빈 만드는 것이었다 그렇지 않으면 원래 선택한 값이 선택된 값이없는 셀에 표시됩니다. 다시 말하지만, 셀을 클릭하면 지울 수 있지만 다시 오해의 소지가 있습니다.

나는 이것을 오해의 소지가 없게 만들고 싶습니다 ... 해결책을 아는 사람은 누구입니까?

DataGridViewComboBoxColumn col = new DataGridViewComboBoxColumn(); 

DataTable dt = new DataTable(); 
dt.Columns.Add("f_Id"); 
dt.Columns[0].DataType = typeof(string); 
dt.Columns.Add("f_Desc"); 
dt.Columns[1].DataType = typeof(string); 

for (int i = 0; i < values.Count(); i++) 
{ 
    dt.Rows.Add(values[i], values[i]); 
} 

col.DataSource = dt; 
col.DisplayMember = dt.Columns[1].ColumnName; 
col.ValueMember = dt.Columns[0].ColumnName; 
col.HeaderText = header; 
col.Name = header; 

DataGridView1.Columns.Add(col); 
+0

아무도 이것에 대해 전혀 모른다. 이것은 마이크로 소프트의 디폴트이며, 실제로 성가신 일입니다. – Tizz

답변

1

이것은 잠시 동안 나를 괴롭 히고 있으며 Zeeshanef의 코드는 도움이되었지만 여전히 완전히 해결하지는 못했습니다. 추가 조사에 DefaultValuesNeeded 메서드를 사용하여 일부 기본값을 설정하면 셀 값이 설정 될 수 있지만 EditingControlShowing 메서드에 표시되는 combobox 컨트롤에 빈 값/텍스트가있는 것으로 나타났습니다. 나는 다음과 같이 코드를 수정하여 해결했다 :

private void datagridview1_EditingControlShowing(object sender, DataGridViewEditingControlShowingEventArgs e) 
    { 
     if (e.Control is ComboBox)     
     { 
      ComboBox comboBox = (ComboBox)e.Control; 
      if (datagridview1.CurrentCell.Value == null 
       || string.IsNullOrEmpty(datagridview1.CurrentCell.Value.ToString()) 
       || string.IsNullOrEmpty(comboBox.SelectedText) 
       ) 
      { 
       comboBox.SelectedIndex = -1; 
      }    
     } 
    } 
1

나는 또한이 문제를 찾고이 문제를 해결했습니다. DatagridView의 다음 이벤트를 만들고 [comboboxcolumnNo]를 datagridcomboboxcolumn 번호로 설정하십시오.

이제 combobox 열에서 포커스를 가져올 때마다 현재 셀 값이 null인지 확인하고 null 인 경우 아무 것도 표시하지 않는 combobox의 -1 인덱스를 표시합니다.

private void datagridview1_EditingControlShowing(object sender, DataGridViewEditingControlShowingEventArgs e) 
    { 
     if (datagridview1.CurrentCell.ColumnIndex == comboboxcolumnNo && e.Control is ComboBox) 
     { 
      ComboBox comboBox = (ComboBox)e.Control; 
      if (datagridview1.CurrentCell.Value == null) 
      { 
       comboBox.SelectedIndex = -1; 
      } 
     } 
    }