동영상 자료 보고 정리한 것에 불과하고,
나중에 더 추가시켜 나갈 생각.
1. Sql Server
1. 세팅
서버 다운받고 대충 테이블 만들어 놓음.
여기서 마우스 왼쪽버튼 누르면 나오는 Add Connection 을 눌러서 대충 아래처럼 함.
그럼 Tables 에 추가된 table 이 있을 거임.
DataSet 을 만들어서
드래그를 함.
그럼 이렇게 자동으로 자료형이 만들어져 있을거임.
1 2 3 4 | <ObjectDataProvider x:Key="custList" ObjectType="{x:Type tableAdapter:t_custTableAdapter}" MethodName="GetData" IsAsynchronous="True" > | cs |
위를 통해 데이터를 로드하도록 하고.
ObjectDataProvider 는 여기서 설명함.
2. 접근
private ICollectionView GetList() { DataSourceProvider prov = (DataSourceProvider)FindResource("custList"); return CollectionViewSource.GetDefaultView(prov.Data); }
ICollectionView 는 다음처럼 찾아옴.
Debug.WriteLine(((DataRowView)lstCust.SelectedItem)["name"].ToString());
데이터 접근은 DataRowView 로 형변환뒤 Attribute를 Index 로 사용해서 접근
DataSourceProvider provider = (DataSourceProvider)this.FindResource("custList"); ds_wpf.t_custDataTable tb = provider.Data as ds_wpf.t_custDataTable; DataRow row = tb.NewRow(); row["age"] = 11; row["name"] = "김수빈"; row["id"] = "sadf"; tb.Rows.Add(row);
추가
((DataRowView)((Button)sender).DataContext).Delete();
제거
((DataRowView)view.CurrentItem).BeginEdit(); ((DataRowView)view.CurrentItem)["age"] = "12"; ((DataRowView)view.CurrentItem).EndEdit();
수정
CustomSort, Filter 는 적용이 안됨.
2. Xml
보통은 위처럼 바로 DB 랑 연결하지 않고, Xml 등을 이용하는 레이어를 거쳐서 연결함.
1. XmlDataProvider
<?xml version="1.0" encoding="utf-8" ?> <CustList xmlns="http://test01.co.kr"> <Cust name="홍길동" age="18" id="aa"/> <Cust name="김유신" age="60" id="ba"/> <Cust name="이순신" age="32" id="ac"/> <Cust name="감강찬" age="18" id="da"/> </CustList>
Xml 은 간략하게 하면 대략 저런 형식임.
<XmlDataProvider x:Key="custList2" Source="CustList.xml" XPath="/sb:CustList/sb:Cust"> <XmlDataProvider.XmlNamespaceManager> <XmlNamespaceMappingCollection> <XmlNamespaceMapping Uri="http://test01.co.kr" Prefix="sb"/> </XmlNamespaceMappingCollection> </XmlDataProvider.XmlNamespaceManager> </XmlDataProvider>
XmlData 를 사용하면 바로 Xml 과 연결 가능함.
NameSpace 를 Url 을 이용해 Prefix로 만듬.
이렇게 만든걸 이용해서 XPath 으로 불러올 데이터를 지정함.
<XmlDataProvider x:Key="custList" Source="CustList.xml" XPath="/sb:CustList/sb:Cust"> <XmlDataProvider.XmlNamespaceManager> <XmlNamespaceMappingCollection> <XmlNamespaceMapping Uri="http://test01.co.kr" Prefix="sb"/> </XmlNamespaceMappingCollection> </XmlDataProvider.XmlNamespaceManager> <x:XData> <CustList xmlns="http://test01.co.kr"> <Cust name="홍길동" age="18" id="aa"/> <Cust name="김유신" age="60" id="ba"/> <Cust name="이순신" age="32" id="ac"/> <Cust name="감강찬" age="18" id="da"/> </CustList> </x:XData> </XmlDataProvider>
x:XData 로 저렇게 해도 된다는데, 직접적인 접근을 어케하는지 모르겠음.
private void LoadCustListXml() { XmlNamespaceManager ns = new XmlNamespaceManager(doc.NameTable); ns.AddNamespace("sb", "http://test01.co.kr"); Binding.SetXmlNamespaceManager(grdMain, ns); doc = new XmlDocument(); doc.Load("CustList.xml"); Binding b = new Binding(); b.XPath = "/sb:CustList/sb:Cust"; b.Source = doc; grdMain.SetBinding(Grid.DataContextProperty, b); }
코드로도 똑같이 할 수 있음.
2. 접근
private void btnAdd_Click(object sender, RoutedEventArgs e) { XmlElement c = doc.CreateElement("Cust", "http://test01.co.kr"); c.SetAttribute("name", "을지문덕"); c.SetAttribute("age", "99"); doc.DocumentElement.AppendChild(c); }
추가
ICollectionView view = CollectionViewSource.GetDefaultView(grdMain.DataContext); XmlElement c = (XmlElement)view.CurrentItem; c.SetAttribute("age", "12");
수정
댓글 없음:
댓글 쓰기