블로그 이미지
프로그램을 가장 훌륭하게 작성하는 방법은 상태가 변경되는 오브젝트들과 수학적인 값을 나타내는 오브젝트들의 조합으로 표현하는 것이다. -Kent Beck 초초초보

카테고리

Programming (184)
ASP.NET (9)
Silverlight (2)
Javascript (20)
C# (8)
java (25)
SQL (14)
Oracle (3)
MyBatis (3)
기타 (52)
개발방법론 (1)
trouble shooting (2)
Linux (5)
스칼라 (5)
html (2)
grails & gradle (3)
Spring (2)
rabbitmq (1)
(3)
spark (0)
docker (3)
Total
Today
Yesterday

달력

« » 2024.5
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31

공지사항

최근에 올라온 글

-- 데이터 타입이 int 형 일때
CREATE TABLE [dbo].[gogogo](
 [n] [varchar](10) COLLATE Latin1_General_CS_AS NULL,
 [m] [int] NULL
)

insert into gogogo values('aaaaaa',111211)
insert into gogogo values('acccaa',11333111)
insert into gogogo values('adddaa',11444111)
insert into gogogo values('aaggga',11155511)
insert into gogogo values('ahhhaa',11166611)

-- money 형식으로 바꾸고 형변환
select n,convert(varchar(20), convert(money,m),1) as m from gogogo

-- 데이터 타입이 money 일때
create table tb_money(seq int identity, col1 money)
go
insert into tb_money(col1) values(1000)
insert into tb_money(col1) values(2000)
insert into tb_money(col1) values(3000)
go
select seq, convert(varchar(10), col1, 1) from tb_money
go

끝.

Posted by 초초초보
, |

원문 : http://www.ihelpers.co.kr/programming/tipntech.php?CMD=view&IDX=252&source=naverclick
참조 : http://msdn.microsoft.com/ko-kr/library/ms175170.aspx

-- 일단 테이블을 만들고
create table dbo.table1 (
        a    int
    ,    b int
    , c int
    )

예제 1 : INPUT 파라미터를 이용한 예제
-- 쿼리문을 생성 함.

    declare @table as nvarchar(20)
    declare @stmt as nvarchar(100)
    declare @params as nvarchar(100)

    set @table = 'dbo.table1'
    set @stmt = 'insert into ' + @table + ' '
set @stmt = @stmt + 'values (@a, @b, @c)'
    set @params = '@a int, @b int, @c int'
    
-- 시승템 프로시저인 sp_executesql  를 이용하여 쿼리를 날려줌..;
    exec sp_executesql @stmt, @params, @a=1, @b=2, @c=3

    -- 확인   
    select * from table1


예제 2 : OUTPUT 파라미터를 이용한 예제

-- 쿼리문 생성
    declare @stmt as nvarchar(100)
    declare @params as nvarchar(100)
    declare @orderret as int

    set @stmt = 'select @ordercnt = count(*) from dbo.table1'
    set @params = '@ordercnt as int OUTPUT' -- OUTPUT 키워드에 주의

    -- 여기도 OUTPUT 키워드를 지정한다.
    exec sp_executesql @stmt, @params, @ordercnt = @orderret OUTPUT

    -- 확인   
    select @orderret











Posted by 초초초보
, |

SQL CTE를 이용한 재귀 쿼리

SQL / 2008. 12. 31. 17:06

참조 : http://msdn.microsoft.com/ko-kr/magazine/cc163346.aspx
샘플 DB : northwind
샘플 DB 다운 : http://code.msdn.microsoft.com/northwind/Release/ProjectReleases.aspx?ReleaseId=1401

예제

;with RecursionCTE(EmployeeID, ReportsTo, FirstName)as
(
select EmployeeID, ReportsTo, FirstName
from employees
where employeeid =2
union all
select e.employeeid, e.reportsto, e.firstname
from employees e join
RecursionCTE r on e.reportsto = r.employeeid
)
select * from RecursionCTE option (maxrecursion 2)

Posted by 초초초보
, |

HTTP 상태코드 및 의미

기타 / 2008. 12. 19. 10:51

Status Code

Associated Message

Meaning

100

Continue

