2009-12-31 3 views
2

사용자가 UserControl을 표시하도록 사용자 지정 DataGridViewCell을 만들었습니다. 사용자가 셀을 편집하기 시작하면 UserControl이 표시됩니다. 기본적으로 컨트롤에는 코드에서 쉽게 처리 할 수있는 제안 목록이 포함 된 TextBox이 포함되어 있습니다.
목록의 크기를 올바르게 조정하고 원하는 내용을 정확하게 포함하도록 코드를 만들었습니다. 지금 내가 가진 문제는 컨트롤이 화면에 제대로 그려지지 않고, ListBox이 행 안의 "내부"로 그려져 있고 행보다 훨씬 높기 때문에 화면에 표시되지 않는다는 것입니다.사용자 지정 DataGridViewCell 내에서 UserControl 호스팅

DataGridView 위에 컨트롤을 그리려면 어떻게해야합니까?

답변

2

아마도 ListBox를 별도의 팝업 폼에 넣어야 할 것입니다. 행운을 빕니다.

또는 ListBox를 GridView의 부모 폼에 넣은 다음 BringToTop을 호출하여 그리드보기 맨 위에 있는지 확인할 수 있습니다.

0

Faking alternative controls within a DataGridView control in Win Forms 2.0을보고 싶습니다. 처럼 컨트롤이 DataGridView 내에서 호스팅되는 것처럼 보이지만 실제로는 셀 위에 잘 배치됩니다. 큰 DateTimePickers와 하나의 ComboBox에서이 기능을 사용하고 있습니다. 링크에서

샘플 코드 :

protected void dgCategory_CellClick(object sender, DataGridViewCellEventArgs e) 

{ 

//set Date Picker to false when initially click on cell 

     if (dtPicker.Visible) 
      dtPicker.Visible = false; 
     if (e.ColumnIndex == 2) 
     { 
     //set date picker for category datagrid 
     dtPicker.Size = dgCategory.CurrentCell.Size; 
     dtPicker.Top = dgCategory.GetCellDisplayRectangle(e.ColumnIndex, e.RowIndex, true).Top; 
     dtPicker.Left = dgCategory.GetCellDisplayRectangle(e.ColumnIndex, e.RowIndex, true).Left; 

     if (!(object.Equals(Convert.ToString(dgCategory.CurrentCell.Value), ""))) 
      dtPicker.Value = Convert.ToDateTime(dgCategory.CurrentCell.Value); 
     dtPicker.Visible = true; 

     } 
} 

private void dtPicker_ValueChanged(object sender, EventArgs e) 
{ 
     dgCategory.CurrentCell.Value = dtPicker.Value; 
     dtPicker.Visible = false; 

} 
관련 문제