2012-04-27 2 views
3

일부 열이있는 TcxGrid를 구현했습니다. 이 격자의 마지막 열에있는 셀에는 TcxEditButton 유형의 단추가 들어 있습니다.TcxGrid의 일부 행에 TcxEditButton 숨기기

그리드의 내용은 사용자가 입력하거나 부모 폼을 생성 할 때 텍스트 파일에서로드됩니다.

그리드의 값에 따라이 버튼 중 일부를 숨기고 싶습니다. 버튼의 가시성을 결정하는 값은 그리드 메모리 데이터 세트에서 읽거나 그리드의 숨겨진 열에서 직접 읽을 수 있습니다.

내 문제는 그 값에 대한 검사를 수행하고 버튼 가시성 속성을 설정하는 올바른 이벤트를 찾을 수 없었습니다. 그리드 테이블과 버튼이있는 열 모두에서 모든 종류의 이벤트를 사용하려고했습니다.

버튼 항목을 가져 오는 방법과 그리드 그리기를 설정할 때 동시에 설정할 수있는 방법에 대한 제안이 있으십니까?

해결책 : 허용되는 해결 방법은 수정 된 버전을 사용하여 종료하십시오.

procedure TFrame_cx_Element_Inntasting_Kriterier.cxGrid_InntastingDBTVPropertiesGetProperties(
    Sender: TcxCustomGridTableItem; ARecord: TcxCustomGridRecord; 
    var AProperties: TcxCustomEditProperties); 
begin 
    if ARecord.Values[cxGrid_ColumnWithValidatedValue.Index] = true then 
    AProperties := cxEditRepository1ButtonItem1.Properties 
    else 
    AProperties := cxEditRepository1Label1.Properties; 
end; 

답변

4

형식이 TcxEditButton 인 열의 OnGetProperties 이벤트를 사용하십시오.

ARecord를 사용하면 열 색인을 기반으로 동일한 행에 대해 다른 열의 값을 가져올 수 있습니다.

속성을 설정하는 가장 쉬운 방법은 TcxEditRepository에서 두 개의 미리 정의 된 TcxEditButtons (예 : ButtonsVisible 및 ButtonsInvisible)를 사용하는 것입니다.

이벤트보다 같이 보일 것입니다 :

procedure TForm1.cxGrid1TableView1EditButtonColumnGetProperties(
    Sender: TcxCustomGridTableItem; ARecord: TcxCustomGridRecord; 
    var AProperties: TcxCustomEditProperties); 
var 
    Value: Variant; 
    Buttons: TcxEditButtons; 
    ButtonEnabled : Boolean; 
begin 
    if VarIsNull(ARecord.Values[cxGrid1TableView1ColumnToCheck.Index]) then 
    AProperties := ButtonsInvisible.Properties; 
    // or AProperties := ButtonsVisible.Properties depending on what you want/need 

    Value := ARecord.Values[cxGrid1TableView1ColumnToCheck.Index]; 
    if (Value = ValueWhenVisible) then 
    AProperties := ButtonsVisible.Properties 
    else 
    AProperties := ButtonsInvisible.Properties; 
end; 

희망이 바른 길에 당신을 얻을 것이다.

+0

예이 이벤트를 사용하면 올바른 길로 가야합니다. 결국 csEditRepository를 정의해야했습니다. 두 가지 스타일을 추가하십시오. 하나는 버튼이 보이지 않아야하고 다른 하나는 보이도록해야합니다. 참조 용 코드를 게시 할 예정입니다. –

+0

선언되지 않은 식별자 "TcxCustomEditProperties"가 표시됩니다. 내가 포함해야 할 도서관을 알려주시겠습니까? –

0

TcxGridDBTableView에서 OnInitEdit 이벤트를 사용하십시오.

+0

세포가 편집 모드로 전환되기 바로 전에 oninitedit이 트리거됩니다. 이것은 내가 생각하는 것이 아니다. 열의 모든 셀을 그릴 때마다 호출되는 이벤트가 필요하며 현재 행 (행 인덱스 또는 mem 데이터 세트에서 직접)의 셀에서 데이터를 읽을 수 있고 어디에서 실제 버튼 항목 (셀이 아니라 셀의 내용). –

관련 문제