DataRepeater 컨트롤 문제 해결(Visual Studio)
이 항목에서는 DataRepeater 컨트롤을 사용하여 작업할 때 일반적으로 발생할 수 있는 문제에 대해 설명합니다.
DataRepeater 키보드 및 마우스 이벤트가 발생하지 않는 경우
키보드 및 마우스 이벤트와 같은 일부 DataRepeater 컨트롤 이벤트가 발생하지 않습니다.이는 의도된 것입니다.DataRepeater 컨트롤 자체는 DataRepeaterItem 개체에 대한 컨테이너이며 런타임에 이 컨트롤에 액세스할 수 없습니다.DataRepeaterItem은 디자인 타임에 이벤트를 노출하지 않습니다.따라서 항목에 포커스가 있을 때 항목을 클릭하거나 키를 누르면 이벤트가 발생하지 않습니다.
Padding 속성이 DataRepeater 컨트롤의 가장자리를 노출할 정도로 큰 값으로 설정된 경우는 예외입니다.이 경우 노출된 여백을 클릭하면 마우스 이벤트가 발생합니다.
이 문제를 해결하려면 Panel 컨트롤을 DataRepeater 컨트롤의 ItemTemplate 섹션에 추가한 다음 나머지 컨트롤을 Panel에 추가합니다.그리고 나서 키보드 및 마우스 이벤트에 대한 Panel 컨트롤의 이벤트 처리기에 코드를 추가할 수 있습니다.
DataRepeater가 바인딩 탐색기 뒤에 부분적으로 숨겨진 경우
처음에 DataRepeater 컨트롤을 폼에 추가한 다음 데이터 소스 창의 데이터 바인딩된 컨트롤을 추가하면 DataRepeater 컨트롤 맨 위에 BindingNavigator 컨트롤이 나타날 수 있습니다.이는 데이터 소스 창의 알려진 한계이며 DataGridView 컨트롤과 같은 다른 컨트롤의 동작과 일치합니다.
디자인 타임에 DataRepeater를 BindingNavigator 컨트롤 아래로 이동하거나 Load 이벤트 처리기에 다음과 같은 코드를 추가할 수 있습니다.
DataRepeater1.Top = ProductsBindingNavigator.Height
dataRepeater1.Top = productsBindingNavigator.Height;
컨트롤이 런타임에 올바르게 표시되지 않는 경우
DataRepeater 컨트롤의 일부 컨트롤은 런타임에 예상한 대로 표시되지 않을 수 있습니다.컨트롤을 ItemTemplate에서 DataRepeaterItem으로 복제하는 데 사용되는 프로세스가 항상 모든 컨트롤의 모든 속성을 확인할 수 있는 것은 아닙니다.예를 들어 디자인 타임에 바인딩되지 않은 ListBox 컨트롤을 DataRepeater 컨트롤에 추가하고 해당 Items 컬렉션을 문자열 목록으로 채우면 런타임에 ListBox가 비워집니다.이는 복제 프로세스에서 Items 속성을 고려할 수 없기 때문입니다.
기본 복제가 완료된 후 발생하는 ItemCloned 이벤트에서 누락된 속성을 복원하여 이와 같은 문제를 해결할 수 있습니다.다음 예제에서는 ItemCloned 이벤트 처리기에서 ListBox 컨트롤의 Items 컬렉션을 복원하는 방법을 보여 줍니다.
Private Sub DataRepeater1_ItemCloned(
ByVal sender As Object,
ByVal e As Microsoft.VisualBasic.PowerPacks.DataRepeaterItemEventArgs
) Handles DataRepeater1.ItemCloned
Dim Source As ListBox =
CType(DataRepeater1.ItemTemplate.Controls.Item("ListBox1"), ListBox)
Dim ListBox1 As ListBox =
CType(e.DataRepeaterItem.Controls.Item("ListBox1"), ListBox)
For Each s As String In Source.Items
ListBox1.Items.Add(s)
Next
End Sub
private void dataRepeater1_ItemCloned(object sender,
Microsoft.VisualBasic.PowerPacks.DataRepeaterItemEventArgs e)
{
ListBox Source = (ListBox)dataRepeater1.ItemTemplate.Controls["listBox1"];
ListBox listBox1 = (ListBox)e.DataRepeaterItem.Controls["listBox1"];
foreach (string s in Source.Items)
{
listBox1.Items.Add(s);
}
}
항목 머리글에 선택 기호가 없는 경우
DataRepeater 컨트롤에서 항목 머리글의 SelectionColor 속성을 변경할 때 일부 색 선택 사항으로 인해 선택 기호가 표시되지 않을 수 있습니다.ItemHeaderSize 속성을 변경하면 선택 기호가 표시되지 않을 수도 있습니다.
선택 기호의 색 및 크기를 변경할 수 없습니다.
SelectionColor를 White로 설정하면 항목이 처음 선택될 때 선택 기호가 표시되지 않습니다.
SelectionColor를 Black으로 설정하면 컨트롤을 선택할 때 선택 기호가 표시되지 않고 컨트롤이 편집 모드에 있을 때 연필 기호가 표시되지 않습니다.
ItemHeaderSize 속성을 11 미만의 값으로 설정하면 항목 머리글에 표시기 기호가 표시되지 않습니다.
PictureBox 컨트롤을 사용하고 DataRepeater 컨트롤의 DrawItem 이벤트에서 DataRepeaterItem의 IsCurrent 속성을 모니터링하여 사용자의 고유한 항목 머리글 및 선택 기호를 제공할 수 있습니다.자세한 내용은 IsCurrent를 참조하십시오.
참고 항목
작업
방법: DataRepeater 컨트롤의 바인딩된 데이터 표시(Visual Studio)
방법: DataRepeater 컨트롤의 바인딩되지 않은 데이터 표시(Visual Studio)
방법: DataRepeater 컨트롤의 레이아웃 변경(Visual Studio)
방법: DataRepeater 컨트롤의 모양 변경(Visual Studio)
방법: DataRepeater 컨트롤의 항목 머리글 표시(Visual Studio)
방법: DataRepeater 항목 추가 및 삭제 사용 안 함(Visual Studio)
방법: DataRepeater 컨트롤의 데이터 검색(Visual Studio)
방법: 두 DataRepeater 컨트롤을 사용하여 마스터/세부 폼 만들기(Visual Studio)