본문 바로가기
Development/Silverlight

DataGrid에서 Row Data 모두 가져오기

by KingCat 2011. 5. 3.
실버라이트 DataGrid에 WCF로부터 요청한 데이터를 받아 바인딩하는 코드를 작성했다.
WCF에서는 DataBase에서 쿼리해서 List<UserClass> 형태로 돌려준다.

userGrid.ItemSource = e.Result;

이후, DataGrid에서 Row의 값을 변경하고, 이 정보를 다시 WCF에 전달해서 DataBase를 업데이트해 주려고 한다.
하지만 실버라이트 DataGrid에서는 Row에 접근하는 메서드나 속성이 없다.

구글링을 찾아본 결과 DataGrid에 들어있는 이벤트 중에서 SelectionChanged? 뭐 이런 이벤트에서 전달받는 인자인 sender를 캐스팅해서 사용하면 현재 변경한 Row에 대해 작업을 해줄수 있다고 나와있다.

그러나 내가 원하는건 현재 변경한 Row에 대한 작업이 아닌 전체 Row에 대한 작업니다. 또한 DataGrid의 Row 변경시 바로 발생하는 이벤트가 아니라 별도의 버튼을 클릭했을 때 발생하는 이벤트가 필요했다. 그리하여 DataGrid의 Row를 모두 가져오는 방법을 찾아헤메다가 결국 간단한 방법을 찾았다.

결론은 Foreach를 사용하면 간단하다.

처음에 시도했다가 안되었던 코드는 아래와 같다.

List<UserClass> list = userGrid.ItemSource as List<UserClass>;

이 코드는 DataGrid에 List<UserClass> 형태로 바인딩했으니 그냥 가져올려고 했던 것인데, 데이터가 아무리해도 들어오지 않았다.

동작이 되는 최종 코드는 아래와 같다.

foreach (UserClass data in userGrid.ItemSource)
{
// 원하는 동작을 넣는다.
}

그냥 foreach를 이용해 ItemSource를 하나씩 불러 UserClass로 캐스팅해서 불러오는 것이다. 그럼 자동으로 Row가 UserClass로 캐스팅되어 값이 들어온다. 뭐 List<UserClass>로 저장하고 싶으면 위에 List<UserClass> list;를 추가한 후, foreach 내부에 list.Add(data); 를 넣으면 될 것이다.

'Development > Silverlight' 카테고리의 다른 글

실버라이트에서 Client IP 얻어서 사용하기  (0) 2011.04.28