클라이언트로부터 일부 요청을 받았으니 나머지 요청 정보를 계속 보내 주시오. (HTTP 1.1에서 처음 등장)

101

Switching Protocols

서버는 클라이언트의 요청대로 Upgrade 헤더를 따라 다른 프로토콜로 바꿀 것임. (HTTP 1.1에서 처음 등
장)    

200

OK

모든 것이 정상적임. GET이나 POST 요청 뒤에 문서가 온다. 이것은 서블릿의 기본 상태다. setStatus를 사용하지 않으면
이 상태코드를 얻게 된다.

201

Created

서버에서 문서를 만들었음. Location 헤더는 그 URL을 가리킨다.    

202

Accepted

요청이 수행되었지만 처리는 끝나지 않았음.

203

Non-Authoritative Information

문서는 정상적으로 반환되었지만 복사본이 사용되었으므로 응답 헤더중 일부가 정확하지 않을 수
도 있음. (HTTP 1.1에서 처음 등장)

204

No Content

새 문서 없음. 브라우저는 이전 문서를 계속 보여줘야 한다. 이것은 사용자가 페이지를 주기적으로 리로드를 하던
중 이전 페이지가 이미 만료되었을 때 사용할 수 있다. 하지만 Refresh 응답 헤더나 <META HTTP-EQUIV="Refresh" ...> 같은 헤더를 사용
해서 페이지를 자동으로 리로드 시켰을 때는 동작하지 않는다. 왜냐하면 이 상태 코드를 반환하면 추후의 리로딩이 멈추기 때문이다. 하지
만 자바 스크립트로 리로드하게 해 주는 것은 작동한다.

205

Reset Content

새 문서 없음. 하지만 브라우저는 문서 창을 리셋해야 한다. 브라우저가 CGI 폼 필드를 전부 지우도록 할 때 사용
된다. (HTTP 1.1에서 처음 등장)

206

Partial Content

클라이언트가 Range 헤더와 함께 요청의 일부분을 보냈고 서버는 이를 수행했음. (HTTP 1.1에서 처음 등장)

300

Multiple Choices

요청된 문서가 여러 군데서 발견되었음. 이 때 서버는 해당하는 모든 문서들을 나열할 것이다. 만약 서버가
선호하는 선택이 있으면 Location 응답 헤더에 나열해야 한다.

301

Moved Permanently

요청된 문서는 어딘가에 있고 그 문서에 대한 URL은 Location 응답 헤더에 주어졌음. 브라우저는 자동적
으로 새 URL의 링크를 따라가야 한다.

302

Found

301과 비슷하지만 새 URL은 임시 저장 장소로 해석된다. 이 메시지는 HTTP 1.0에서는 ‘Moved Temporarily’였다. 그리고
HttpServletResponse의 상수는 SC_FOUND가 아니라 SC_MOVED_TEMPORARILY다. 이것은 매우 유용한 헤더인데 이 헤더를 통해 브라
우저가 자동적으로 새 URL의 링크를 따라가기 때문이다. 이 상태 코드는 아주 유용하기 때문에 이 상태 코드를 위해 sendRedirect 라는
특별한 메소드가 있다.  response.sendRedirect(url)을 사용하는 것은 response.setStatus(response.SC_MOVED_TEMPORARILY)과
 response.setHeader("Location", url)를 쓰는 것에 비해 몇 가지 장점이 있다. 첫째, 더 쉽게 사용할 수 있다. 둘째, sendRedirect을 써서
서블릿이 그 링크를 포함한 페이지를 자동으로 만들어 준다(자동으로 redirect를 따라갈 수 없는 오래 된 브라우저에서도 볼 수 있게 해 준
다). 마지막으로, sendRedirect에서는 상대 URL이 절대 URL로 해석되기 때문에 상대 URL도 다룰 수 있다.  이 상태 코드는 종종 301번과
혼용된다. 예를 들어 <http://host/~user(> (맨 마지막에 ‘/’이 빠짐)과 같이 오류가 있는 요청에 대해 어떤 서버는 301을 어떤 서버는 302
를 보낸다.  기술적으로 브라우저는 원 요청이 GET이었다면 자동적으로 리다이렉션을 따라 가도록 되어 있다. 더 자세한 사항은 307 헤더
를 보라.       

