- PR -

クラスよりアプリケーションにDataSetをかえす仕方について・・。

1
投稿者投稿内容
しょしんしゃ★
会議室デビュー日: 2004/06/24
投稿数: 3
投稿日時: 2004-06-24 18:23
最近C#をはじめました。すごくくだらないかもしれない質問なのですが、今自分なりに勉強していてフォームにボックスを何個か置いて入力しボタンをクリックしたらクラスへそのボックスの内容を渡します。DataSet等を使用しそれを最終的にDataGridに表示させたいのです。

★クラス側モジュール
public string DataSetTest(string 名前,string 住所,string 電話)
{
DataSet custDS = new DataSet();
DataTable ordersTable = custDS.Tables.Add("Orders");
ordersTable.Columns.Add("名前", typeof(string));
ordersTable.Columns.Add("住所", typeof(string));
ordersTable.Columns.Add("電話", typeof(string));

DataRow workRow = custDS.Tables[0].NewRow();
workRow[0] = 1;
workRow["名前"] = 名前;
workRow["住所"] = 住所;
workRow["電話"] = 電話;
custDS.Tables[0].Rows.Add(workRow);
※これで良いのかもわかりません・・・。すいません。

}


★アプリケーション側★

xxxx データグリッドに表示 = クラス名.DataSetTest(名前.Text,住所.Text,電話.Text);

↓上のクラスから取得してきたものxxxxを使って下記の???を埋めてDataGridに表示したいです。

dataGrid.DataMember = "???";
dataGrid.DataSource = ???;

※たとえば文字列型ならstringでアプリケーション側に返せばいいとおもうのですが
DataSetとかの場合はどう返せばいいのかわかりません。基本的なことが分かっていないとは思うのですが・・・。

名前 | 住所 | 電話 |
xxxx 東京都  99-999

てな感じです・・・。本当に初歩的なものを質問して申し訳ございません。。。
説明もわかりづらいとおもうのですが・・・。





karajan
ベテラン
会議室デビュー日: 2002/07/05
投稿数: 89
投稿日時: 2004-06-24 20:50
DataSetを返すわけですから、

DataSet ds = new DataSet();
return ds;

これで返ります。

聖人@SKB
ベテラン
会議室デビュー日: 2003/03/26
投稿数: 58
お住まい・勤務地: 横浜(MM21)勤務の筈だがいつも顧客先常駐
投稿日時: 2004-06-24 21:44
別の観点から発言します。

こんな風に考えてみて下さい。
 ・DataGridは「データを表示させるもの(ビューワ)」
 ・DataSetは「表示したいデータ」
 ・DataGridには「ビューワとデータを今、結びつけます!」という術がある

 ・DataSourceとは「このデータを割り当てます」という宣言
 
これを踏まえて
 1.ASP.NET Webアプリケーションプロジェクトを作ってみる
 2.画面にDataGridコントロールを1つ貼り付ける
 3. private void Page_Load(object sender, System.EventArgs e){ }
  の中にしょしんしゃ★さんのコードを書く。
  DataSet custDS = new DataSet();
  〜
  custDS.Tables[0].Rows.Add(workRow);
  ※workRowに値を設定している個所は以下のように修正して下さい。
   //workRow[0] = 1;
   workRow["名前"] = "聖人";
   workRow["住所"] = "神奈川県";
   workRow["電話"] = "045-xxx-xxx";

 4.上記の行の次に以下のコードを書く
  DataGrid1.DataSource = custDS;
  DataGrid1.DataBind();
 5.実行する

  
で、DataGridに値が表示されます。
DataSourceは表示したいデータなので、DataSetに限らず、
表示可能なものなら表示できます。(不思議な日本語だ)

DataBind() が 先で述べている 結びつける術 のことです。
この考え方で序々に考え方を展開していってください。


たとえ話が分かりにくくなってしまいました。
以上。

