【WPF】CodePlex DataGrid コピーアンドペースト

  • 2009.04.14 Tuesday
  • 01:01
DataGridClipboardCopyMode.IncludeHeader

Source and Project

久々にWPFのサンプルコードの紹介です。おそらくPCが壊れて以来だと思います。先ほど、CodePlexのWpfToolkitをインストールしたので、DataGridを触るのも久々です。

CodePlex WpfToolkit
http://wpf.codeplex.com/Release/ProjectReleases.aspx?ReleaseId=25047

今回はDataGridがデフォルトでサポートしているクリップボードへのコピー機能を紹介したいと思います。つまりセルが選択されている場合に、ユーザがコピーのアクション、たとえばWindowsのショートキーでこれを行うなら、「Ctrl + C」になりますが、そのときの制御のモードがいくつかDataGridコントロール側で用意されています。


DataGrid.ClipboardCopyModeプロパティ(依存関係プロパティ)
列挙体DataGridClipboardCopyModeを指定することによりクリップボードへのコピーのモードを切り替えます。また、コマンドもサポートされており、DataGrid.ClipboardCopyModeプロパティが変更されるとコマンドの動きも追随します。列挙体DataGridClipboardCopyModeには3つの値があり、それぞれを下記に列挙すると

DataGridClipboardCopyMode.None
 クリップボードへのコピーをしないモード。
DataGridClipboardCopyMode.ExcludeHeader
 選択された複数のセルの値をクリップボードへコピーするモード。
 ヘッダー部分はなし。
DataGridClipboardCopyMode.IncludeHeader
 選択された複数のセルの値をクリップボードへコピーするモード。
 ヘッダー部分はあり。

となります。また、クリップボードで使用可能なデータ形式はDataGridコントロールがデフォルトでサポートしているのは

DataFormats.Html
 HTML データ形式を指定します。
DataFormats.Text
 ANSI テキスト データ形式を指定します。
DataFormats.UnicodeText
 Unicode テキスト データ形式を指定します。
DataFormats.CommaSeparatedValue
 CSV (コンマ区切りの値) データ形式を指定します。

の四つとなります。ペースト先のアプリケーションによって、形式は選択されれるか、またはユーザがしているするようなアプリケーションもあると思いますが、これはDataGridコントロールの担当範囲外です。

また、コピー時のイベントとしてCopyingRowClipboardContentが用意されています。イベント引数はDataGridRowClipboardEventArgsオブジェクトです。このDataGridRowClipboardEventArgsオブジェクトの中にコピーに関する情報が含まれているので自分でカスタマイズすることが可能です。


では、実際に動きを見てみたいと思います。今回はComboBoxにDataGridClipboardCopyMode列挙体を列挙し、DataGrid.ClipboardCopyModeプロパティの値を設定します。それをWordへペーストしてみて、動きを確かめてみたいと思います。

<Window x:Class="Art55.DataGridCopyAndPaset20090413_001.Window1"
 xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
 xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
 xmlns:Controls="clr-namespace:Microsoft.Windows.Controls;assembly=WPFToolkit"
 Title="Window1" Height="300" Width="300"
 Loaded="OnLoaded">
 <Grid>
  <Grid.RowDefinitions>
   <RowDefinition Height="Auto" />
   <RowDefinition Height="*" />
  </Grid.RowDefinitions>
  <ComboBox x:Name="clipboardCopyMode"
     SelectedIndex="0">
  </ComboBox>
  <Controls:DataGrid x:Name="dataGrid"
       Grid.Row="1"
       ClipboardCopyMode="{Binding SelectedItem, ElementName=clipboardCopyMode}"></Controls:DataGrid>
 </Grid>
</Window>

------------------------------------------------------
 public partial class Window1 : Window
 {
  public Window1()
  {
   InitializeComponent();
  }

  private void OnLoaded(object sender, RoutedEventArgs e)
  {
   DataTable dataTable = new DataTable();
   dataTable.Columns.Add(new DataColumn("Column01"));
   dataTable.Columns.Add(new DataColumn("Column02"));
   dataTable.Columns.Add(new DataColumn("Column03"));

   dataTable.Rows.Add(new object[] { "A1", "B1", "C1" });
   dataTable.Rows.Add(new object[] { "A2", "B2", "C2" });
   dataTable.Rows.Add(new object[] { "A3", "B3", "C3" });
   dataTable.Rows.Add(new object[] { "A4", "B4", "C4" });
   dataTable.Rows.Add(new object[] { "A5", "B5", "C5" });

   dataGrid.ItemsSource = dataTable.DefaultView;


   clipboardCopyMode.ItemsSource = new[]
            {
             DataGridClipboardCopyMode.None, DataGridClipboardCopyMode.ExcludeHeader
             , DataGridClipboardCopyMode.IncludeHeader
            };
  }
 }