303

See Other

301/302과 같지만 원래 요청이 POST였을 경우 리다이렉트 되는 문서(Location 헤더에 주어졌다) GET을 통해 받아
야 한다. (HTTP 1.1에서 처음 등장)

304

Not Modified

클라이언트의 캐시에 이 문서가 저장되었고 선택적인 요청에 의해 수행됨(보통 지정된 날짜보다 더 나중의 문서만
을 보여주도록 하는 If-Modified-Since 헤더의 경우). 서버는 클라이언트에게 캐시에 저장된 이전 문서를 계속 사용해야 한다고 말할 것이
다.

305

Use Proxy

요청된 문서는 Location 헤더에 나열된 프록시를 통해 추출되어야 함. (HTTP 1.1에서 처음 등장)

307

Temporary Redirect

Temporary Redirect      이것은 302 ("Found" 또는 "Temporarily Moved")와 같다. 많은 브라우저에서 메시지가 POST일 때 원래는 303 응답의 POST 요청의 리다이렉션을 따라 가야 함에도 불구하고 302의 응답을 따르기 때문에 HTTP 1.1에서 추가되었다. 303 응답은 모호하지 않도록 의도되었다. 303 응답의 경우에 대해서는 리다이렉트 된 GET과 POST 요청을 따르고 307 응답의 경우에는 GET  요청만 따른다. 몇 가지 이유로 HttpServletResponse에는 이 상태코드에 해당하는 상수가 없다. (HTTP 1.1에서 처음 등장)  

400

Bad Request

요청에 문법적으로 잘못된 부분이 있음.

401

Unauthorized

클라이언트가 올바른 허가를 받지 않고 허가가 필요한 페이지에 접근하려 함. 여기에 대한 응답으로 브라우저가 대화창을 열어 사용자 이름과 암호를 받아들이도록 하는 WWW-Authenticate 헤더를 포함해야 한다.    

403

Forbidden

사용 권한에 관계없이 내용을 볼 수 없음. 종종 파일 이름이 잘못되었거나 서버의 디렉터리 퍼미션이 잘못 되었을 때 나온다.   

404

Not Found

이 주소에서는 어떤 내용도 발견할 수 없음. 이것은 표준 ‘no such page’응답이다. 이 상태 코드는 아주 일반적인 응답이다. 그래서 이 상태코드를 위한 HttpServletResponse:sendError(message)라는 특별한 메소드가 있다. sendError는 serStatus에 비해 에러 메시지를 보여주는 에러 페이지를 자동적으로 만들어 준다는 장점이 있다.

405

Method Not Allowed

요청 메소드(GET, POST, HEAD, DELETE, PUT, TRACE 등) 를 특정 자원에 대해서는 쓸 수 없음. (HTTP 1.1에서 새로 등장)

406

Not Acceptable

지정된 자원이 클라이언트의 Accept 헤더에 명시된 것과 호환 되지 않는 MIME content-type을 생성함. (HTTP 1.1에서 새로 등장)

407

Proxy Authentication Required

401과 비슷하지만 서버가 Proxy-Authenticate 헤더를 반환해야 한다. (HTTP 1.1에서 새로 등장)

408

Request Timeout

클라이언트가 요청을 보내는 데 너무 오랜 시간이 걸림.(HTTP 1.1에서 새로 등장)

409

Conflict

보통 PUT 요청과 관계 있다. 보통 틀린 버전의 파일을 업로드할 경우 발생한다. (HTTP 1.1에서 새로 등장)

410

Gone

문서가 사라졌고 포워딩할 주소도 없음. 404와 다른 점은 이 경우 문서가 완전히 사라졌다는 것을 서버가 안다는 점이다.
404는 어떤 이유인지는 모르는데 단지 요청한 것을 사용할 수 없다는 것을 의미한다. (HTTP 1.1에서 새로 등장)

411

Length Required

클라이언트가 Content-Length를 보내지 않으면 서버가 처리할 수 없음.(HTTP 1.1에서 새로 등장)

412

Precondition Failed

