Outsider's Dev Story

Stay Hungry. Stay Foolish. Don't Be Satisfied.

아~ 졸려...

12시인데 벌써 졸립다니... 이게 뭔일이래.. ㅡ..ㅡ

나에겐 가장 왕성한 때인데... ㅎㅎㅎㅎㅎㅎㅎ

오늘 사내교육에 새로운 사람이 왔다. 흠... 곧 들어갈 우리회사에선 아마도 ASP코딩은 가장 뛰어나지 싶다.

먼가 배우진 않고 웹이나 인생에 대한 많은 얘기를 하셨는데 나로써는 꽤나 공감...

흠... 아무래도 부서결정을 해야할때가 좀 다가오고 있는 관계로(원한다고 가는건 아니지만...)

FC랑 R&D에서 좀 고민을 하고 있었는데 R&D의 포스가 좀 크게 느껴져서 FC쪽으로 약간 쏠린게 사실이었는데...

오늘 오신분의 얘기를 듣다 보니 R&D쪽으로 좀 기운게 사실이긴 하다....

R&D란게 좀 뽀대가 있기도 하고 약간 성향상 그런쪽이 더 맞다고 생각하기 때문에....

개발자의 능력을 키우는데 가장 좋은건 맡은 프로젝트 크기랑 사수의 능력이라고 생각되는데... R&D쪽이 2가지를 가장 잘 갖춘듯 하다. 후자쪽은 ASP부분에서는 확실히.... 흠.. 말씀하시는것도 상당히 공감가는 것두 많고....

FC쪽에 끌린것도 본부장탓도 있긴 하지만 웹2.0같은 거에 지대한 관심(관심만.. ㅡ..ㅡ)이 있기 때문에 현재 그런쪽의 사업은 전혀 안하고 있는듯 하지만 앞으로 할듯이 보였기 때문인데.... 연구소쪽도 그런 부분에서 그닥 뒤쳐지진 않는것 같다.

오늘 수업을 받다보니 내 포스가 좀 발산되었는데 그동안 개발은 전혀 안하면서 그런류에만 관심을 가지다가 웹2.0이 어쩌고 실버라이트가 어쩌고 하는 얘기는 오직 블로그아니면 우리 형하고밖에는 나누지 못하던 얘기였는데 그런 주제가 나와서 솔직히 기뻤다... 실무적인 부분이 아니라면 이런 얘기들은 왠만한 경력자 만큼은 얘기할 수 있기 때문에....

웹2.0에 대해서 얘기하라고 할때는 좀 당황해서 제대로 말을 못했다. 그런건 꽤나 오래 생각한거구 나름 정리되어 있다고 생각했는데 역시 말로 하는건 만만치 않구먼......

그나저나 대충 알고는 있었지만 해야할 일들이 보통이 아니다...... 엄청난 압박.... 그동안 마지막 프로젝트가 나에게는 발등에 떨어진 불이었기 때문에 사내교육에 상당히 소홀히 한게 있긴 한데 이번 교육을 그럴만한 수준이 아니다. 연구소장님 얘기할때 인터넷이랑 멀티태스킹하느라고 상당히 찍힌 분위기인지라.....

jsp랑 ASP.NET 2.0을 3달만에 속성으로 배운 탓에 얕은 지식이 뒤섞여서 정신없는 상황인데 둘다 한다고 하더라도 둘중 하나는 주력으로 해야하고 당장 회사는 ASP.NET을 거의 안쓰는것 같은 분위기이므로 ASP.NET 1.1도 새로 배워야 할 노릇인데다가 JavaScript도 해야 하고 XML에 Json에.. AJAX도 해야하고... 신기술 차원에서 루비온레일즈나 실버라이트, 플렉스 등도  좀 봐야하고 최근에 뜨고 있는 애자일이나 XP도 좀 봐야하고.... html도 하드코딩으로 더 알아야 하고 CSS도 어느정도는 능수능란하게 다뤄야 한다.

환장하겠네... ㅡ..ㅡ 책이나 좀 사야겠다... 쿨럭~
2007/07/19 00:35 2007/07/19 00:35

그리드뷰에 DataBind 시키기

그리드뷰는 기본적으로 SqlDataSource를 통해서 자동화를 통해서 SQL server나 XML이나 연결을 해 줄 수 있지만 내가 원하는대로 데이터를 바인드 시키기를 원할 때가 생겼다.

