[Silverlight] 根據DataGrid資料輸出成CSV檔
2010/12/27
之前分享過一篇文章,是把資料輸出成 CSV檔案 - [Silverlight] 在Silverlight中輸出成 *.CSV 檔案
但是這一篇是根據一個迴圈,或是List<Data> 去做的,現在這一篇來分享根據DataGrid所顯示的資料產生CSV…
因為你可能輸出時候不要把某一欄的資料給輸出…
介紹一下配置..
案例說明:dataGrid1會先Bind 一些資料進來,在btnToCSV時候會把 dataGrid1資料輸出成CSV
如果是按下 btnToCSV2 會先移除DataGrid第一欄測試看看輸出CSV是不是會沒有第一欄…
首先先建立一個 Extension Methods 當然你也可以不需要這樣做
DataGridExtendUtility.cs
using System.Collections.Generic; using System.IO; using System.Linq; using System.Windows; using System.Windows.Controls; namespace ExportToCSVByOneCode { public static class DataGridExtendUtility { /// <summary> /// 依照DataGrid內容取得每一列的資料 /// </summary> /// <param name="grid"></param> /// <returns></returns> public static ICollection<DataGridRow> GetRows(this DataGrid grid) { List<DataGridRow> rows = new List<DataGridRow>(); foreach (var rowItem in grid.ItemsSource) { grid.ScrollIntoView(rowItem, grid.Columns.Last()); FrameworkElement fel = grid.Columns.Last().GetCellContent(rowItem); DataGridRow row = DataGridRow.GetRowContainingElement(fel.Parent as FrameworkElement); if (row != null) rows.Add(row); } return rows; } public static void ToCSV(this DataGrid grid) { var title = ""; foreach (var c in grid.Columns) { title += "\t" + c.Header.ToString(); } title = title.Remove(0, 1); string data = "" + title; data += "\r\n"; foreach (DataGridRow rowItem in grid.GetRows()) { foreach (var c in grid.Columns) { var res = ""; try { DataGridCell cell = c.GetCellContent(rowItem.DataContext).Parent as DataGridCell; res = (cell.Content as TextBlock).Text; } catch { res = ""; } data += res + "\t"; } data += "\r\n"; } SaveFileDialog sfd = new SaveFileDialog() { DefaultExt = "csv", Filter = "CSV Files (*.csv)|*.csv|All files (*.*)|*.*", FilterIndex = 1 }; if (sfd.ShowDialog() == true) { using (Stream stream = sfd.OpenFile()) { using (StreamWriter writer = new StreamWriter(stream, System.Text.UnicodeEncoding.Unicode)) { writer.Write(data); writer.Close(); } stream.Close(); } } } } }
其中有一個 Extension Methods 叫做 ToCSV 讓 DataGrid 物件都有能力按照DataGrid內部資料輸出成CSV
這時候我們呼叫 輸出成CSV
private void btnToCSV_Click(object sender, RoutedEventArgs e) { this.dataGrid1.ToCSV(); }
結果:
再來就是測試我移除第一個欄位在輸出成csv
Code :
private void btnToCSV2_Click(object sender, RoutedEventArgs e) { this.dataGrid1.Columns.RemoveAt(0); this.dataGrid1.ToCSV(); }
結果:
移除完第一欄位後並且輸出…
有需要的可以自行修改成更符合自己想要用的…
Preview:
讚一下:
下載:
標籤:
Silverlight
|
This entry was posted on 凌晨3:13
and is filed under
Silverlight
.
You can follow any responses to this entry through
the RSS 2.0 feed.
You can leave a response,
or trackback from your own site.
訂閱:
張貼留言 (Atom)
0 意見:
張貼留言