質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
VB.NET

Microsoft Visual Basic .NETのことで、Microsoft Visual Basic(VB6)の後継。 .NET環境向けのプログラムを開発することができます。 現在のVB.NETでは、.NET Frameworkを利用して開発を行うことが可能です。

Q&A

解決済

1回答

23257閲覧

DataTable型の情報をArrayList型の2次元配列に格納したいです。

xss

総合スコア36

VB.NET

Microsoft Visual Basic .NETのことで、Microsoft Visual Basic(VB6)の後継。 .NET環境向けのプログラムを開発することができます。 現在のVB.NETでは、.NET Frameworkを利用して開発を行うことが可能です。

0グッド

0クリップ

投稿2017/12/01 03:08

編集2017/12/01 04:52

###前提・実現したいこと
お世話になります。
浅い知識でうまくいかず困ってます。。

DataTable型のgetDataStorageにDBから取得したレコードを格納します。
中身の例:
|name|age|gender|
|田中 |28 | 男 |
↓(etc..)

For文を回しgetDataStorageをArrayList型の2次元配列であるarrDataStorageに格納するやり方のコードが知りたいです。
格納したい例:
(0,0) 田中
(0,1) 28
(0,2) 男
(1,0) 篠崎
(1,1) 24
(2,2) 女
↓ etc..

どなたかご教授をよろしくお願いします。

###発生している問題・エラーメッセージ

エラー BC30311 型 'String' の値を 'ArrayList' に変換できません。 Array型だとこのようなエラーになってしまう為ArrayList型にしたいです。 'エラー Option Strict On では、遅延バインディングを使用できません。 DirectCast(arrDataStorage(rowsCount), Hashtable)

###該当のソースコード

'共通処理 ☆ここをArrayからArrayListにしたい。 Dim arr1 As Array arr1 = aaaa(引数1,引数2) 'ArrayList型2次元配列を作る関数               ☆変更点As Array→ArrayListにしたい。 Private Function aaaa(ByVal 引数1 As String,ByVal 引数2 As String)As Array  'DataTable型のgetDataStorageを宣言 Dim getDataStorage As New DataTable getDataStorage = DBからレコードを取得(引数1,引数2) 'ArrayList型の2次元配列であるarrDataStorageを宣言 ☆変更点 Array→ArrayListにしたい。 Dim arrDataStorage(getDataStorage.Rows.Count - 1, getDataStorage.Columns.Count - 1) As ArrayList     'DataTableをArrayList型二次元配列に格納する For x As Integer = 0 To getDataStorage.Rows.Count - 1 For y As Integer = 0 To getDataStorage.Columns.Count - 1                      'ここでエラー arrDataStorage(x, y) = getDataStorage.Rows(x)(y) Next Next Return arrDataStorage End Function

'追記:
'何故Array(String)型の2次元配列なのではなく、ArrayList型の2次元配列を作りたい理由として、
'後ほど作ったArrayList型の2次元配列をここでHashtable型にキャストしてFor Eachを回したいからです。

For rowsCount = 0 To ArrayList型の変数.Count - 1    For Each aaa As DictionaryEntry In DirectCast(ArrayList型の変数(rowsCount), Hashtable)                       '☆ここでHashtableにキャストしたいがArray型だとエラーになります。 For Each bbb As DictionaryEntry In   DirectCast(arrDataStorage(rowsCount), Hashtable) Next Next Next

###補足情報(言語/FW/ツール等のバージョンなど)
Vb.NET VisualStudio2017

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2017/12/01 03:41

コードの中に定義不明な変数、メソッドがあります。そういうのがないようにしてもらえませんか?
退会済みユーザー

退会済みユーザー

2017/12/01 03:42

今時 ArrayList を使うことはほとんどないのですが、どのように使うのか書いてもらえると、その目的に合ったもっといい案が出てきそうな気がします。
xss

2017/12/01 04:40

SurferOnWwwさん回答ありがとうございます。まいどお世話になります。 ご指摘を拝見しました。説明不足で申し訳ありません。質問に追記させて頂きました。なぜArrayListにしたいかと言いますと後ほど作成した2次元配列をキャストしてhashtable型にしたい為です。考え方自体が駄目でしょうか・・?
退会済みユーザー

退会済みユーザー

2017/12/01 04:41

