台灣最大程式設計社群網站
線上人數
1588
 
會員總數:239941
討論主題:186065
歡迎您免費加入會員
討論區列表 >> Windows Phone APP >> Windows Phone 7如何接應WCF回傳的DataSet?
[ 變換順序 ]  
[我要回覆]
1
回應主題 加入我的關注話題 檢舉此篇討論 將提問者加入個人黑名單
Windows Phone 7如何接應WCF回傳的DataSet?
價值 : 50 QP  點閱數:2908 回應數:7

樓主

荔枝
中級專家
2677 787
10036 2628
發送站內信

捐贈 VP 給 荔枝
如果,WCF所回傳的是一個DataSet,

那Windows Phone 7 要如何呈現出該DataSet中所存的內容呢?

研究了老半天沒結果,請教大家,謝謝。

本篇文章發表於2012-03-18 23:35
別忘捐VP感謝幫助你的人 新手會員瞧一瞧
1樓
最有價值解答

jonnyhuang
檢舉此回應
Silverlight已經把ADO.NET這塊拿掉了,
(因為它算是戶端程式,一般事都過Web服務跟資料庫溝通)
所以建議改成List<T>來傳遞
本篇文章回覆於2012-03-19 13:30
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
2樓
作者回應

荔枝
捐贈 VP 給 荔枝 檢舉此回應
謝謝jonnyhuang大大的說明,
我剛才本來找到這一頁:

http://pcbl.de/2011/07/20/dataset-on-your-wp7-app/

可是,覺得有點麻煩,所以,我還是試著先用List<T>試試。

謝謝!
本篇文章回覆於2012-03-19 14:21
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
3樓
作者回應

荔枝
捐贈 VP 給 荔枝 檢舉此回應
找了一整天的資料,覺得很奇怪.....

有關Windows Phone 7 的資料,介紹「資料庫存取」的,好像非常少!

http://msdn.microsoft.com/zh-tw/windowsphone/ff955788
http://www.dotblogs.com.tw/code6421/archive/2010/08/26/17419.aspx
http://stackoverflow.com/questions/8669817/how-to-parse-xml-dataset-in-windows-phone-7
http://www.dotblogs.com.tw/kylin/archive/2010/08/28/17467.aspx

看來看去.....我還是不知如何接收WCF傳過去的List<T>!!!

總覺得找Windows Phone 7 的資料.....真的好難找,不知大大們可否介紹「Windows Phone 7在處理WCF傳來的SQL Server資料之各種型態之接收方法」的網頁...或方式呢?

再次請教,謝謝!
本篇文章回覆於2012-03-19 22:57
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
4樓
不錯的參考

jonnyhuang
檢舉此回應
我覺得你有點想太難了,就像賈伯斯譏笑比爾蓋茲沒有創意一樣,
微軟技術的演進其實有點新瓶裝舊酒,雖然看不到的核心不斷大幅度的改變,
但是看的到的技術都有看的到過去的影子,
資料少是因為它並不是太深奧的新技術,

由後端看回來WCF跟資料庫溝通,基本上WCF可以說是XML Web Service的進化版而已,
如果不習慣用LINQ to SQL或Entity Framework來跟資料庫存取,仍可以用舊有的AOD.NET來處理,
再來就是WIndows Phone跟WCF存取,
基本上就如同以往加入Web服務參考,
(最好把加入工具左方的服務展開,確認右方的作業可以看到WCF提供的方法,
如果沒展開有時候開發工具在建code時會沒建到方法)

Windows Phone的叫用方式也跟以往一樣,差別就是用非同步呼叫,
黃忠成老師的範例來說,
先建立由工具產生的WCF Client端物件,基本上就是服務名稱尾巴帶Client字眼,
ServiceReference1.Service1Client client = new ServiceReference1.Service1Client();

再來在接收事件撰寫當資料由WCF回傳回來是要做什麼,事件命名都是方法名稱加上Completed字尾,
client.HelloCompleted += (s, args) =>
{
MessageBox.Show(args.Result);
};
回傳的直就是args.Result,他的型別就是WCF回傳值得型別,
這邊因為是呼叫
public string Hello(string name)
{
return "Hello " + name;
}
回傳值是string,所以args.Result就是string,
如果你回傳的是List<t>,那他就是List<t>,
這邊因為Service1Client是區域變數沒有要共用,所以用Lambda運算式方式撰寫讓程式碼比較容易閱讀,
當然也可用以往事件撰寫方式處理,
最後就是呼叫WCF方法,方法名稱就是WCF方法加上Async字尾,
client.HelloAsync("code6421");
之所以會將接收事件宣告在呼叫前面是避免當資料回傳時事件還沒建立好,雖然機率很低。

PS:
當你找資料時不一定只找Windows Phone也可以搜尋Silverlight,
基本上Windows Phone只是多了硬體溝通的Silverlight程式。
本篇文章回覆於2012-03-20 12:58
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
5樓
作者回應

荔枝
捐贈 VP 給 荔枝 檢舉此回應
再次謝謝jonnyhuang大大,您說的我了解。

但不知為什麼,我在實作上還是出問題,我貼出我的程式碼如下:

WCF中的IService1.cs:

WCF的Service1.svc.cs:

Client端的Windows Phone 7中的MainPage.xaml.cs:

錯誤訊息如下:
Cannot implicitly convert type 'System.Collections.ObjectModel.ObjervableCollection<eggWP7.ServiceReference1.T>'
to 'System.Collections.Generic.List<eggWP7.ServiceReference1.T>'

我知道意思是型別不對,但.....我仍不明白該如何改才能正確??

再次請教,謝謝!
本篇文章回覆於2012-03-20 14:58
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
6樓
不錯的參考

jonnyhuang
檢舉此回應
因為它回傳的是ObjervableCollection
MSDN註解表示會在加入或移除項目時,或重新整理整份清單時,提供告知的動態資料集合。
提供告知其實就是實作 INotifyCollectionChanged 介面,
也就是說ObjervableCollection是實作 INotifyCollectionChanged 介面的集合物件,
跟List差別就是多了實作 INotifyCollectionChanged,
所以請改成ObjervableCollection接收,
或是在Windows Phone專案內Web服務參考的設定服務參考,將集合型別改成List。
本篇文章回覆於2012-03-20 17:27
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
7樓
作者回應

荔枝
捐贈 VP 給 荔枝 檢舉此回應
謝謝Lililala2大大、jonnyhuang大大的講解,

我成功了!

謝謝!
本篇文章回覆於2012-03-21 13:40
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
[ 變換順序 ]   
1

回覆
如要回應,請先登入.