다음을 통해 공유


DataRepeater 컨트롤 문제 해결(Visual Studio)

업데이트: 2008년 7월

이 항목에서는 DataRepeater 컨트롤을 사용하여 작업할 때 일반적으로 발생할 수 있는 문제에 대해 설명합니다.

DataRepeater 키보드 및 마우스 이벤트가 발생하지 않는 경우

키보드 및 마우스 이벤트와 같은 일부 DataRepeater 컨트롤 이벤트가 발생하지 않습니다. 이는 의도된 것입니다. DataRepeater 컨트롤 자체는 DataRepeaterItem 개체에 대한 컨테이너이며 런타임에 이 컨트롤에 액세스할 수 없습니다. DataRepeaterItem은 디자인 타임에 이벤트를 노출하지 않습니다. 따라서 항목에 포커스가 있을 때 항목을 클릭하거나 키를 누르면 이벤트가 발생하지 않습니다.

Padding 속성이 DataRepeater 컨트롤의 가장자리를 노출할 정도로 큰 값으로 설정된 경우는 예외입니다. 이 경우 노출된 여백을 클릭하면 마우스 이벤트가 발생합니다.

이 문제를 해결하려면 Panel 컨트롤을 DataRepeater 컨트롤의 ItemTemplate 섹션에 추가한 다음 나머지 컨트롤을 Panel에 추가합니다. 그리고 나서 키보드 및 마우스 이벤트에 대한 Panel 컨트롤의 이벤트 처리기에 코드를 추가할 수 있습니다.

DataRepeater가 바인딩 탐색기 뒤에 부분적으로 숨겨진 경우

처음에 DataRepeater 컨트롤을 폼에 추가한 다음 데이터 소스 창의 데이터 바인딩된 컨트롤을 추가하면 DataRepeater 컨트롤 맨 위에 BindingNavigator 컨트롤이 나타날 수 있습니다. 이는 데이터 소스 창의 알려진 한계이며 DataGridView 컨트롤과 같은 다른 컨트롤의 동작과 일치합니다.

디자인 타임에 DataRepeaterBindingNavigator 컨트롤 아래로 이동하거나 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 속성을 변경하면 선택 기호가 표시되지 않을 수도 있습니다.

선택 기호의 색 및 크기를 변경할 수 없습니다.

  • SelectionColorWhite로 설정하면 항목이 처음 선택될 때 선택 기호가 표시되지 않습니다.

  • SelectionColorBlack으로 설정하면 컨트롤을 선택할 때 선택 기호가 표시되지 않고 컨트롤이 편집 모드에 있을 때 연필 기호가 표시되지 않습니다.

  • ItemHeaderSize 속성을 11 미만의 값으로 설정하면 항목 머리글에 표시기 기호가 표시되지 않습니다.

PictureBox 컨트롤을 사용하고 DataRepeater 컨트롤의 DrawItem 이벤트에서 DataRepeaterItemIsCurrent 속성을 모니터링하여 사용자의 고유한 항목 머리글 및 선택 기호를 제공할 수 있습니다. 자세한 내용은 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)

개념

DataRepeater 컨트롤 소개(Visual Studio)

변경 기록

날짜

변경 내용

원인

2008년 7월

추가된 항목입니다.

SP1 기능 변경