これを実行してみると

DataGridClipboardCopyMode.ExcludeHeaderモードの場合が下記の図になります。選択されたセルの値だけがコピーアンドペーストできています。また、WordはHtml形式をサポートしているので、表が作成されていることがわかります。逆にメモ帳などのようなテキスト形式のみをサポートしている場合はタブ区切りの値がペーストされます。
DataGridClipboardCopyMode.ExcludeHeader

DataGridClipboardCopyMode.IncludeHeaderモードの場合は、下記のようになります。選択行以外にヘッダー情報も含まれていることが確認できます。
DataGridClipboardCopyMode.IncludeHeader

DataGridClipboardCopyMode.Noneモードです。これはクリップボードがからの場合のアクションです。もし、クリップボードに事前に何らかの値が存在した場合はペーストするとその値がペーストされます。
DataGridClipboardCopyMode.None


まとめます。
1.DataGridのコピーモードは3つでDataGrid.ClipboardCopyModeプロパティで設定可能である。
2.DataGridのコピー時のデータ形式は4つサポートしている。


Source and Project
コメント
コメントする








    
この記事のトラックバックURL
トラックバック

calendar

S M T W T F S
      1
2345678
9101112131415
16171819202122
23242526272829
3031     
<< October 2016 >>

あわせて読みたい

あわせて読みたいブログパーツ

selected entries

categories

archives

recent comment

  • 【キーボード】6年前のRealForceを復活させることはできる!?その3
    art55 (05/22)
  • 【キーボード】6年前のRealForceを復活させることはできる!?その3
    分解大好き (05/18)
  • 【.NET Framework 4.5】 IListがIReadOnlyListを継承してない理由。
    art55 (02/04)
  • 【.NET Framework 4.5】 IListがIReadOnlyListを継承してない理由。
    Gen (02/04)
  • 【キーボード】RealForce が壊れて帰ってきた。
    art55 (04/29)
  • 【.NET Framework 4.5】 IListがIReadOnlyListを継承してない理由。
    art55 (02/23)
  • 【.NET Framework 4.5】 IListがIReadOnlyListを継承してない理由。
    かるあ (02/22)
  • 【C#】Dictionaryの実装・データ構造・アルゴリズムを観察する。
    art55 (01/16)
  • 【C#】Dictionaryの実装・データ構造・アルゴリズムを観察する。
    karuakun (01/16)
  • 【NetOffice】【Excel】死なないExcelプロセスをKillする。
    art55 (12/05)

recent trackback

recommend

recommend

recommend

C#プログラマのための.NETアプリケーション最適化技法 (Programmer's SELECTION)
C#プログラマのための.NETアプリケーション最適化技法 (Programmer's SELECTION) (JUGEMレビュー »)
Sasha Goldshtein,Dima Zurbalev,Ido Flatow,サシャ・ゴルドシュタイン,ディマ・ズルバレフ,イド・フラトー

recommend

ろんりと集合
ろんりと集合 (JUGEMレビュー »)
中内 伸光
とてもわかりやすいです。

recommend

recommend

シャノン・ノイマン・ディジタル世界
シャノン・ノイマン・ディジタル世界 (JUGEMレビュー »)
市川 忠男
4章がリレーショナルデータベースな内容になってます。ページ数があまりありませんが、ポイントがものすごく的確にまとまっていて、感動します。

recommend

東プレ Realforce91UBK-S 静音キーボード 静電容量無接点方式 変荷重 ブラック NG01BS
東プレ Realforce91UBK-S 静音キーボード 静電容量無接点方式 変荷重 ブラック NG01BS (JUGEMレビュー »)

テンキーレス、静音のRealForce91UBK-S。スコスコ感がたまらなく気持ちいいです。家と会社で2台持ってます。

recommend

recommend

プログラミング.NET Framework 第4版 (プログラミングシリーズ)
プログラミング.NET Framework 第4版 (プログラミングシリーズ) (JUGEMレビュー »)
Jeffrey Richter
発売予定美 2013年10月10日。.NET Frameworkとお付き合いする人のバイブルですね。

recommend

recommend

キャット・シッターの君に。
キャット・シッターの君に。 (JUGEMレビュー »)
喜多嶋 隆
私のイラストレータデビュー本です。

recommend

Essential .NET ― 共通言語ランタイムの本質
Essential .NET ― 共通言語ランタイムの本質 (JUGEMレビュー »)
ドン・ボックス,クリス・セルズ,Don Box,Chris Sells,吉松 史彰

links

profile

search this site.

others

mobile

qrcode

powered

無料ブログ作成サービス JUGEM