요청 헤더에 설정되어 있는 어떤 조건이 맞지 않음. (HTTP 1.1에서 새로 등장)

413

Request Entity Too Large

요청된 문서가 현재 서버가 다룰 수 있는 크기보다 큼. 만약 서버에서 나중에 다룰 수 있다고 생각
되면 Retry-After 헤더를 포함시켜야 한다. (HTTP 1.1에서 새로 등장)

414

Request URI Too Long

URI가 너무 길다. (HTTP 1.1에서 새로 등장)

415

Unsupported Media Type

요청이 알려지지 않은 형태임(HTTP 1.1에서 새로 등장)     

416

Requested Range Not Satisfiable

클라이언트가 요청에 적당하지 않은 Range 헤더를 포함시켰음 (HTTP 1.1에서 새로 등장)

417

Expectation Failed

Expect 요청 헤더의 값이 맞지 않음. (HTTP 1.1에서 새로 등장)     

500

Internal Server Error

일반적인 ‘server is confused’ 메시지. 종종 CGI 프로그램이나 서블릿의 결과가 잘못되거나 적절하지 않은
헤더를 만들었을 때 발생한다.    

501

Not Implemented

요청한 것을 서버에서 지원하지 않음. 예를 들면 클라이언트가 서버에서 지원하지 않는 PUT과 같은 명령을
내렸을 때 발생한다.         

502

Bad Gateway

프록시나 게이트웨이의 역할을 하는 서버에서 볼 수 있다. 초기 서버가 원격 서버로부터 부적절한 응답을 받았음
을 나타낸다.   

503

Service Unavailable

처리할 수 있는 한계를 벗어나 과도하게 요청이 들어와서 서버가 응답할 수 없음. 예를 들면 스레드나 데이
터베이스 연결이 가득 차 있을 때 서블릿에서 이런 헤더를 반환한다. 서버는 Retry-After 헤더를 낼 수 있다.

504

Gateway Timeout

프록시나 게이트웨이의 역할을 하는 서버에서 볼 수 있다. 초기 서버가 원격 서버로부터 응답을 받을 수 없
음을 나타낸다. (HTTP 1.1에서 새로 등장)

505

HTTP Version Not Supported

서버가 요청 라인에 지정된 HTTP 버전을 지원하지 않음. (HTTP 1.1에서 새로 등장)

 


[출처] HTTP 상태코드 및 의미 |작성자 돌싱보이

Posted by 초초초보
, |
순서
1. 이동할 객체를 선정하고 스타일을 준다
   - 스타일은 position, top, left 세가지는 필수 사항이다
   - position은 absolute, fixed, relative 세 가지 중 하나를 선택해야 한다.

 <body>
    <form id="form1" runat="server">
    <div id="hihi">
        <img src="images/lee.jpg" alt="" id="img1"  style=" position:absolute; top:0px; left:0px;" /> //스타일
    </div>
    </form>
</body>

2. 페이지 로드시에 이동할 객체에 onmousedown, onmousemove, onmouseup를 정의해 준다.
2. 마우스가 객체 위에서 다운(눌려진 상태) 일 경우 마우스의 위치를 구하고 이동할 경우 이동한 차이값을 구한다.
3. 이동한 차이값 만큼 객체의 top과 left 속성을 변경 시켜주면 끝.

 <script type="text/javascript" language="javascript">
        var img1;
        var isDown = false;
        var clientX1 = 0;
        var clientY1 = 0;
        var clientX2 = 0;
        var clientY2 = 0;
        var left;
        var top;
       
        window.onload = function() {
            img1 = document.getElementById("img1");
            img1.onmousedown = mouseDown;
            img1.onmousemove = mouseMove;
            img1.onmouseup = mouseUp;
        }
       
        function mouseUp()
        {
            isDown = false;
        }
       
        function mouseDown()
        {
            isDown = true;
            clientX1 = event.clientX;
            clientY1 = event.clientY;
            clientX2 = clientX1;
            clientY2 = clientY1;
            //alert(clientX);
        }
       
        function mouseMove() {
            clientX1 = event.clientX;
            clientY1 = event.clientY;
            clientX2 = clientX1 - clientX2;
            clientY2 = clientY1 - clientY2;
            left = img1.style.left;
            top = img1.style.top;
            left = left.substr(0, left.length - 2);
            top = top.substr(0, top.length - 2);
            left = parseInt(left);
            top = parseInt(top);
          
            if (isDown) {
                img1.style.left = left + clientX2;
                img1.style.top = top + clientY2;
                clientX2 = clientX1;
                clientY2 = clientY1;
                return false;
            }
        }
    </script>




