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

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

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

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

解決済

VB.NETでGrapeCityのSPREADに、DBからとってきた値でコンボボックスを表示させたい。

saten
saten

総合スコア1

VB.NET

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

1回答

0グッド

0クリップ

253閲覧

投稿2022/11/08 02:32

編集2022/11/08 02:35

VB.NET歴2ヶ月ほどの初心者です。
VB.NETでGrapeCityのSPREADにdatatableからコンボボックスに値を配置したいのですが、「型 system.object[]のオブジェクト型 system.string[]にキャストできません」のエラーメッセージが出てしまいます。
以下ソースです。

----------
☆DBに接続するためのクラス

Public Function SqlAdapter(ByVal vSql As String,ByRef vDataTable As DataTable)As Integer

Try
_cmd.CommandText=vSql
_cmd.Transaction=_Trans
vDataTable=New DataTable
Dim lAdapter As New SqlDataAdapter(_cmd)
lAdapter.Fill(vDataTable)

catch ex As Exception
省略

End Function

☆SQL作成~実行モジュール

【SQL作成】
Private Function SelectFruit() As String

Dim sql As New System.Text.StringBuilder
sql.Append (″SELECT 名前,データ設定値 FROM フルーツテーブル″)

Return sql.ToString()

End Function

【SQL実行】

Private Function GetFruitData (ByVal vFrm As メインのフレーム名) As String()

Dim dt As DataTable

Try
dt = New DataTable

DBに接続するためのクラス. SqlAdapter(SelectFruit,dt)

Dim fruitData As String() = dt.AsEnumerable().Select(Function(row) row(″名前″)).ToArray()

Return fruitData

catch ex As Exception
省略

End Function

☆コンボボックスを表示するメインのフレーム

※ロードイベントに書いています

Call GetFruitData(Me)
Dim cmb As String()
cmb= GetFruitData(Me)
Dim cmbbox As New FarPoint.Win.Spread.CellType.ComboBoxCellType()
cmbbox.Items=cmb
Fruitsheet.Columns(3).CellType=cmbbox

☆フルーツテーブル中身

名前 データ設定値
りんご | 1
みかん l 2
さくらんぼ l 3
選択無し l NULL

---------

【やりたいこと】

フルーツテーブルの名前の列の名称(りんごなど)をSPREADのコンボボックスに表示させたい(データ設定値は持っている状態)。SQLを使用してDatatableに入れた値をfruitDataという配列にいれて、コンボボックスに設定したいのだが、冒頭で述べたエラーメッセージが出る。

【質問の経緯】
GrapeCityの公式には質問を問い合わせ済みですが、返答がなかなかこないのでこちらで先に解決できないかなと思ったので質問させていただきました。ですので、公式に問い合わせてください等の回答は不要です。

以下のような質問にはグッドを送りましょう

  • 質問内容が明確
  • 自分も答えを知りたい
  • 質問者以外のユーザにも役立つ

グッドが多くついた質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

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

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

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

下記のような質問は推奨されていません。

  • 間違っている
  • 質問になっていない投稿
  • スパムや攻撃的な表現を用いた投稿

適切な質問に修正を依頼しましょう。

saten

2022/11/08 03:48

その段階では自分でコーティングができておらず、丸投げの質問だと言われ反省したためもう一度自分でソースを書いて実行したのですが、エラーが出てしまったので相談した次第です。
SurferOnWww

2022/11/08 04:30

質問は後からでも編集できますので、今後は最初に立てたスレッドを直すようにしてください。「質問へのコメント」蘭はコメントを受けて質問を編集するためにあります。 コードの上下は ``` と ``` で囲ってください。インデントされてないコードは質問者さんも見る気がしないのでは? どの行でエラーが出るのか書いてください。 Spread の ComboBox など知らない人のために、何を渡せばよいかの仕様を書くと回答が得やすいと思います。
saten

2022/11/08 04:46

仕様を理解しておらず、ご迷惑をお掛けしてしまい申し訳ありません。 また、コードの書き方についてやエラーについてもお教え頂きありがとうございます。たしかにspreadのコンボボックスについても明記しておくべきでした。配慮が足りておりませんでした。 こんな拙い質問にも関わらず、丁寧にご教示いただき、ありがとうございます。非常に勉強になりました。今後はSurferOnWww様に指摘していただきたことを注意した上で質問したいと思います。

回答1

0

自己解決

Function(row) row(″名前″)を
Function(row) row.Field(Of String)(″名前″)
に変更したら解決しました。

投稿2022/11/08 04:25

saten

総合スコア1

良いと思った回答にはグッドを送りましょう。
グッドが多くついた回答ほどページの上位に表示されるので、他の人が素晴らしい回答を見つけやすくなります。

下記のような回答は推奨されていません。

  • 間違っている回答
  • 質問の回答になっていない投稿
  • スパムや攻撃的な表現を用いた投稿

このような回答には修正を依頼しましょう。

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

ただいまの回答率
86.12%

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

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

質問する

関連した質問

同じタグがついた質問を見る

VB.NET

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