[ メッセージ編集済み 編集者: 聖人@SKB 編集日時 2004-06-24 21:46 ]

[ メッセージ編集済み 編集者: 聖人@SKB 編集日時 2004-06-25 11:02 ]
しょしんしゃ★
会議室デビュー日: 2004/06/24
投稿数: 3
投稿日時: 2004-06-24 22:37
聖人@SKBさん、karajanさん丁寧な返答ありがとうございます。
アプリケーション側からうけとったデータを元に、クラスモジュールの中でDataGridに表示するための作業をしその結果をアプリケーション側に渡したかったのです。
その際に受け渡し(アプリケーション側⇒クラス⇒アプリケーション側)の仕方、どのように返すのかがわからなかったのですね。string型やint型しか返したことがなかったので・・・。

karajanさんからいただいた
DataSet ds = new DataSet();
return ds;

このreturnをアプリ側にわたせばよいとのことでしょうか???本当に申し訳ありません。
みなさん難しい質問ばかりしている中でこんな初歩的なことを質問していて申し訳ありません。クラスがはいると途端にわけがわからなくなってしまうのです。
まるく
大ベテラン
会議室デビュー日: 2004/01/09
投稿数: 181
投稿日時: 2004-06-24 23:55
引用:

その際に受け渡し(アプリケーション側⇒クラス⇒アプリケーション側)の仕方、どのように返すのかがわからなかったのですね。string型やint型しか返したことがなかったので・・・。



こんばんは。
結果に到達するまでに焦らず、一つ一つ整理していくとよいと思います。

★クラス側モジュール
public string DataSetTest(string 名前,string 住所,string 電話)

とかかれているDataSetTestの前のstringこそが、DataSetTestメソッドの呼び出し側が受け取ることができるデータ型の定義です。つまりここを

★クラス側モジュール
public DataSet DataSetTest(string 名前,string 住所,string 電話)

にしてやれば良いです。それに加えてkarajanさんが書かれているように、DataSetTestの中で作ったDataSetをreturnします。

return custDS;

ただ、まだ問題があって、受け取り側ではクラスのインスタンス(実体)を作成してやらなければなりません。しょしんしゃ★さんの書かれている受け取り方

DataSet ds = クラス名.DataSetTest(名前.Text,住所.Text,電話.Text);
dataGrid.DataSource = ds;

にしたい場合、staticを付ける必要があります(下記)。staticについては調べてください。

★クラス側モジュール
public static DataSet DataSetTest(string 名前,string 住所,string 電話)

さらに、メソッドの戻り値に指定できるのは1つのデータだけですので、DataMemberの名称をDataSetと共に返したい場合には、工夫が必要となりますね。。。(割愛します)
karajan
ベテラン
会議室デビュー日: 2002/07/05
投稿数: 89
投稿日時: 2004-06-25 00:10
データセットを返すクラス
public class DataManager
{
public DataSet GetDataSet()
{
DataSet ds = new DataSet();
//何か処理・・・

  return ds;
}
}

データセットを取得したいアプリ

DataManager mng = new DataManager();
DataSet ds = mng.GetDataSet();
dataGrid1.DataSource = ds;
dataGrid1.DataMember = "MyDataTable等";
//ASP.NETの場合は dataGrid1.DataBind();

ということだと思うのですが・・・。

クラスが絡むと、ということはC#というかオブジェクト指向の言語はまだ間もないということだと思いますが、そっち関係の本で勉強しながらやるといいと思います。
ある日突然目の前が開けるときがくると思います。
がんばってください。


しょしんしゃ★
会議室デビュー日: 2004/06/24
投稿数: 3
投稿日時: 2004-06-25 18:20
まるくさん、karajanさんありがとうございます。
一応datasetは返せたのでなんとか2つメソッドの戻り値をアプリ側に返せるように頑張ってやってみます。
ご親切にありがとうございます。
1

スキルアップ/キャリアアップ(JOB@IT)