Posted by 초초초보
, |

자바스크립트에서의 Drag & Drop과 비슷하다.

Canvas 에서 많이 하는 것 같지만 나는 Grid 에서 하였음.

-----------xaml 코드에서 ------------
먼저 Silverlight Page 를 만들면 UserControl  태그의 Width가 400 Height가 300으로 설정이 되는 걸 볼 수 있다.
이대로 두고 최상위 Grid인 LayoutRoot의 Background를 Black으로 바꾸고
(어느 영역을 차지하고 있는지 한눈에 알아 볼 수 있게)
자식으로 새로운 Grid 를 하나 둔다. 그리고 x:Name 속성을 gridDrag 로 설정한다.
 그리고 Background를 White로 설정한다.  Width와 Height 모두 50으로 설정
그리고  VerticalAlignment="Top" HorizontalAlignment="Left" 를 설정하여 좌측 위쪽 구석으로 자식 Grid 를 몰아둔다.

그러면 대략 이런 그림이 나온다.



검은색 바탕의 최상위 Grid인 LayoutRoot와 그 자식으로 둔 하얀색 바탕의 Grid 가 보이 게 된다.


  -----------cs 코드에서---------------
클래스 생성자에서 아까 이름을 정해 주었던 하얀색 바탕의 gridDrag에 이벤트를 정의해 준다.
정의할 이벤트는
MouseLeftButtonDown
MouseMove
MouseLeftButtonUp
이렇게 세가지 이다.
그리고 멤버필드를 정의해 준다.
마우스가 다운 상태인지(클릭된 상태인지)를 나타내주는
bool isDown = false;

마우스를 클릭(다운상태) 했을 경우의 위치값을 가져오는
double mouseTop1 = 0.0;
double mouseLeft1 = 0.0;

이전의 위치와 현재의 위치의 차이를 가져오는
double mouseTop2 = 0.0;
double mouseLeft2 = 0.0;

마우스의 위치를 알게 새주는
Point p;

마지막으로 margin을 설정해주는
Thickness margin = new Thickness();

중간 정리하면 클래스 생성자에 3가지의 이벤트를 등록하고 멤버로 7개를 정의해 준다.


MouseLeftButtonUp 이벤트에는 마우스가 눌려진 상태가 아니라는 걸 알려주기 위하여
 isDown = false; 한줄 코딩을 해준다.

MouseLeftButtonDown 이벤트에는 마우스가 눌려졌다는 걸 알려주기 위하여
isDown = true; 코딩을 해주고
마우스의 위치값을 가져와야 한다.

MouseLeftButtonDown  이벤트의 두 번째 매개변수로 넘어온 e 변수를 이용하여 위치값을 얻을 수 있다.
p = e.GetPosition(this);
위치값을 얻었으면 마우스의 위치를 대입해주고 
mouseLeft1 = p.X;
mouseTop1 = p.Y;

이동한 값을 알아야 하므로
mouseLeft2 = mouseLeft1;
mouseTop2 = mouseTop1;
이런식으로 대입해준다. (마우스를 누르게 되면 이동한 값이 없으므로 현재값과 차이값이 같아야 한다.)

마지막 이벤트인
MouseMove 이벤트에서도 마찬가지로
이동한 값을 알아야 하므로 마우스의 위치값을 구해온다.

 p = e.GetPosition(this); // 마우스의 위치값을 구한다.

마우스의 좌표를 저장한다.
mouseLeft1 = p.X;
mouseTop1 = p.Y;

원래 위치와 이동한 위치의 차이를 알아내기 위하여
mouseLeft2 = (mouseLeft1 - mouseLeft2);
mouseTop2 = (mouseTop1 - mouseTop2);
차이값을 구한다.

