VB.NETで配列をテーブルに変換する方法とは?

このQ&Aのポイント
  • VB.NETで一次元配列string()のデータをDataTableに変換する方法について教えてください。
  • 配列をDataTableに変換する際に発生するエラー「型'String'の値を'System,Data,DataTable'に変換できません。」の解決方法について教えてください。
  • 解決方法が見つからず、VB.NETで配列をテーブルに変換できない状況に困っています。どなたか助けてください。
回答を見る
  • ベストアンサー

VB.NETで、配列をテーブルに変換する。

VB.NETで、一次元配列string()にあるデータを、DataTableに変換 したいのですが、「型'String'の値を'System,Data,DataTable'に変換できません。」 と、エラーが発生してしまいます。 s1に、配列データが入っています。 Dim dt As DataTable Dim cnt As Integer Dim i As Integer dt = New DataTable count = s1.Length For i = 0 To cnt - 1 dt = CType(s1(i), DataTable) Next 解決方法が見つからず、行き詰っております。 宜しくお願い致します。

質問者が選んだベストアンサー

  • ベストアンサー
  • n-jun
  • ベストアンサー率33% (959/2873)
回答No.3

No.2です。 >ListBox1.DataSource = dtを、追加記載してから、 >「System.Data.DataRowView」が表示され、テーブルが表示されません。 まず文字型の1次元配列をListBox1にDataSource で代入するなら Dim s1() As String = New String() {"a", "b", "c", "d"} ListBox1.DataSource = s1 これで十分なはずですが・・・ テーブルとして表示するならDataGridViewを配置して 行なうのがよくある使い方と思います。 http://www.cocoaliz.com/vb.net/index/24/

upsong
質問者

お礼

新規でDataGridViewを使用すると、思い通りの結果ができました。 しかし、組み込みますと、「'dataType'引数をNullにすることはできません。」のエラーが発生してしまいます。 原因を追究していましたが、解決にはなりませんでした。 方法は分かりましたので、何とか別の方向で使用出来るようにしたいと思います。 ありがとうございました。

その他の回答 (2)

  • n-jun
  • ベストアンサー率33% (959/2873)
回答No.2

No.1です。 コード自体は新規のもので書いてみたものですので、 実際組み込んでみてダメだったとすると ちょっと不明ですね。 新規でやってみてダメだったとすると バージョンによるのかな? ⇒一応こちらは2005の参考書を基に 2008で検証しましたけど、 特にコードに書かれていること以外には 何もしてなくて・・・・

upsong
質問者

お礼

ありがとうございます。 組み込みでやっておりましたが、新規で実行しましても、 ListBox1.DataSource = dtを、追加記載してから、「System.Data.DataRowView」が表示され、テーブルが表示されません。 後、バージョンは、2012を、使用しております。

  • n-jun
  • ベストアンサー率33% (959/2873)
回答No.1

Dim s1() As String = New String() {"a", "b", "c", "d"} Dim dt As DataTable Dim dr As DataRow Dim cnt As Integer Dim i As Integer dt = New DataTable dt.Columns.Add("test", Type.GetType("System.String")) cnt = s1.Length For i = 0 To cnt - 1 dr = dt.NewRow() dr("test") = s1(i) dt.Rows.Add(dr) Next For i = 0 To dt.Rows.Count - 1 Debug.Print(dt.Rows(i).Item("test").ToString) Next こんな感じとか?

upsong
質問者

お礼

早速のご回答ありがとうございます。 試しました所、 >dt.Columns.Add("test", Type.GetType("System.String")) で、'dataType'引数をNullにすることはできません。と、エラーが発生してしまいます。 解決方法を探しましたが見つかりませんでした。 どのように対処すれば良いか分かりますでしょうか?