前のスレッド https://teratail.com/questions/102637 の話と関連していて、そこでは「最後にはファイル(メモ帳)出力したい」とのことでした。ArrayList を作るのはその過程に過ぎず、元データの DataTable ⇒ ArrayList ⇒ HashTable ⇒ テキストファイルにしたいということですか? であれば、ArrayList も HashTable も飛ばして、直接 DataTable ⇒ テキストファイルとした方がよさそうです。そうしない理由があるのですか?
xss

2017/12/01 04:48

実験として、テキストファイルに出力する内容として、DBから取得したデータをいろいろな型に格納して色々な表示の仕方がしたい為にこの質問になってしまいました。今回はDataTable→ArrayList型の2次元配列→ArrayList型の2次元配列をキャストしてHashtable にしたいです。懇切丁寧回答して頂いてるのに文脈が分かり辛く申し訳ありません。
退会済みユーザー

退会済みユーザー

2017/12/01 05:14

どうしてもということでしたら ArrayList ではなく List<T> を使いましょう。 http://www.atmarkit.co.jp/ait/articles/1710/25/news023.html そうしていただけると話にお付き合いできると思います。あくまで ArrayList ということでしたら、すみませんがお役に立てません。
xss

2017/12/01 10:44

SurferOnWwwさん回答ありがとうございます。データ構造をしっかり理解していないためあやふやな質問になってしまいました。とても参考になります。しっかりした質問ならばSurferOnWwwさんのお力を発揮する事が出来ると思いますので改めて質問の際によろしくお願いします。
退会済みユーザー

退会済みユーザー

2017/12/01 10:51

> SurferOnWwwさんのお力を発揮する事が出来る ← それはちょっと上から目線の発言のように聞こえますよ。そういう意識はなかったのかもしれませんが。
xss

2017/12/04 00:54

失礼しました。そういう意識は全くありませんでした。気を付けます。
退会済みユーザー

退会済みユーザー

2017/12/04 01:13

こちらがちょっと神経質すぎました。すみません。
xss

2017/12/04 01:27

いえいえ、ご指摘ありがとうございます。改めて質問の際よろしくお願いします。
guest

回答1

0

ベストアンサー

VB.NET

1arrDataStorage(x, y) = New ArrayList 2arrDataStorage(x, y).Add(getDataStorage.Rows(x)(y))

という形になると思いますが、本当にArrayListの2次元配列にデータを入れるのでしょうか?
ArrayList自体、複数データを扱う配列のような物です。
それの2次元配列ということは
arrDataStorage(0,0)(0)="田中"
arrDataStorage(0,1)(0)="28"
arrDataStorage(0,2)(0)="男"
arrDataStorage(1,0)(0)="篠崎"
arrDataStorage(1,1)(0)="24"
arrDataStorage(2,2)(0)="女"
という感じになるかと思います。

あげている例をみる限り
String型の2次元配列をイメージされているのではないでしょうか?


今一やりたいことというのが理解できていないのですが
DirectCast(arrDataStorage(rowsCount), Hashtable)
としても
エラー BC30311 型 'ArrayList' の値を 'Hashtable' に変換できません。
となると思います。

また、ForEachで回すということで

VB.NET

1 Dim arrDataStorage(getDataStorage.Rows.Count - 1) As ArrayList 2 3 'DataTableをArrayList型二次元配列に格納する 4 For x As Integer = 0 To getDataStorage.Rows.Count - 1 5 For y As Integer = 0 To getDataStorage.Columns.Count - 1 6 arrDataStorage(x) = New ArrayList 7 arrDataStorage(x).Add(getDataStorage.Rows(x)(y)) 8 Next 9 Next 10 11 For rowsCount = 0 To arrDataStorage.Count - 1 12 For Each columnData In arrDataStorage(rowsCount) 13 14 Next 15 Next 16

こういうことをやりたいのかとも思いましたが、違いますか?

投稿2017/12/01 03:46

編集2017/12/01 06:29
YAmaGNZ

総合スコア10258

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

xss

2017/12/01 04:35

YAmaGNZさん回答ありがとうございます。 何故Array(String)型の2次元配列なのではなく、ArrayList型の2次元配列を作りたい理由として、 後ほど作ったArrayList型の2次元配列をここでHashtable型にキャストしてFor Eachを回したい為です。 String型の2次元配列の2次元配列だとメソッド自体はエラー無く回るのですがArrayListでは不可能でしょうか・・? 説明不足で申し訳ございません。
xss

2017/12/01 10:20

YAmaGNZさん回答ありがとうございます。 なんとなく想像はしていましたがForとFor Eachで回したことがなかったのでとても参考になりました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問