프로그래밍/WPF, Silverlight
[Silverlight] 4/4. 리스트 주고 받고 - 클래스를 이용한 방법
당근천국
2011. 11. 20. 17:50
1/4. 한 프로젝트에서 웹서비스 만들기 2/4. DB연결 하기 3/4. 리스트 주고 받고 - 서버 탐색기와 린큐를 이용한 방법 4/4. 리스트 주고 받고 - 클래스를 이용한 방법 |
클래스방식으로 가저오면 데이터를 필요한것만 보낼수 있습니다.
문제는 이방법을 사용하려면 변환작업을 해야 한다는 단점이 있죠.
DB는 린큐때와 다르게 일반적인 방법을 사용하여야 합니다.
2/4에서 연결한 방법을 사용합니다.
2/4의 내용을 숙지했다고 생각하고 포스트를 씁니다.
0.저장 프로시저 만들기
Select Top 10 strData1, strData2, strData3 From tb_WebServiceTest
1.넘겨줄 클래스 생성
당연한 이야기겠지만 이 클래스는 퍼블릭으로 선언하셔야 합니다.
내용은 전달할 데이터를 만듭니다.
public class claData { /// <SUMMARY> /// 데이터A /// </SUMMARY> public string strA { get; set; } /// <SUMMARY> /// 데이터B /// </SUMMARY> public string strB { get; set; } /// <SUMMARY> /// 데이터C /// </SUMMARY> public string strC { get; set; } }
2.웹 서비스에 함수
(리더로도 가능은 합니다만...)
웹서비스에 노출되도록 인터페이스를 만듭니다.
[OperationContract] List<CLADATA> GetClass();
먼저 아답터를 선언합니다.
그래야 데이터를 바인딩 할테니까요 ㅎㅎ
SqlConnection msConn = null; // DB서버 연결을 위한 객체 SqlCommand msComm = null; // Command 객체 SqlDataAdapter msAdapter = null; // 데이터 아답터 객체
public List<CLADATA> GetClass() { //리턴할 데이터 리스트 List<CLADATA> insRetun= new List<CLADATA>(); //데이터 임시저장용 claData insData; //전체데이터를 받아올 데이터테이블 DataTable dtData = new DataTable(); //데이터요청 프로시저 msComm = new SqlCommand("GetData_Range", msConn); msComm.CommandType = CommandType.StoredProcedure; //아답터 생성 msAdapter = new SqlDataAdapter(msComm); //데이터 테이블 체우기 msAdapter.Fill(dtData); //받아온 데이터테이블을 필요한 데이터를 추출하여 클래스로 만든다. foreach (DataRow drTemp in dtData.Rows) { insData = new claData(); insData.strA = drTemp["strData1"].ToString(); insData.strB = drTemp["strData2"].ToString(); insData.strC = drTemp["strData3"].ToString(); //리턴할 데이터에 추가 insRetun.Add(insData); } return insRetun; }
3.이벤트 걸기
이거 안하면 안나옵니다 ㅎㅎ
//클래스를 이용한 리스트 겟 sc.GetClassCompleted += new EventHandler<ServiceReference1.GetClassCompletedEventArgs>(sc_GetClassCompleted);
이렇게 이벤트 내용을 넣습니다.
만약 .ToList()가 나오지 않는다면 'System.Linq'를 유징 하시면 됩니다.
(using System.Linq;)
void sc_GetClassCompleted(object sender, ServiceReference1.GetClassCompletedEventArgs e) { //리스트 겟 - Class dgDB.ItemsSource = (List<ServiceReference1.claData>)e.Result.ToList(); }
이제 해당 웹서비스를 호출하면 리스트가 넘어 옵니다.
private void butGet_Class_Click(object sender, System.Windows.RoutedEventArgs e) { //리스트 클래스로 받기 sc.GetClassAsync(); }