|
Silverlight中常常用到DataGrid來展示密集數(shù)據(jù). 而常見應(yīng)用系統(tǒng)中我們需要把這些數(shù)據(jù)導(dǎo)入導(dǎo)出到固定Office套件中例如常用的Excel表格. 那么在Silverlight 中如何加以實現(xiàn)?
在參考大量資料后 提供參考思路如下:
A:純客戶端導(dǎo)出處理.利用Silverlight 與Javascript 進行交互實現(xiàn)導(dǎo)出Excel。
B:服務(wù)器端導(dǎo)出.獲得DataGrid數(shù)據(jù)源. 傳遞給WCF Service到服務(wù)器端. 然后把傳回數(shù)據(jù)通過ASP.NET中通用處理導(dǎo)出Excel方法加以實現(xiàn)。
方法A實現(xiàn)導(dǎo)入導(dǎo)出核心在JS腳本中. 屬于純客戶端交互. 簡潔實用. 但問題也正是源自于JS腳本. 如果對Excel數(shù)據(jù)格式進行變動. 大家都應(yīng)該知道JS支持的調(diào)試時不容易控制的. 所以很容易出現(xiàn)腳本錯誤. 而且每次修改起來都很麻煩費時。
方法B也算是各位非常熟悉一種方式. 獲得數(shù)據(jù)把數(shù)據(jù)傳入ASP.NET中通用實現(xiàn)導(dǎo)出Excel方法. 加以實現(xiàn). 大部分編碼都在服務(wù)器端. 比JS要容易控制. 所以方法B相比方法A而要效率更高, 且更容易移植 修改控制。
Silverlight中有沒有其他方式來實現(xiàn)? 答案是有的.Silverlight當(dāng)在使用高級權(quán)限運行Out-Of-Broswer[OOB]瀏覽器外應(yīng)用時. Silverlight 4版本中微軟為了支持企業(yè)用戶提供類似Office自動化功能,引入Com+自動化. COM+自動化僅支持有高級信任許可的OOB Silverlight應(yīng)用,高級信任許可意味著操作者可以在少許限制的條件下,在Windows計算機上執(zhí)行幾乎所有的命令,這就對Silverlight 實現(xiàn)Excel導(dǎo)出提供了可能。
注意:當(dāng)直接點擊導(dǎo)出按鈕時.會提示異常:"當(dāng)前上下文不支持此操作."因使用Com+自動化需要在OOB應(yīng)用模式才具有權(quán)限操作.所以右鍵點擊程序選擇程序安裝:
安裝本地后自動打開:
點擊導(dǎo)出到Excel按鈕 導(dǎo)出效果[有點粗糙]:
A:如何實現(xiàn)
頁面XAML布局:為了演示目的只有個Datagrid和一個Button按鈕如下:
1 <Grid x:Name="LayoutRoot" Background="White" Height="500" Width="707">2 <sdk:DataGrid AutoGenerateColumns="False" Margin="24,61,191,207" Name="dataGrid1">
3 <sdk:DataGrid.Columns >
4 <sdk:DataGridTextColumn Header="編 號" Binding="{Binding Id}"></sdk:DataGridTextColumn>
5 <sdk:DataGridTextColumn Header="顧客姓名" Binding="{Binding CustomerName}"></sdk:DataGridTextColumn>
6 <sdk:DataGridTextColumn Header="地 址" Binding="{Binding Address}"></sdk:DataGridTextColumn>
7 <sdk:DataGridTextColumn Header="電話號碼" Binding="{Binding Telephone}"></sdk:DataGridTextColumn>
8 </sdk:DataGrid.Columns>
9 </sdk:DataGrid>
10 <Button Content="導(dǎo)出到Excel中" Background="Red" Height="34" Margin="24,21,550,445" Name="button1" Width="133" Click="button1_Click" />
11 </Grid>
NET技術(shù):Silverlight 4中把DataGrid數(shù)據(jù)導(dǎo)出Excel—附源碼下載,轉(zhuǎn)載需保留來源!
鄭重聲明:本文版權(quán)歸原作者所有,轉(zhuǎn)載文章僅為傳播更多信息之目的,如作者信息標(biāo)記有誤,請第一時間聯(lián)系我們修改或刪除,多謝。