関連するQ&A

  • VB.NETで、配列をテーブルに変換して表示する。

    VB.NET初心者です 一次元配列string()に、下記データが格納されており、 そのデータを、ListBox1に表示したいのですが、 そのまま表示する方法が不明な為、DataTableに変換して から表示する方法で、実行しましたが、 syaintable = CType(syaindata_Obj(i), DataTable)の部分で、 「型 'System.String' のオブジェクトを型 'System.Data.DataTable' にキャストできません。」 というエラーが発生してしまいます。 列1 列2 列3 1 社員A 営業 2 社員B 総務 3 社員C 開発 4 社員D 開発 5 社員E 営業 6 社員F 営業 7 社員G 総務 8 社員H 営業 9 社員I  営業 10 社員J 開発 Dim syaindata As String() Dim syaindata_Obj As Object Dim syaintable As New DataTable Dim cnt As Integer Dim i As Integer i = 0 cnt = syaindata.Length syaindata_Obj = CObj(syaindata) For i = 0 To cnt - 1 syaintable = CType(syaindata_Obj(i), DataTable) Next ListBox1.DataSource = syaintable 以上、この方法以外でも良いので、リストボックスに表示 するようにしたいと思います。 宜しくお願い致します。

  • 配列のSession格納、及び取得方法について

    お世話になります。 現在Visual Studio 2005でプログラム作成中です。 質問内容は、 配列(文字列を格納)をSessionに渡し、次ページでその配列の値を取得できるかという点です。 ***(a.aspx.vb)抜粋*** Dim a() As String Redim a(DataTable1.Rows.Count) For i As Integer 0 to DataTable1.Rows.Count - 1 a(i) = CType(DataTable1.Rows(i).Item(0)) Next Session("a.list") = a(DataTable1.Rows.Count) Session("a.count") = DataTable1.Rows.Count ***(b.aspx)抜粋*** Dim b() As String = CType(Session("a.list"), String) Dim bCount as integer = CType(Session("a.count"),Integer) Dim Name as String For i As Integer 0 To bCount Name = CType(b(i),String) Next としているのですが、取得できません。 配列に格納されたものをSessionに格納し、取得することは可能なのでしょうか。 また、その他に適切なものがあればご教授ください。 よろしくお願いいたします。

  • 1次元配列のソート方法

    配列のソートメソッドについて質問させていただきます。 VB.NET初心者なので日本語がおかしいかもしれませんが、宜しくお願いいたします。 データテーブルが格納されている配列があり、 その配列をソートしたいと思っています。 データテーブルの中に「NO」と「ID」というフィールドがあります。 NOで昇順し、NOが同じだったらIDの昇順でソートといったことがしたいのですが、 条件によっては上手くいきません。 よろしければ、教えていただけないでしょうか? また、もっと効率の良い方法とかありましたら、具体的はソース等教えていただけないでしょうか? 宜しくお願いいたします。 [例] workDT() ← 元のデータテーブル配列 Dim Datatable(workDt.Rows.Count-1) As DataTable ← ソート後のデータテーブル配列 Dim tmpDatatable(workDT.Rows.Count-1) As DataTable ← 途中で使うデータテーブル配列 Dim NO(workDT.Rows.Count-1) As Integer ← 元のデータテーブル配列の各「NO」フィールドを格納する配列 Dim ID(workDT.Rows.Count-1) As String ← 途中で使うデータテーブル配列の各「ID」フィールドを格納する配列 Dim Index(workDT.Rows.Count-1) As Integer ← インデックスに使用 ' IDでソート For i = 0 To workDt.Length - 1 ID(i) = workDt(i).Rows(0).Item("ID") Index(i) = i Next ' 配列をIDでソート Array.Sort(ID, Index) ' ソート後配列をテンプ配列に格納 For i = 0 To workDt.Length - 1 tmpDatatable(i) = workDt(Index(i)).Copy Next ' NOでソート For i = 0 To tmpDatatable.Length - 1 NO(i) = tmpDatatable(i).Rows(0).Item("NO") Index(i) = i Next ' 配列をNOでソート Array.Sort(NO, Index) ' ソート後配列を格納 For i = 0 To tmpDatatable.Length - 1 Datatable(i) = tmpDatatable(Index(i)).Copy Next これで各配列を初期化します。 workDTに5つのデータテーブルが入っていて workDT(0):ID=3、NO=1 workDT(0):ID=1、NO=5 workDT(0):ID=2、NO=5 workDT(0):ID=4、NO=5 workDT(0):ID=5、NO=7 (IDは重複不可設定、NOは重複可設定です。) とした場合、NOのソートのところで変な順番になってしまいます。 Array.Sort(NO, Index) このメソッドは同じ値だった場合、何を優先してソートしているのでしょうか? 環境はWindowsXPSP3とVB2005です。

  • データ型変換

    String型のデータをInteger型の変数に入れたいのでが・・・。 '変数の宣言 Dim DataTable(2, 5) As String Dim made As Integer 'データ型変換 made = CInt(DataTable(1, 0)) このようにしたのですが、実行すると 『実行時エラー '13'  型が一致しません』 と表示され、デバックしてみるとココ↓ made = CInt(DataTable(1, 0)) が黄色くなります。 どうしたら上手く型変換ができるのでしょうか? ちなみに、VB6.0です。

  • VB.netで、動的な型変換を行いたいのですが、、、(CTypeではできない?!)

    VB.netで、 動的な型変換を行いたいと思っています。 イメージ的には、 CType(hogehoge,String)やCType(hogehoge,Integer) CType(hogehoge,MyClassHogehoge) ではなく、 CType(hogehoge,"String"),CType(hogehoge,"Integer") CType(hogehoge,"MyClassHogehoge") というように、 その場の変数で決まる型変換です。 Dim a as MyClassA Dim b as Object とあって CType(b,a)というような変換をしたいのです。 (が、CTypeやDirectCastの第二引数は、  定義された型名しか受け付け無いようです。) ----- 実際には、 mytype.InvokeMember("変数名", BindingFlags.SetProperty Or BindingFlags.Public Or BindingFlags.NonPublic Or BindingFlags.Instance, Nothing, "インスタンス", New [Object]() {"設定値"}) という処理をやる上で、 "設定値"が文字列(String)である場合、 "変数名"で、動的にアサインされた変数の型(たとえばMyClass)に型変換しないと、 値が設定できないためです。 (CType("設定値","インスタンス"."変数名")というようなこと必要となってくるはずです、、、) ----- 上記手順が、可能なのかどうか、 まったくのナンセンスなのかどうかも わかっていないので、 一言でもいただけるとたすかります。。。 どうぞよろしくおねがいいたします。

  • VB6で配列を文字列に変換する方法?

    VisualBasic6を使っております。 Dim ary() As Byte Dim s as String 配列を文字列に変換したり、文字列を配列にしたいのですが どのようにすれば良いのでしょうか?

  • VB 配列

    今,VBでテキストファイルを読込み配列に入れるという作業を書いたのですが,うまくいきません. 初回例外が発生してしまいます.配列は文字列の配列になります. どなたかご教示のほどよろしくお願いいたします. 'ファイルの読込み Dim path1 As String = "C:\Users\aleph_H.S\Desktop\気象台データインポートツール\気象台データインポートツール\" Dim path2 As String = "気象台データリスト.txt" Dim Mypath As String = path1 + path2 ' StreamReader の新しいインスタンスを生成する Dim cReader As New System.IO.StreamReader(Mypath, System.Text.Encoding.Default) ' 読み込んだ結果をすべて格納するための変数を宣言する Dim stResult As String = String.Empty Dim matrix(,) As String Dim ic As Long = 0 Dim icc As Long = 0 ReDim Preserve matrix(80, 3) ' 読み込みできる文字がなくなるまで繰り返す While (cReader.Peek() >= 0) ' ファイルを 1 行ずつ読み込む Dim stBuffer As String = cReader.ReadLine() ' 読み込んだものを追加で格納する stResult &= stBuffer & System.Environment.NewLine ic = ic + 1 'カンマ区切りで分割して配列に格納する Dim stArrayData As String() = stResult.Split(","c) For Each sstData In stArrayData icc = icc + 1 '文字列をInteger型に変換 matrix(ic - 1, icc - 1) = sstData Next End While cReader.Close()

  • VB2005で、Structureの配列を返すプログラムを以下のように書きたい

    VB2005で、Structureの配列を返すプログラムを以下のように書きたいのですが、そもそもVB6しか使ったことが無いもので、以下のような素数の結果を返すこのプログラムの書き方はVB2005らしいでしょうか? Module Module1 Public Structure SosuuStatus Public num As Integer Public status As String End Structure Class Sosuu Function SosuuCheck(ByVal st As Integer, ByVal ed As Integer) As SosuuStatus() Dim i As Integer, j As Integer Dim sosuu(0 To ed - st) As SosuuStatus Dim cnt As Integer = 0 For i = st To ed sosuu(cnt).num = i sosuu(cnt).status = "" '初期化 If 1 = i Then sosuu(cnt).status = "素数ではない" ElseIf 0 = (i Mod 2) Then sosuu(cnt).status = "素数ではない" Else For j = 3 To Math.Sqrt(ed) If 0 = (i / j) Then sosuu(cnt).status = "素数ではない" End If Next j End If If sosuu(cnt).status = "" Then sosuu(cnt).status = "素数である" End If cnt = cnt + 1 Next i SosuuCheck = sosuu End Function End Class End Module

  • 配列について

    配列の要素数をinteger型にいれたいのですがどうしたらいいですか? 例   Dim A() As String   Dim B AS Integer       A = "あ","い","う" Aの要素数3をBに入れたいのです。 この配列の作りかたもあっているか分かりませんがよろしくお願いします。

  • Excel.Rangeで取得した値を配列に格納するには?

    プログラミング初心者です。 VB.NET でExcelからデータを取得したのですが、配列等に格納したいのですが、うまくできなくて困っています。どなたか教えてください。 例)以下のデータを取得する場合 セルA(列)1(行)からA5まで セルB1からB5まで セルC1からC5まで Dim xl_APP As Excel.Application Dim xl_Book AS Excel.Workbook Dim xl_Sheet As Excel.Seets = xl_Book.Worksheets Dim xl_W_Sheet As Excel.Worksheet = CType(xl_W_Sheet.Item(1),Excel.Worksheet) 中略 Dim range_data As Excel.Range Dim i Integer Dim j Integer Dim strCel As String For i = 1 To 5 For j = 1 To 3 range_data = CType(xl_W_Sheet.Cells(i,j),Excel.Range) strCel = CStr(range_data.Value)  ↑String型変数に格納していますが、多次元配列?に格納して取り出せるようにしたいのですが、どうしたらよいのでしょうか? Next Nest <range_dataに格納されるデータ> A1:氏名 B1:学年 C:1 年齢 以下同上 ・・・・のように取り出したいと考えています。 よろしくお願いします。

専門家に質問してみよう