【WPF】DataGridの内容をSaveFileDialogを使ってCSVファイルに出力する
おはようございます。
前回、CSVファイルの読み込みをやったので今回はファイル出力をやってみます。
WPFというか C# ですね。。
プログラムは例によって前回までのものを使います。
スポンサーリンク
画面の変更
画面に「CSV出力」ボタンを追加します。

MainWindow.xaml
次の記述を追加します。
1  | <Button x:Name="exp_button"Content="CSV出力"HorizontalAlignment="Left"Margin="330,273,0,0"VerticalAlignment="Top"Width="75"Height="30"Click="exp_button_Click"/>  | 
全体
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39  | <Window x:Class="WpfApp1.MainWindow"         xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"         xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"         xmlns:d="http://schemas.microsoft.com/expression/blend/2008"         xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"         xmlns:local="clr-namespace:WpfApp1"         mc:Ignorable="d"         Title="一覧"Height="350"Width="530">     <Window.Resources>         <ResourceDictionary Source="/Style/StyleDic.xaml"/>     </Window.Resources>     <Grid>         <Grid.Resources>             <local:KindConverter x:Key="KindConv"/>         </Grid.Resources>         <Label Content="名前:"Margin="10,10,0,0"Style="{StaticResource lb-normal}"/>         <TextBox x:Name="search_name"Margin="56,12,0,0"Style="{StaticResource tx-normal}"/>         <Label Content="種別:"Margin="201,10,0,0"Style="{StaticResource lb-normal}"/>         <ComboBox x:Name="search_kind"Margin="252,12,0,0"Style="{StaticResource cb-normal}"/>         <Button x:Name="search_button"Content="検索"Margin="432,12,0,0"Style="{StaticResource btn-normal}"Click="search_button_Click"/>         <DataGrid Name="dataGrid"HorizontalAlignment="Left"Margin="10,43,0,0"Width="497"Height="225"Style="{StaticResource grid-normal}" >             <DataGrid.Columns>                 <DataGridTextColumn Binding="{Binding No}"ClipboardContentBinding="{x:Null}"Header="No"IsReadOnly="True"Width="50"/>                 <DataGridTextColumn Binding="{Binding Name}"ClipboardContentBinding="{x:Null}"Header="名前"IsReadOnly="True"Width="100"/>                 <DataGridTextColumn Binding="{Binding Sex}"ClipboardContentBinding="{x:Null}"Header="性別"IsReadOnly="True"Width="40"/>                 <DataGridTextColumn Binding="{Binding Age}"ClipboardContentBinding="{x:Null}"Header="年齢"IsReadOnly="True"Width="40"/>                 <DataGridTextColumn Binding="{Binding Kind, Converter={StaticResource KindConv}}"ClipboardContentBinding="{x:Null}"Header="種別"IsReadOnly="True"Width="120"/>                 <DataGridTextColumn Binding="{Binding Favorite}"ClipboardContentBinding="{x:Null}"Header="好物"IsReadOnly="True"Width="*"/>             </DataGrid.Columns>         </DataGrid>         <Button x:Name="add_button"Content="追加"HorizontalAlignment="Left"Margin="10,273,0,0"VerticalAlignment="Top"Width="75"Height="30"Click="add_button_Click"/>         <Button x:Name="upd_button"Content="更新"HorizontalAlignment="Left"Margin="90,273,0,0"VerticalAlignment="Top"Width="75"Height="30"Click="upd_button_Click"/>         <Button x:Name="del_button"Content="削除"HorizontalAlignment="Left"Margin="170,273,0,0"VerticalAlignment="Top"Width="75"Height="30"Click="del_button_Click"/>         <Button x:Name="imp_button"Content="CSV読込"HorizontalAlignment="Left"Margin="250,273,0,0"VerticalAlignment="Top"Width="75"Height="30"Click="imp_button_Click"/>         <Button x:Name="exp_button"Content="CSV出力"HorizontalAlignment="Left"Margin="330,273,0,0"VerticalAlignment="Top"Width="75"Height="30"Click="exp_button_Click"/>     </Grid> </Window>  | 
ライブラリの使用宣言を追加
次の記述を追加します。
MainWindow.xaml.cs
1 2  | usingSystem.IO; usingMicrosoft.Win32;  | 
SaveFileDialogを利用するためのライブラリとなります。
クリックイベントの追加
CSV出力ボタンがクリックされた際のイベントを追加し、
ファイルの出力処理を記述します。
MainWindows.xaml.cs
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58  |             /// <summary>             /// CSV出力ボタンクリックイベント.             /// </summary>             /// <param name="sender"></param>             /// <param name="e"></param>             privatevoidexp_button_Click(objectsender,RoutedEventArgse)             {                 // ファイル保存ダイアログ                 SaveFileDialog dlg=newSaveFileDialog();                 // デフォルトファイル名                 dlg.FileName="cat.csv";                 // デフォルトディレクトリ                 dlg.InitialDirectory=@"c:\";                 // ファイルのフィルタ                 dlg.Filter="CSVファイル|*.csv|すべてのファイル|*.*";                 // ファイルの種類                 dlg.FilterIndex=0;                 // 指定されたファイル名を取得                 if(dlg.ShowDialog()==true)                 {                     List<Cat>list=this.dataGrid.ItemsSource asList<Cat>;                     Stringdelmiter=",";                     StringBuilder sb=newStringBuilder();                     Cat lastData=list.Last();                     foreach(Cat cat inlist)                     {                         sb.Append(cat.No).Append(delmiter);                         sb.Append(cat.Name).Append(delmiter);                         sb.Append(cat.Sex).Append(delmiter);                         sb.Append(cat.Age).Append(delmiter);                         sb.Append(cat.Kind).Append(delmiter);                         sb.Append(cat.Favorite);                         if(!cat.Equals(lastData))                         {                             sb.Append(Environment.NewLine);                         }                     }                     Stream st=dlg.OpenFile();                     StreamWriter sw=newStreamWriter(st,Encoding.GetEncoding("UTF-8"));                     sw.Write(sb.ToString());                     sw.Close();                     st.Close();                     MessageBox.Show("CSVファイルを出力しました。");                 }                 else                 {                     MessageBox.Show("キャンセルされました。");                 }             }  | 
CSV出力してみる
修正後の画面を起動し、CSV出力ボタンをクリックします。

ファイル保存ダイアログが表示されます。
プログラム内で設定したデフォルトのファイル名や、
ファイルの種類がちゃんと表示されていますね。

正常に出力が完了しました。
またまたあっさり終わっちゃいましたね。
次回はインストーラーの作成なんかやってみようかと思います。
ソースはこちら
ではでは。









ディスカッション
コメント一覧
まだ、コメントがありません