위치값을 구했다면 마우스를 이동할 것인지 말 것인지를 정해야 한다.
조건문은 당연히 마우스가 눌러진 상태일때만 눌러져야하므로
isDown가 true 여야 한다.
하지만 조건이 하나라면 마우스가 빨리 움질일 경우 마우스가 객체를 놓치는 경우가 있다.
CaptureMouse() 메서드를 이용하여 마우스가 해당 객체를 잡고 있는지? 가 true 일 경우도 같이 조건을 주어야 한다.
조건은
if (isDown && gridDrag.CaptureMouse()) 이런식으로 주면 된다.

if 문 안의 블록에서 실제로 객체를 이동 시켜야 한다.
Thickness 구조체의 변수인 margin의 값을 일단 설정을 해준다.
margin의 값의 설정은 해당 객체의 위치 + 이동한 값으로 해주면 된다.

margin.Left = gridDrag.Margin.Left + mouseLeft2;
margin.Top = gridDrag.Margin.Top + mouseTop2;


그리고 gridDrag 객체의 Margin 값에 대입해준다.
 gridDrag.Margin = margin;

이렇게 하면 객체는 움직일 것이다. 하지만 대각선으로 아주 심하게 움직인다.;
드래그 이벤트는 움직이는 순간에 계속 일어나므로 계속해서 값을 대입해 주어야 한다.

현재위치와 이동한 위치의 차이점을 구하기 위해서는
다시 현재 위치와 이동한 위치의 차이의 변수들을 동일하게 만들어 주어야 한다.

mouseLeft2 = mouseLeft1;
mouseTop2 = mouseTop1;


이렇게 해서 아주 간단한 Drag & Drop의 구현이 완성 되었다.;

끝.

           -------------------------------  소스코드  -----------------------------





Posted by 초초초보
, |
Posted by 초초초보
, |

이 글은 두 가지의 주제로 이루어져 있다.
첫 번째는 Javscript -> Silverlight 이고
두 번째는 Silverlight -> Javascript 이다

 첫 번째 Javascript 에서 Silverlight 로의 통신은 페이지를 만들 때 Full Silverlight 는 거의 없다.
html 페이지에서 일부분을 Silverlight 로 꾸미게 된다.
그럴 때 html 페이지에서 실버라이트의 상태를 바꾸고자 할 때 이용된다.

총 4단계를 거쳐서 Javascript 에서 Silverlight 로의 통신이 이루어져 진다.

1단계 : script 를 사용할 클래스에 System.Windows.Browser namespace 의 [ScriptableType] Attributte 를 설정해준다.
          그리고 script 를 사용할 멤버 메소드에 [ScriptableMember] Attributte를 설정해 준다.
2단계 : 해당 클래스 생성자에 HtmlPage.RegisterScriptableObject("scriptKey", this);코드를 넣어준다.
           --> 첫 번째 매개변수는 스크립트를 등록을 하게 되는 키를 나타내고 두 번째 매개변수는 스크립트를 적용할 개체(Object)이다.

1단계와 2단계 예제 소스

  [ScriptableType] //스크립트 사용할 클레스에 선언
    public partial class Page : UserControl
    {
        public Page()
        {
            InitializeComponent();
            HtmlPage.RegisterScriptableObject("scriptKey", this); //스크립트 키 등록
         }

        [ScriptableMember] // 스크립트 사용할 메소드
        public void alert(string message)
        {
            HtmlPage.Window.Alert(message);
        }
    }





3단계 : 이제 Silverlight 에서 준비할 내용은 모두 끝났다. Javascript에서 Silverlight 메소드를 호출할 코드를 작성하면 된다.
          간단한 Javascript 함수를 만들면 
       function gogo() {
        //Object 태그의 ID
            var object = document.getElementById("silver");
            if (object) {
          //실버라이트 메소드 호출
                object.content.scriptKey.alert("hihi");
            }
        }
실버라이트 메소드 호출 부분을 보면 실버라이트 배포할 때 쓰인 태그인 object 의 ID 객체를 가져와서
객체.content.scriptKey.alert("hihi");
scriptKey 는 2단계에서 말한 scriptKey의 Key에 해당하며
alert("hihi") 는 Silverlight에서 호출될 메서드 명이다.