하려고 했던 것은 쇼핑몰사이트의 리스트를 GridView로 만들었는데 이 리스트가 기본적으로는 모든 물품의 리스트를 보여주고 있었다. 하지만 여러가지의 리스트가 필요했는데 예를 들면 카테고리를 눌렀을때는 카테고리의 물품만 보여줘야 했고 검색을 눌렀을때는 검색의 리스트를 보여주어야 했으며 판매자를 누르면 판매자의 리스트를 보여주어야 했다.

물론 가장 간단한 방법은 페이지를 여러개 만드는거다. 그리드뷰디자인을 하고 똑같은 페이지를 4개찍어낸 다음 데이터소스만 다르게 해놓고 그에 걸맞게 링크를 연결해 주면 된다.

하지만 이런 점은 나중에 수정상의 문제도 있을것 같고 비효율적인 듯이 보였다.

그다음에 생각한 것은 멀티뷰였다. 한파일에 멀티뷰를 넣어놓고 그 안에 뷰를 4개 만들어 놓고 날라온 파라미터 null체크해서 조건만들어서 그에 맞는 뷰를 Activate해주면 된다. 하지만 여기서도 그리드뷰는 4개나 필요했다...

그래서 고민끝에 그리드뷰는 하나만들어 놓고 DataBind를 시키기로 했다.


DataSet set = new DataSet();
SqlDataAdapter ad = new SqlDataAdapter(query, ConfigurationManager.ConnectionStrings["ConnectionString"].ConnectionString);
ad.Fill(set);
return set;

비연결지향으로 연결해서 DataSet으로 원하는 값의 데이터를 모두 받아왔다. 물론 query는 string으로 만은 쿼리문이다. 쿼리문 날리면 DataSet으로 반환해 주는 메서드를 따로 만든 것이다. (중간 메서드들이 있지만 그냥 머 핵심만 보면 되니까...)


GridView1.DataSourceID = "";
GridView1.DataSource = dao.GetDataSet();
GridView1.DataBind();

이걸 aspx.cs 부분에서 그리드뷰에 직접 바인드를 시킨것이다. DataSource부분에 받아온 DataSet을 할당하고 DataBind()를 시키면 된다.

DataSourceID는 GridView1에 자동화로 연결된 DataSouce가 있으면 aspx파일의 소스부분에 이에 대한 부분이 있어서 DataSourceID가 부여된 부분이 있어서 이렇게 바인드 시키면 충돌이 나서 에러가 나기 때문에 DataSourceID를 지워준 것이다.



일단 위처럼 해서 해결하기는 했는데 자세히는 잘 모르겠다. 물론 바인드하는데 여러가지 방법들이 있을 것이다.

처음에는 ArrayList로 받아서 넘겨주려고 했다. 제대로 잘 바인드되고 돌아가기는 했는데 먼가 이상했다. 3개가 떠야 하는데 2개만 뜬다던지 아니면 같은게 2개 뜬다든지 하는 문제가 있었다. 먼가 문제가 있는데 하는 생각에 만지다가...

DataReader를 직접 넘기면 된다고 해서 Reader를 받아서 바인드 시켰더니 이건 바인드는 잘 되는것 같은데 GridView에서 페이징을 사용하기로 해놨더니 "이 데이터는 페이징을 할 수 없다"는 에러메시지가 나왔다. 물론 페이징을 자동화 되어 있는거 말고 따로 만든다면 될지도 모르겠다.

그래서 결국은 비연결지향을 사용해서 DataSet으로...

역시나 자동화 되어 있는건 빠르게 할 수는 있는데 자동화와 수동화의 가운데서 엄청 해메고 있다.. ㅡ..ㅡ



덧)))

더 좋은 방법이 있었다. ㅡ..ㅡ 머 서브쿼리같은거까지 쓰면 좀 그렇긴 하지만 그냥 그리드뷰만 하나만들어놓고 SqlDataSource만 여러개 만들어놓고 연결하면 된다. 그러면 굳이 C#코드에 메서드를 따로 안만들어도 된다. 그리고 소스에서 쿼리문도 고쳐줄수 있으니까.


GridView.DataSourceID = "";
GridView.DataSource = SqlDataSource1;
GridView.DataBind();

2007/07/18 02:16 2007/07/18 02:16