2013-05-16 8 views
0

나는 dbgrids을 피하기 위해 독창적 인 일을 해왔으며, (alphaskins, tslistview) 중 하나를 사용했으며, 좋은 방법 인 것 같습니다.Tlistview - Tlistview와 같은 구성 요소가 있지만 DB 액세스 권한이 있습니까?

문제는 내가이 tlistview에서 선택한 항목에 따라 record/dataset 위치를 모든 tlistview에서 이벤트 onclick을 코딩하지 않으려한다 .. 나는 있습니다 .. tlistview item's caption와 함께 일을하고있을 수있어 같은 이름

다음

내가 피하고 싶은 코드 중 하나입니다 레코드 수 :

with q_find_process do 
begin 
    close; 
    sql.Clear; 
    sql.Add('Select * from t_process where process_name like '+quotedstr(streeview1.Selected.Text)+'); 
    open; 
end; 

그리고 아니,이 항목의 캡션에 레코드의 ID를 넣어하지 않으을 ..!

아이디어가 있으십니까?

누구나 텍스트 텍스트와 텍스트 이외의 많은 레코드를 보여주는 다른 방법을 알고 있습니까? 도구 팔레트의 모든 구성 요소를 모르겠다. 다른 사람이 나에게 제안 해 줄 수 있습니다.

+1

가상 모드의 목록보기. 데이터 세트에서 커서의 위치를 ​​파악하고 항목 (행)의 표시된 개수로 표시 할 데이터를 채 웁니다. – TLama

+0

http://sourceforge.net/projects/tporpheus/? –

+0

도 가능합니다. http://stackoverflow.com/questions/11551099/tlistbox-items-from-database-column –

답변

2

데이터베이스 테이블에서로드 된 목록보기를 사용하는 경우가 있습니다. 당신이 의미하는 바를 이해하지 못합니다 tlistview에서 선택한 항목에 따라 레코드/데이터 세트를 배치하기 위해 모든 tlistview에 onclick 이벤트를 코딩하고 싶지 않으므로 어떻게 표시합니까? 이 문제를 해결했습니다.

기본적으로 각 레코드의 기본 키를 보유하는 하위 항목을 만듭니다. 모든 사용자 인터페이스 코드는 두 개의 목록보기를 사용하고 마지막에는 데이터베이스가 업데이트됩니다. 로딩과 저장 사이의 데이터베이스와의 상호 작용은 없습니다 ('onclick'문제를 피할 수 있습니다). 각 필드의 너비는 Object Inspector에서 설정됩니다. 마지막 하위 항목의 너비는 0입니다 (즉, 표시되지 않음).

목록보기로드 :

srclist.items.clear; 
with qSrcList do 
    begin 
    close; 
    params[0].asdate:= dt; // use date of deposit 
    open; 
    while not eof do 
    begin 
    ListItem:= srclist.Items.Add; 
    ListItem.Caption:= fieldbyname ('kabnum').asstring; 
    ListItem.SubItems.Add (fieldbyname ('price').asstring); 
    ListItem.SubItems.Add (fieldbyname ('duedate').asstring); 
    ListItem.SubItems.Add (fieldbyname ('docket').asstring); 
    ListItem.SubItems.Add (fieldbyname ('id').asstring); 
    next 
    end; 
    close 
    end; 

데이터 저장 :

with dstlist do 
    for index:= 1 to items.count do 
    with qInsert do 
    begin 
    dstlist.itemindex:= index - 1; 
    lvitem:= dstlist.selected; 
    parambyname ('p1').asinteger:= deposit; 
    parambyname ('p2').asinteger:= strtoint (lvitem.SubItems[3]); 
    parambyname ('p3').asfloat:= strtofloat (lvitem.SubItems[0]); 
    execsql; 
    end; 

을 나는이 당신을하는 데 도움이되기를 바랍니다. 이 코드의 컨텍스트 (너무 중요하지는 않음)는 사용자가 은행 입금 양식을 수표로 채우고 싶은 금융 애플리케이션에 있습니다. SrcList는 아직 입금되지 않은 수표를 보유하고 있으며 (주어진 날짜에 몇 개만있을 것입니다) DstList는 이미 지정된 입금 양식에 연결된 수표를 보유합니다.

+0

"lvitem.SubItems [3]"은 ID를 저장하고 (적어도 viewstyle = vsIcon을 사용하여) 숨길 수 있기 때문에 받아 들였습니다. 그래서 좋은 방법입니다. 나는 내가 모든 tlistview에서 "onclick을하고 싶지 않다"고 말했다. 왜냐하면 나는 DBgrid와 같은 컨트롤을 원했기 때문에 레코드를 클릭하면 dbgrid 자체가 데이터 셋의 위치를 ​​지정하지만 코드는 여전히 필요하다. 모든 tlistview에서 이벤트 :),하지만 지금은 같은 이름의 레코드에는 문제가 없습니다! 감사합니다. –

+0

@ FlávioGameiro : 내 프로그램에서 viewstyle은 vsReport입니다. 목록보기를 마우스 오른쪽 버튼으로 클릭하면 제목과 폭 모두 열을 정의 할 수 있습니다. 'subitems [3]'열의 너비는 0이므로 보이지 않습니다. –