4단계 : 3단계에서 작성한 gogo() 함수를 호출하면 Silverlight의 alert() 메소드가 호출된다.

ps. Silverlight 에서 메소드를 호출 하고 작업을 실행 후 문자열, 숫자 등을 return 받는 것도 가능 하다.

 두 번째 Silverligt 에서 Javascript의 호출은 2단계를 거쳐서 구현 할 수 있다.
1단계 : Javascript에서 실행 할 함수를 하나 만든다
예제 소스 : 매개 변수 받아서 경고창 띄워준다.
         function gogogo1(val) {
            alert(val);
        }


 2단계 : System.Windows.Browser namespace의
ScriptObject Class 를 이용하여 가능할 수 있다.
ScriptObject  Class 를 생성을 하는데 생성 하는 방법은

ScriptObject script =  HtmlPage.Window.GetProperty("gogogo") as ScriptObject;
script.InvokeSelf("hihi");

System.Windows.Browser namespace의 HtmlPage.Window.GetProperty메소드를 사용 한다.
매개변수로 들어 가는 건 Javascript에서 정의한 함수명 이다.
GetProperty는 Object 를 반환 해주기 때문에 캐스팅을 해주어야 한다.

InvokeSelf 매소드는 실제로 함수 호출 부분이다.
매개변수는 params Object[] 이기 때문에 Javascript 에서 정의한 함수대로 매개변수를 넣어주면 된다.
그러면 Javscript 함수가 호출되는 것이다.

ps. 마찬가지로 기본형식은 return 받을 수 있다.
아래는 예제 소스이다.
버튼을 클릭 했을 경우 Javascript 함수를 호출하는 간단 소스
예제소스
         void button1_Click(object sender, RoutedEventArgs e)
        {
            //ScriptObject 객체에 gogogo 함수 등록
            ScriptObject script =  HtmlPage.Window.GetProperty("gogogo") as ScriptObject;
            //실제 함수 호출
            script.InvokeSelf("hihi");
        }
















Posted by 초초초보
, |

Pie Chart와 Doughnut Chart 1

ASP.NET / 2008. 12. 5. 16:00

Pie Chart와 Doughnut Chart이다.
이미지는 Pie Chart 이지만 Doughnut  Chart도 동일함.

Pie Chart와 Doughnut Chart를 간단히 만들면 대략  이런 모습이 된다.(이건 Pie Chart)



하지만 1.0% 등 짜투리가 있는데 짜투리를 합치고 싶으면

 series1["CollectedThreshold"]  = comboBoxCollectedThreshold.SelectedItem.ToString();
--> 시리즈["CollectedThreshold"] = "?%";

몇 %아래부터 합칠 것이지 그건 선택 사항이다.
저런 조각들을 합치면 이런 모습이 된다.(8%) 아래를 합친 모습



저런 조각들을 합친 후 조각들의 모음만 따로 떼어낼 수가 있다.

 series1["CollectedSliceExploded"] = this.ShowExplode.Checked.ToString();
--> 시리즈["CollectedSliceExploded"] = "true";

조각만 따로 떼어낸 모습은 아래와 같다.




기타 속성 정의
시리즈["CollectedLabel"] = "Other";   //조각에 쓰기
시리즈["CollectedLegendText"] ="2121212";// 설명에 쓰기
시리즈["CollectedColor"] = "색깔명";


주의사항 : 모든 속성은 String 으로 정의해 준다


2번은 좀더 많은 속성들을 적을것임.





Posted by 초초초보
, |

Chart Control 시작하기 4

ASP.NET / 2008. 12. 4. 16:41

각 속성 변경하기.

1. Chart Control의 Series의 색깔 변경하기

html 코드에서
 <asp:Series  Name="Series1" Color="Cyan">

cs 코드에서
Chart1.Series["Series1"].Color = System.Drawing.Color.Cyan;

2. Chart Control의 Series의 width 변경하기

html 코드에서.
모름

cs 코드에서
Chart1.Series["Series2"]["PointWidth"] = "1";
double 형식이지만 string으로 대입해 주어야 함.



Posted by 초초초보
, |