안녕하세요,
각각 데이터 테이블의 해당 열 값을 모두 포함하는 여러 목록 상자가있는 대화 창을 만들려고합니다. 목록에서 하나 이상의 항목을 선택하면 나머지 목록의 항목이 해당 선택에 따라 필터링되기를 원합니다. 아래에서 설명한 내용을 구현했지만 여기에 있습니다. 목록 하위 집합 인덱스를 아래와 같이 정수로 하드 코딩하는 대신 루프로 대화 창을 채우면 해당 시간에 i의 현재 값으로 함수가 호출됩니다. 루프에서 목록 상자를 만들 때 걸린 값 대신 실행. 스크립팅 가이드를 읽고 Eval (Eval Expr (Expr ())) 및 Eval Substitute (Expr (), Expr ()))를 포함한 여러 옵션을 시도했지만 작동하지 않습니다. 나는 이제 전체 표현식을 루프에서 긴 문자열로 작성하고 Eval (Parse ()) 'ing하지만 그것은 어리석은 것처럼 보입니다. 누군가 여기에서 적절한 구문으로 나를 도울 수 있습니까?
감사,
요한
Names Default To Here( 1 );
If( !Namespace Exists( "fq" ),
New Namespace(
"fq"
)
);
dt = New Table( "Sample data",
Add Rows( 9 ),
New Column( "id",
Character,
"Nominal",
Set Values( {"a", "a", "a", "b", "b", "b", "c", "c", "c"} )
),
New Column( "value",
Character,
"Nominal",
Set Values( {"A", "B", "C", "D", "E", "F", "G", "H", "I"} )
),
New Column( "val2",
Character,
"Nominal",
Set Values( {"one", "two", "three", "one", "two", "three","one", "two", "three"} )
)
);
filterSelected = Function( {dt, values, index},
/*
Sorts displayed values in all list boxes based on selection
*/
columns = fq:filterColumns;
filters = fq:filters;
selectedColum = Remove From( columns, index )[1];
selctedFilter = Remove From( filters, index )[1];
rows = dt << Get rows where( Contains( values, as Column( dt, selectedColum ) ) );
// If nothing is selcted, all values should be chosen
If(Length(values)==0,
rows = dt << get rows where(!Ismissing(As Column(dt, selectedColum)))
);
// Set list items according to selection
Local( {j = 1},
For( j = 1, j <= N Items( filters ), j++,
filters[j] << Set items( Column( dt, columns[j] )[rows] )
)
);
);
getSelection = Function( {},
Local( {j =1},
For( j=1, j <= N Items(fq:filters), j++,
print(fq:filterColumns[j], fq:filters[j] << get items());
);
);
);
nestedFilters = Function( {filtercolumns},
fq:filtercolumns = filtercolumns;
dialog = New Window( "Fetch rows matching:",
Show Menu( 0 ),
show toolbars( 0 ),
Border Box( Top( 20 ), Bottom( 20 ), Left( 10 ), Right( 10 ),
V List Box(
Align( right ),
filter_boxes = V List Box(),
H List Box(
ok_button = Button Box( "OK" ),
cancel_button = Button Box( "Cancel", dialog << close window )
)
)
),
ok_button << Set function(
getSelection();
dialog << close window;
)
);
fq:filters = {};
fq:all_rows = {};
//for(i=1, i<=N Items(filtercolumns), i++,
filter_boxes << append( Text Box( fq:filtercolumns[1], <<SET font="" style=""></SET>이 시도
for( i = 1, i <= N Items( filtercolumns ), i++,
eval(
evalexpr(
filter_boxes << append( Text Box( fq:filtercolumns[Expr( i )], <<SET font="" style=""></SET>"1"케이스를 사용하고 1을 expr (i)로 변경하고 eval / evalexpr 내부의 i 루프에 넣었습니다.
이 기회를 주셔서 감사합니다! 불행히도 과거에 직면했던 것과 동일한 문제가 발생합니다. 목록에서 선택하면 filterSelected 함수가 현재 값으로 호출되어 i (예 : 4)가되어 첨자 범위 오류가 발생합니다.

내가 할 수있는 건 이거지만 그건 그냥 ... 바보 같네요 ...
expression = "";
for( i = 1, i <= N Items( fq:filtercolumns ), i++,
expression = expression ||
"filter_boxes << append( Text Box( fq:filtercolumns[" || char(i) || "], <<SET font="" style=""></SET>