C# DB 코딩 강좌 2008. 11. 14. 21:12

    일단은 앞서 보았듯이 콤보박스는 셋팅이 가능하다

    그럼 콤보의 사촌인 리스트 박스는 어떻게 될까?

    listBox1.DataSource = DT;

    listBox1.DisplayMember = DT.Columns["Expression"].ToString();

    listBox1.ValueMember = DT.Columns["Value"].ToString();

    clip_image001[1]

    당연히 이런방식으로 처리가 될것이다.

    ----------------------------------

    자 여기서 숙제 하나 !

    clip_image002[1]

    이런 체크 리스트 박스를 가지고

    clip_image003[1]

    이런식으로 테두리를 없게 하고 화면을 바탕을 같게하면.. 이런방식으로 처리가 된다.

    즉 가끔 황당(?) 하다기 보다는 체크박스를 일일이 손으로 끌어다 배열하는 경우가 있던데 물론 그게 나쁘다는게 아니라.

    양이 많게되면 감당이 안된다는 것이다.

    또한 문제는 어쩌다 그 항목이라도 하나 늘게되면 얼마나 많은 수정을 해야하는가?

    그런건 어떻게 하면 쉽게 할수 있을까?

    이런방식은 프로그램의 옵션을 줘야 할때 매우 유용할수도 있다.

    -----------------------------------

    자 이제는 트리뷰를 한번 보자.

    트리뷰의 경우는 일반적으로 인간의 머리로는 생각할수가 없다.

    실수다.. 내 머리로는 힘들다. 아마도 당신의 머리로는 크게 문제가 없을듯 하다.

    http://www.devpia.com/MAEUL/Contents/Detail.aspx?BoardID=18&MAEULNo=8&no=1224&ref=1224

    이런글이 있는데.. 나쁘지 앟은듯 하다.

    필요하신분은 참고를 하도록 하고..

    문제는 이런경우에는.. 또 하나의 필드를 늘려야 하거나.. 한정적이게 마련이다.

    하지만 인간이 보기에는 좋을듯 싶다.

    문제는 자유롭게 배치하기 위해서는 어떻게 해야할까?

    즉 어쩔수 없이 우리는 부모노드에 대한 값을 가지고 있는 형태로 DB를 설계해야 될것이다.

    또 ER-win을.. ㅠ.ㅠ 안습이다.

    트리뷰에 대한것은 우리에게 너무나도 친숙한 디렉토리의 개념을 이해하면 된다.

    모두들 한번씩은 겪어야지만 하므로 대부분 전체 디렉토리의 파일을 구하는것들을 한번씩 작성해 보았다고 생각이 든다.

    거의 절대라고 해야할정도로 재귀호출을 피할수 없으므로 트리뷰또한 이 재귀호출을 피할수 없다고 보면 된다 마치 이녀석은 당연히 그래야 한다는것처럼 말이다.

    또는 아래에 내가 적은 폼내부의 그룹박스안에 포함된 컨트롤을 다시금 조사하기 위해서도 재귀호출을 사용했듯이 이녀석 또한 입력에도 재귀호출을 사용해야지만 한다는 이야기다.

    또한 적어줄지 안적어줄지(?)는 모르지만 우리에게 친숙한 "메뉴"구조도.. 이와 유사한 방식으로 대부분 코딩을 한다.(아닌가 나만 그런거야 그랬던거야?)

    뭐 이미 정석(?)적인 코딩이라서 뭐라고 할만한게 없다고 본다.

    요약하자면. // 계층적 구조 = 재귀호출 알고리즘

    이라는 공식이 있다.(내가 만들었던가?)

    이미 널리(?) 알려져 있기도 하고 대부분 알고 있는 내용이라 대충 하고 가자.

    clip_image004[1]

    이런식의 모양을 만들고

    다시금 물리테이블을 만들자..

    물론 실제적인 프로젝트에는 좀 더 많은 정보를 넣기도 한다. 게다가

    몇가지 체크박스라든지 옵션을 주기위한것을 미리 정의해두기도 한다. 그런것들은 어차피 프로젝트에서 실제적인 공통모듈을 만드는 사람들의 이야기니 대충 생략하자.

    clip_image005[1]

    대충 이렇게 또 만들기로 하자.

    CREATE TABLE TreeView

    (

    Seq int identity NOT NULL ,

    TreeViewID varchar(20) NULL ,

    Expression varchar(100) NULL ,

    Parent int NULL ,

    Memo varchar(1000) NULL ,

    ViewSeq char(18) NULL ,

    UseBool char(1) NULL ,

    image image NULL

    )

    Execution Successful

    ALTER TABLE TreeView

    ADD CONSTRAINT XPK트리뷰 PRIMARY KEY NONCLUSTERED (Seq ASC)

    Execution Successful

    Schema Generation Complete

    2 query succeeded.

    "XPK트리뷰 " 이라니.. ER-win은 확실히 버그가 좀 있다.

    뭐 버그야 있던말던.. 예제야 무슨 상관이겠는가.

    자 계속 되는 삽질을 해보도록 하자.

    폼은.

    clip_image006[1]

    이런식의 트리뷰와 오른쪽은 그냥 데이타뷰이다.

    왜냐면.. 데이터가 어떻게 나오는지는 봐야되지 않겠는가 콤보박스처럼 말이다.

    자 이제는 예제를 위한 데이터를 넣어야 할것이다.

    Insert를 또 때려야 하나 ㅜ….ㅠ

    젠장.. 예제 하나 하는데도 이렇게 손질이 많이 가다니

    근데 정말 내가 왜 이걸 적고 있는지..

    나중에 책이라도 하나 써야겠다. 문제는 바닥권의 실력이라 누가 사볼가 싶다만..

    Insert를 때리려고 보니 위에 테이블이 다 null허용을 했네 흐흐.. 귀차니즘이다.

    자 insert를 어케 적어볼까?

    insert into treeview(expression,parent) values('아파트',-1)

    insert into treeview(expression,parent) values('111동',0)

    insert into treeview(expression,parent) values('222동',0)

    insert into treeview(expression,parent) values('333동',0)

    insert into treeview(expression,parent) values('444동',0)

    insert into treeview(expression,parent) values('1호',2)

    insert into treeview(expression,parent) values('1호',1)

    insert into treeview(expression,parent) values('1호',5)

    뭐가 뭔지는 모르겠고 대충 적자.

    clip_image007[1]

    이렇게 그려지게 될것이다.

    이 소스는

    닷넷 프로그래밍 정복의 "김상형"씨의 소스를 적당히 수정한것임을 미리 밝힌다.

    clip_image008[1]

    사용법은

    clip_image009[1]

    이런식이 될것이다.

    원본 위치 <http://www.devpia.com/MAEUL/Contents/Detail.aspx?BoardID=18&MAEULNO=8&no=1588&page=1>

'C# DB 코딩 강좌' 카테고리의 다른 글

C#을 이용한 DB코딩 13  (0) 2008.11.14
C#을 이용한 DB코딩 12  (0) 2008.11.14
C#을 이용한 DB코딩 11  (0) 2008.11.14
C#을 이용한 DB코딩 10  (0) 2008.11.14
C#을 이용한 DB코딩 9(인터페이스)  (0) 2008.11.14
C#을 이용한 DB코딩 7  (0) 2008.11.14
C#을 이용한 DB코딩 6(TcpChannel)  (1) 2008.11.14
C#을 이용한 DB코딩 5  (0) 2008.11.14
C#을 이용한 DB코딩 4(Virtual PC)  (0) 2008.11.14
C#을 이용한 DB코딩 3  (0) 2008.11.14
posted by 삶의여유로움
: