통합검색
· 마을서비스란?  · 포럼마을  · 일반마을  · 테마마을  · 마을랭킹  · 활동왕
· 덱스퍼트란?  · TECBOX   · PRSBOX   · 이용안내  
· DEXT제품군  · 솔루션베이  · S/W & ESD 컴포넌트
· 프로그램베이
· LiveSeminar  · LiveConference
WPF & Silverlight 포럼마을입니다.
  마을등급 WPF & Silverlight   이 마을은 포럼마을 입니다이 마을은 자유가입제 마을 입니다 마을소개 페이지로 이동 전입신청
마을촌장촌장 서학수 주민 728 since 2008-07-17
우리마을 공지사항
질문&답변
강좌&팁
자유게시판
자료실
앨범
[마을 게시판]
WPF 강좌
랑데브 게시판
칼럼 게시판
개발자 고충상담
Dev Talk
자유토론방
벼룩시장
재나미 우스개
구인/프로젝트 정보
사람인 채용 게시판
  고객지원 게시판
마이 데브피아
 나의 e-Money 내역
 활동왕 My Page
 스크랩한 게시글보기
 쪽지관리
 주소록관리

 강좌&팁
 Silverlight 4.0 ...Login 1  | Silverlight 2011-04-06 오후 2:15:08
 kaki104  kaki104님께 메시지 보내기kaki104님을 내 주소록에 추가합니다.kaki104님의 개인게시판 가기 번호: 141 추천:0  / 읽음:6,501

-주저리주저리

 

실버라이트4를 접한지는 불과 몇개월 전이다. 그전까지는 주로 asp.net이나 스마트 클라이언트 같은

 

프로젝트만을 하고 있었으니.. 처음에 실버라이트를 접하기 전까지 어떤 언어든지 대충

 

시작해서 일단 화면 몇개 만들어보면 감이 잡히고, 그냥 그렇게 화면을 만들면 끝이였다..

 

그래서 실버라이트도 처음에는 데모페이지 보니 화려한 UX를 가지고 있구나..

 

머 그대로 따라하면 다 만들 수 있겠지..라고 생각하고 있었는데..

 

...

 

사부의 말이 생각난다..

 

제자 중에 책을 5번 본 사람이 있었는데..

 

결국 책으로는 답이 앙나온다고 생각하고 배우러 와서

 

깨닮음을 얻은 사람이 있었다고..

 

책 한번 봐서 이해 앙대면 5번 봐도 이해 앙댄단다..

 

계속 보면 짐승이라는..

 

...

 

실버라이트4는 진짜 근본부터가 기존 프로그램과는 다르다..

 

기본 적으로 데이터를 읽어와서 뿌리고 조작하고 하는 일련의 과정을

 

모두 스트림라인드 뷰 엔진(Streamlined View Engin)을 이용하고

 

타이틀리 커플드(Tightly Coupled) 방식이 아닌 루즐리 커플드(Loosly Coupled) 방식의 코딩을 지향한다

 

음..이런건 머릿 속에는 있지만 실제 만들어봐야 피부로 느껴진다는..ㅋ

 

-주저리주저리 끝

 

 

 

로그인 화면을 만들고 시작해야겠당... 음..일단 메신저 스타일로 작고 아담 사이즈로 크기

 

만들고.. 음음.. 대충 로그인 아이디 입력하는데랑 패스워드 입력하는 칸 만들고..

 

그런데..아이디는 눈에 보여지는데..패스워드는 보이면 앙대자나;;

 

패스워드는 어떻게 입력시켜야하는겨..

 

툴박스를 이리저리 뒤져보니 패스워드 박스란 넘이 보인다..

 

   <StackPanel x:Name="loginStack" Grid.Column="1" Grid.Row="0">

                    <Border BorderThickness="1" Background="Gray">

                        <telerik:RadPane Header="아이디" FontWeight="Bold" Margin="1"/>

                    </Border>

                    <TextBox Name="idTextBox" Text="" Margin="2" AcceptsReturn="True"

                        KeyDown="idTextBox_KeyDown"/>

                    <Border BorderThickness="1" Background="Gray">

                        <telerik:RadPane Header="비밀번호" FontWeight="Bold" Margin="1"/>

                    </Border>

                    <PasswordBox Name="pwTextBox" Password="" KeyDown="pwTextBox_KeyDown"/>

                    <TextBlock Name="tbState" Text="" Height="20"/>

                </StackPanel>

 

음..패스워드 박스란넘은 Text프로퍼티가 업어서 또 잠깐 찾기 모드로 넘어가고

 

잠시 후 Password란 프로퍼티를 찾아서 그넘을 사용해서 디자인은 완성

 

자 그럼 아이디와 패스워드를 리아 서비스로 던져서 그 결과를 받아서 로그인 여부를 체크 해야겠군..

 

로직은 그렇게 섰는데..

 

리아에 아이디와 패스워드를 던져서 확인하고 결과 리턴하는 거 만들어야하는..

 

일단,

 

직원 정보 조회하는 도메인 서비스 파일을 찾아서 열고

 

기본 조회하는 넘을 복사해서 아래다가 붙이고

 

public IQueryable<Emp_T> GetEmp_T_From_ID_PW(string id, string pw)

        {

            return this.ObjectContext.Emp_T.Where(e => e.Emp_Opt_End == false

                   && e.Emp_ID_VC == id && e.Emp_Pass_VC == pw);

        }

 

요렇게 수정했다. 자 저기에 아이디와 패스워드를 넣구 던지면 요기서 확인해보고 데이터 있으면 뭔가 넘기겠지?

 

캬캬..

 

일단 컴파일해서 클라이언트쪽에서 함수를 인식할 수 있게 만들어 주고

 

그리고..음..저걸 호출해야하는데..;;;

 

에잇 일단 쉬운방법을 이용해보자..

 

 

빈 XAML 디자인 화면에 가서

 

화면에 Data Sources 텝을 눌러서 잠깐 기다리고 있으면 도메인 서비스 목록들이 쭈루륵 뜨고

 

도메인 서비스의 목록 아래 직원 테이블이름이 있는 넘을 클릭하고 오른쪽에 드롭다운 버튼을 누르니

 

GetEmp_T_From_ID_PWQuery라는 이름이 보인다..내가 만들때는

 

그냥 GetEmp_T_From_ID_PW 이런 이름으로 만들었는데 뒤에 Query라는 글시가 추가되었군..

 

음..머 그걸 선택하고 끌어다가 화면에 버리니..

 

화면에 데이터그리드와 함께 아이디 패스워드 입력하는 내용들이 나타났다.

 

오호라~ 저렇게 되는걸 보니 저걸 활용하면 대겠군..

 

바로 xaml소스 코드로 들어가서 확인!

 

전체적인 구성은

 

리아 컨트롤이 하나 생겨 있구, 그 리아컨트롤에는 아이디와 패스워드를 파라메터로 도메인

 

서비스에 넘기도록 되어 있구, 그 파라메터들은 택스트 박스 데이터가 바인딩 되도록

 

만들어져 있었으며, 리아 컨트롤에서 조회된 데이터는 데이터 그리드에 발라지도록

 

자동으로 구성되어있었다.

 

 

 

<riaControls:DomainDataSource AutoLoad="False"

            d:DesignData="{d:DesignInstance my:Emp_T, CreateList=true}" Height="0"

            LoadedData="emp_TDomainDataSource_LoadedData" Name="emp_TDomainDataSource"

            QueryName="GetEmp_T_From_ID_PWQuery" Width="0">

            <riaControls:DomainDataSource.DomainContext>

                <my1:dsEmp_T />

            </riaControls:DomainDataSource.DomainContext>

            <riaControls:DomainDataSource.QueryParameters>

                <riaControls:Parameter ParameterName="id" Value="{Binding ElementName=idTextBox,

                                       Path=Text}" />

                <riaControls:Parameter ParameterName="pw" Value="{Binding ElementName=pwTextBox,

                                       Path=Text}" />

            </riaControls:DomainDataSource.QueryParameters>

        </riaControls:DomainDataSource>

        <StackPanel Height="30" HorizontalAlignment="Left" Orientation="Horizontal"

                    VerticalAlignment="Top">

            <sdk:Label Content="Id:" Margin="3" VerticalAlignment="Center" />

            <TextBox Name="idTextBox" Width="60" />

            <sdk:Label Content="Pw:" Margin="3" VerticalAlignment="Center" />

            <TextBox Name="pwTextBox" Width="60" />

            <Button Command="{Binding Path=LoadCommand, ElementName=emp_TDomainDataSource}"

                    Content="Load" Margin="3" Name="emp_TDomainDataSourceLoadButton" />

        </StackPanel>

        <telerik:RadGridView Height="194" HorizontalAlignment="Left" ItemsSource="{Binding

                             ElementName=emp_TDomainDataSource, Path=Data}" Margin="12,36,0,0"

                             Name="emp_TRadGridView" VerticalAlignment="Top" Width="335" />

 

