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())); //こ
こがうまくいかない
> ですが、それをlistViewにもってくるところがうまくいきません。
そうでしょうね。
ところで、「どううまくいかないか」とかは説明しないのですか。
> なにかいい方法はないでしょうか。よろしくおねがいします。
> ここら辺を勉強してみます。ありがとうございました、。
がんばってください。
すでにBanさんも指摘していますが
>ですが、それをlistViewにもってくるところがうまくいきません。
サマーさんが書いたとおりにうまくいってるじゃないですか。
自分の考える理想の処理結果を載せないと”何と比べてうまくいかないのか”伝わりません。
>なにかいい方法はないでしょうか。よろしくおねがいします。
1,最低限のネットマナーをしっかり勉強する
2,立てたスレは解決方法まで責任を持って閉じる(放置しない)
3,自分の考えをしっかり述べる(○○という動きを期待しましたが実際は△△となってしまい
ました)
過去に何度も指摘されてるのでこの辺をしっかりしないとまともに相手にしてはもらえな
いでしょう。
# どうせまた放置するんでしょ?
# Blueさんに指摘されたここは放置決定ですか?
# http://www.vcppclub.com/bbs01/wforum.cgi?mode=allread&no=3558&page=10
# はぅ、行き違いになってしまった(汗)
># Blueさんに指摘されたここは放置決定ですか?
># http://www.vcppclub.com/bbs01/wforum.cgi?mode=allread&no=3558&page=10
この2行のみ撤回します。
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' のメンバではありません。
のようなエラーがでます。
型の変換がいまいちよくわからないのですが、なにかいい方法はないでしょうか?
> listView2->Items->Add(gcnew ListViewItem(tblAuthors->Rows->ItemArray()));
ItemArrayメソッドをもっているのはDataRowCollectionではなくDataRowクラスです。
Rows->Item( 0 )->ItemArray()
とかすればできるんじゃない。
(677):Rows->Item( 0 )->ItemArray()
↑のコードに変えてやってみましたが、以下のようなエラーになります。
(677):'Item': クラス 'System::Data::DataRowCollection' の既定プロパティ (インデ
クサ) にアクセスするためには 'default' を使用してください
(677):'->ItemArray' : 左側がクラス、構造体、共用体、ジェネリック型へのポインタ
ではありません。
Rowsのメンバーについて調べる必要があるかもしれません。
Arrayとは違うアクセス方法なんでしょうかね。
for each ならうまくいきそう。
for each ( DataRow^ row in tblAuthors->Rows )
{
listView2->Items->Add(gcnew ListViewItem(row->ItemArray()));
}
Tables(DataTableCollection)も同様。
というか、普通に
dsPubs->Tables[Main_Table]
とか
tblAuthors->Rows[ 0 ]
とかでできそうな希ガス。
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()のかっこの中にはなにか
いれないといけないんでしょうか?
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()のかっこの中にはなにか
いれないといけないんでしょうか?
ItemArrayはメソッドではなくプロパティなのでは?
http://msdn2.microsoft.com/ja-jp/library/system.data.datarow.itemarray.aspx
すぐに質問し返してこないで、MSDNを調べてみてください。(基本)
array< String^ >^ item1 = dynamic_cast<array< String^ >^>(row->ItemArray);
listView2->Items->Add(gcnew ListViewItem(item1));
キャストすることでコンパイルに通るようになりました。
以上でこの質問を閉じます。