2013-06-07 2 views
0

Visual Studio 2010에서 datarepeater 컨트롤 버전 10.0을 사용하고 있습니다. 마우스를 사용할 때 CurrentItemIndex가 텍스트 상자 이벤트를 떠나기 전에 업데이트 된 것으로 보입니다. 다음 행으로 이동합니다. 그래서, 텍스트 상자에서 값을 가져올 때, 나는 연관된 ItemIndex가 아닙니 다. 키보드가 다음 행으로 이동하는 데 사용되는 경우에는 발생하지 않습니다. 누구나이 일이 일어나는 것을보십시오. datarepeater의 버전 9.0은이 방법으로 작동했습니다.Visual Studio 2010에서 VB Datarepeater 컨트롤 - 마우스를 사용할 때 텍스트 상자를 떠나기 전에 currentItemIndex가 업데이트되었습니다.

답변

0

직접 답변을 드리기 위해 여기에 C# 코드 조각이 있습니다. 귀하의 질문에 묵시적으로 TextBox 개체 (또는 다른 컨트롤)가 이미 있다고 가정합니다. 또한 이벤트 핸들러 (예 : TextChanged) 내부에 있다고 가정합니다. 아직 수행하지 않았다면 DataBuffer는 DataBuilderItem 템플릿 컨트롤을 참조하기 때문에 TextBox1 또는 유사한 개체를 사용하지 마십시오. 즉, 디자인 타임에 선언 된 TextBox 컨트롤이 아니라 개체 보낸 사람 매개 변수를 사용해야합니다. 관심있는 데이터 행에 대한 개별 제어 할 수 있습니다.

TextBox itemTextBox = sender as TextBox; 

    //* DataRepeaterItem is a control which contains other controls for each data "row" 
    DataRepeaterItem drItem = itemTextBox.Parent as DataRepeaterItem; 

    //* Retrieve the particular data item 
    int idx = drItem.ItemIndex; 

    //* If DataRepeater is bound to a BindingSource, for example, 
    //* one can retrieve the underlying data item 
    object dataItem = myBindingSource.List[idx]; 

나는 다양한 버그와입니다 DataRepeater와 제어 초점 및 데이터 업데이트로 문제를 경험했습니다. LostFocus, CurrentItemChanged 등의 이벤트가 발생하는 순서는 정확히 보장 할 수 없습니다. 관찰 한 바와 같이 DataRepeater에서 마우스를 사용하거나 폼의 다른 컨트롤에서 마우스를 사용하거나 다른 컨트롤에서 마우스를 사용하는지 여부에 따라 다릅니다. 키보드. 실제로 확립 된 알고리즘이있을 수 있지만 문서와 다른 점을 발견했습니다. 데이터 처리 프레임 워크 (예 : BindingSource, CurrencyManager)가 이러한 이벤트에 가입하고 예상하거나 원하지 않는 것을 순서대로 업데이트 할 때 상황은 복잡합니다. 이러한 문제를 처리하는 방법에 대한 제안은 없지만 위의 코드가 사용자가 속한 컨트롤의 특정 인덱스와 데이터에 최소한 액세스 할 수 있기를 바랍니다.

+0

감사합니다. 나는하고 있었다. –

+0

@Rick : 질문에 답을 표시해 주시겠습니까? 감사. –