머 자동으로 만들어준게 이정도니 이거 가지고 응용하면 대겠군..ㅋㅋ

 

내가 만든 로그인 화면에 리아 컨트롤을 일단 복사해 놓고

 

리아컨트롤의 파라메더 부분은 내가 원래 만들었던 아이디와 패스워드 컨트롤들의 내용을

 

바인딩 하도록 바꾸고, 데이터 조회가 완료되면 cs단에

 

private void emp_TDomainDataSource_LoadedData(object sender, LoadedDataEventArgs e)

        {

 

            if (e.HasError)

            {

                System.Windows.MessageBox.Show(e.Error.ToString(), "Load Error",

                    System.Windows.MessageBoxButton.OK);

                e.MarkErrorAsHandled();

                return; //이건 임의 추가

            }

            //여기다가 데이터 가지고 온 다음 처리들..

        }

 

//표시 해놓은데다가 로그인 처리를 하면 ..오케이~

 

일단..계획대로 다 바꿔 놓고, 테스트를 하면대는데..아이디입력, 패스워드 입력 로그인 버튼 클릭~

 

응? 클릭~ 클릭~ 크으으으응릭..;;

 

반응이 업는데;; 머냥 머가 잘 못된거얌...

 

일단 도메인 서비스 단에 f9눌러서 브레이크 포인트 만들고 다시 클릭..

 

오잉 아에 오지를 앙는군.. 그렇다는 이야기는 아에 보내지도 못했다는 건데..

 

음..그때, 리아 컨트롤에 AutoLoad라는 프로퍼티가 눈이 들어왔다..이넘인가?

 

먼가 자동으로 로드 해줘야 할꺼 아냠~ 그래서 로그인 버튼 클릭 이벤트에

 

emp_TDomainDataSource.AutoLoad = true;

 

emp_TDomainDataSource.Load();

 

이렇게 추가해 놓구

 

다시 실행~ 로그인 버튼 클릭~ 빨간줄~에 노란줄~ ㅎㅎ 브레이크 포인트 걸림..이제 되는군..

 

그럼 여기서 데이터 가지고 다시 반환대는 것만 보면 대는뎅~

 

....

 

emp_TDomainDataSource_LoadedData 이동네..

 

으흡..반환 데이터가 업어두 에러군..그럼 에러 처리 해줘야징..그런데..어떤걸 에러처리해야하는거얌;;

 

에..그냥 일단 브레이크 걸어서 리턴데이터 e가 뭔가 한번 보자

 

e라..음..별거 업긴한데.. 리턴 데이터가 있으면 TotalEntityCount가 0이 아닌것 같으니 그넘 가지구

 

반환된 데이터 있는지 업는지 확인 처리 해야겠군

 

if (e.TotalEntityCount == 0)

                return;

 

조아..

 

에러처리는 댔어~ 그럼 반환된 내용을 일단 뿌려보자

 

foreach(Emp_T emp in e.AllEntities)

{

    MessageBox.Show(emp.Emp_VC);

}

 

요렇게 써놓구..다시 실행 오옷 이름이 뽕~하고 뜬당...

 

조아조아.. 이제 절반은 한거얌 냐하하하 ...

 

 

............

 

 

나머지는 내일 해야할듯..

코멘트쓰기
  좋음   놀람   궁금   화남   슬픔   최고   침묵   시무룩   부끄럼   난감
* 코멘트는 500자 이내(띄어쓰기 포함)로 적어주세요.
목록 보기   지금 보고 계시는 글을 회원님의 my Mblog >> 스크랩에 넣어두고 다음에 바로 보실 수 있습니다.  
회사소개  |   개인정보취급방침  |  제휴문의  |   광고문의  |   E-Mail 무단수집거부  |   고객지원  |   이용안내  |   세금계산서
사업자등록번호 안내: 220-81-90008 / 통신판매업신고번호 제 2017-서울구로-0055호 / 대표: 홍영준, 서민호
08390, 서울시 구로구 디지털로32길 30, 1211호 / TEL. 02_6719_6200 / FAX. 02-6499-1910
Copyright ⓒ (주) 데브피아. All rights reserved.