DOBON.NET DOBON.NETプログラミング掲示板過去ログ

datagridのコピーについて

環境/言語:[C#]
分類:[.NET]

こんにちわ。
初心者です。
早速ですが質問させてください

C#の用した子フォームにdatagridを配置しています。
そのdatagridで選択された行をショートカットメニューなどでコピーしたいのですが、そのように記述してよいのかわかりません。
どなたかご存知の方、ご教授願います。
お世話になります。

■No13962に返信(カズさんの記事)
> C#の用した子フォームにdatagridを配置しています。
> そのdatagridで選択された行をショートカットメニューなどでコピーしたいのですが、そのように記述してよいのかわかりません。
> どなたかご存知の方、ご教授願います。

C# で作成した WindowsForm(?) に DataGrid を配置しており、
実行時に、ユーザーが DataGrid 上の任意の行を選択して、
コンテキストメニュー等を用意して、それをクリックしたイベントにより、
その行の情報をコピーしたい。

という事でよろしいですか?

コピーした行の情報はどの様に使うのですか?
コピーした行と同じデータの行を追加したい、ということですか?
返信ありがとうございます。

> C# で作成した WindowsForm(?) に DataGrid を配置しており、
> 実行時に、ユーザーが DataGrid 上の任意の行を選択して、
> コンテキストメニュー等を用意して、それをクリックしたイベントにより、
> その行の情報をコピーしたい。
>
> という事でよろしいですか?
その通りです。


> コピーした行の情報はどの様に使うのですか?
> コピーした行と同じデータの行を追加したい、ということですか?
エクセルにコピーしたいです。

よろしくお願いします。
お世話になります。

■No13968に返信(カズさんの記事)
他にもっといいやり方があると思いますが...

private void Form1_Load(object sender, System.EventArgs e) {
  DataTable dt;
  dt = new DataTable();
  dt.Columns.Add("field1", typeof(string));
  dt.Columns.Add("field2", typeof(string));
  dt.Columns.Add("field3", typeof(string));

  dt.Rows.Add(new string[]{"aaa","aaaa","aaaaa"});
  dt.Rows.Add(new string[]{"bbb","cccc","ccccc"});
  dt.Rows.Add(new string[]{"ddd","dddd","ddddd"});
  dt.Rows.Add(new string[]{"eee","eeee","eeeee"});
  this.dataGrid1.DataSource = dt;

  ContextMenu mnu = new ContextMenu();
  this.dataGrid1.ContextMenu = mnu;
  mnu.MenuItems.Add(new MenuItem("copy", new EventHandler(this.test)));
}

private void test(object sender, System.EventArgs e) {
  SendKeys.Send("^C");
}

# SendKeys.Send は、他のアプリケーションに影響を与える可能性があるので
# やらない方がいいんだけど...
ありがとうございます。
下記の記述方法で試してみます。


> private void Form1_Load(object sender, System.EventArgs e) {
>   DataTable dt;
>   dt = new DataTable();
>   dt.Columns.Add("field1", typeof(string));
>   dt.Columns.Add("field2", typeof(string));
>   dt.Columns.Add("field3", typeof(string));
>
>   dt.Rows.Add(new string[]{"aaa","aaaa","aaaaa"});
>   dt.Rows.Add(new string[]{"bbb","cccc","ccccc"});
>   dt.Rows.Add(new string[]{"ddd","dddd","ddddd"});
>   dt.Rows.Add(new string[]{"eee","eeee","eeeee"});
>   this.dataGrid1.DataSource = dt;
>
>   ContextMenu mnu = new ContextMenu();
>   this.dataGrid1.ContextMenu = mnu;
>   mnu.MenuItems.Add(new MenuItem("copy", new EventHandler(this.test)));
> }
>
> private void test(object sender, System.EventArgs e) {
>   SendKeys.Send("^C");
> }
ご教授頂いた記述で解決できました。
本当にありがとうございました。
解決済み!
お世話になります。

↓こっちのほうがいいかもしれません...

private void test(object sender, System.EventArgs e){
  DataTable dt = (DataTable)this.dataGrid1.DataSource;
  DataRow row = dt.Rows[this.dataGrid1.CurrentRowIndex];
  System.Text.StringBuilder sb = new System.Text.StringBuilder();

  for (int i=0; i < dt.Columns.Count; i++)
  {
    sb.Append(row[i].ToString());
    if (i != dt.Columns.Count -1) {sb.Append("\t");};
  }
  Clipboard.SetDataObject(sb.ToString() ,true);
  //      SendKeys.Send("^C");
}
解決済み!
2005/12/01(Thu) 10:10:00 編集(投稿者)

返信に気づいていませんでした。
上記記述を参考にさせてもらいます。
解決済み!

DOBON.NET | プログラミング道 | プログラミング掲示板