DataSetをArrayに変換する方法

[戻る]
サマー [E-Mail] [HomePage] 2006/06/30(金) 14:27:08
Windows XP,Visual Studio 2005をつかっています。

以下のようなコードでデータベースからデータを取得してリストビューに
データを表示しようとしています。Main_Tableというのがデータベースにある
表の名前です。データセット(dsPubs)にデータがはいるところまではいいの
ですが、それをlistViewにもってくるところがうまくいきません。

なにかいい方法はないでしょうか。よろしくおねがいします。

// データベース接続
SqlConnection ^ objConn;
String ^ sConnectionString;
sConnectionString = "Data 
Source=.\\SQLEXPRESS;AttachDbFilename=C:\\kakeibo.mdf;Integrated 
Security=True;Connect Timeout=30;User Instance=True";
             
objConn = gcnew SqlConnection(sConnectionString);
objConn->Open();

SqlDataAdapter^ daAuthors = gcnew SqlDataAdapter("Select * From Main_Table", 
objConn);

DataSet^ dsPubs = gcnew DataSet("Pubs");

// データ読み込み
daAuthors->Fill(dsPubs, "Main_Table");

DataTable^ tblAuthors = dsPubs->Tables->Item("Main_Table"); //ここらがうまくい
かない

// リストビューにデータ表示
listView2->Items->Add(gcnew ListViewItem(tblAuthors->Rows->ItemArray())); //こ
こがうまくいかない

Ban 2006/06/30(金) 14:31:51
> ですが、それをlistViewにもってくるところがうまくいきません。

そうでしょうね。
ところで、「どううまくいかないか」とかは説明しないのですか。

> なにかいい方法はないでしょうか。よろしくおねがいします。

> ここら辺を勉強してみます。ありがとうございました、。
がんばってください。

asd 2006/06/30(金) 14:46:38
すでにBanさんも指摘していますが

>ですが、それをlistViewにもってくるところがうまくいきません。

サマーさんが書いたとおりにうまくいってるじゃないですか。
自分の考える理想の処理結果を載せないと”何と比べてうまくいかないのか”伝わりません。

>なにかいい方法はないでしょうか。よろしくおねがいします。

1,最低限のネットマナーをしっかり勉強する
2,立てたスレは解決方法まで責任を持って閉じる(放置しない)
3,自分の考えをしっかり述べる(○○という動きを期待しましたが実際は△△となってしまい
ました)

過去に何度も指摘されてるのでこの辺をしっかりしないとまともに相手にしてはもらえな
いでしょう。

# どうせまた放置するんでしょ?
# Blueさんに指摘されたここは放置決定ですか?
# http://www.vcppclub.com/bbs01/wforum.cgi?mode=allread&no=3558&page=10

asd 2006/06/30(金) 14:48:28
# はぅ、行き違いになってしまった(汗)

># Blueさんに指摘されたここは放置決定ですか?
># http://www.vcppclub.com/bbs01/wforum.cgi?mode=allread&no=3558&page=10

この2行のみ撤回します。

サマー [E-Mail] [HomePage] 2006/06/30(金) 14:51:12
DataTable^ tblAuthors = dsPubs->Tables->Item("Main_Table");
↑のコードでDataSet型から"Main_Table"というなまえのDataTableをひっぱって
こようとしているのですが、コンパイルすると

 'Item': クラス 'System::Data::DataTableCollection' の既定プロパティ (インデク
サ) にアクセスするためには 'default' を使用してください

のようなエラーがでます。

また

listView2->Items->Add(gcnew ListViewItem(tblAuthors->Rows->ItemArray())); 
↑のコードでDataTable型のtblAuthorsをarray<String^>^にしようとしているの
ですが、

'ItemArray' : 'System::Data::DataRowCollection' のメンバではありません。

のようなエラーがでます。

型の変換がいまいちよくわからないのですが、なにかいい方法はないでしょうか?

Blue 2006/06/30(金) 15:05:56
> listView2->Items->Add(gcnew ListViewItem(tblAuthors->Rows->ItemArray())); 
ItemArrayメソッドをもっているのはDataRowCollectionではなくDataRowクラスです。

Rows->Item( 0 )->ItemArray()

とかすればできるんじゃない。

サマー [E-Mail] [HomePage] 2006/06/30(金) 15:15:30
(677):Rows->Item( 0 )->ItemArray()
↑のコードに変えてやってみましたが、以下のようなエラーになります。

(677):'Item': クラス 'System::Data::DataRowCollection' の既定プロパティ (インデ
クサ) にアクセスするためには 'default' を使用してください

(677):'->ItemArray' : 左側がクラス、構造体、共用体、ジェネリック型へのポインタ
ではありません。

Rowsのメンバーについて調べる必要があるかもしれません。

Blue 2006/06/30(金) 15:22:45
Arrayとは違うアクセス方法なんでしょうかね。
for each ならうまくいきそう。

for each ( DataRow^ row in tblAuthors->Rows )
{
    listView2->Items->Add(gcnew ListViewItem(row->ItemArray())); 
}

Tables(DataTableCollection)も同様。

Blue 2006/06/30(金) 15:26:59
というか、普通に

dsPubs->Tables["Main_Table"]

とか

tblAuthors->Rows[ 0 ]

とかでできそうな希ガス。

サマー [E-Mail] [HomePage] 2006/06/30(金) 15:44:56
for each ( DataTable^ tblAuthors in dsPubs->Tables )
{
 for each (DataRow^ row in tblAuthors->Rows )
 {
    // リストビューにデータ表示
(682):    listView2->Items->Add(gcnew ListViewItem(row->ItemArray()));
 }
}

↑のコードで結構いいところまでいきましたが、

(682) : error C2064: 0 引数を取り込む関数には評価されません。

のようなエラーがでてしまいます。ItemArray()のかっこの中にはなにか
いれないといけないんでしょうか?

サマー [E-Mail] [HomePage] 2006/06/30(金) 15:44:59
for each ( DataTable^ tblAuthors in dsPubs->Tables )
{
 for each (DataRow^ row in tblAuthors->Rows )
 {
    // リストビューにデータ表示
(682):    listView2->Items->Add(gcnew ListViewItem(row->ItemArray()));
 }
}

↑のコードで結構いいところまでいきましたが、

(682) : error C2064: 0 引数を取り込む関数には評価されません。

のようなエラーがでてしまいます。ItemArray()のかっこの中にはなにか
いれないといけないんでしょうか?

Blue 2006/06/30(金) 16:00:27
ItemArrayはメソッドではなくプロパティなのでは?
http://msdn2.microsoft.com/ja-jp/library/system.data.datarow.itemarray.aspx

すぐに質問し返してこないで、MSDNを調べてみてください。(基本)

サマー [E-Mail] [HomePage] 2006/06/30(金) 16:43:43
[[解決]]
array< String^ >^  item1 = dynamic_cast<array< String^ >^>(row->ItemArray);
listView2->Items->Add(gcnew ListViewItem(item1));

キャストすることでコンパイルに通るようになりました。
以上でこの質問を閉じます。

古いスレッドには追加発言できません。