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

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

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

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

Q&A

解決済

3回答

3922閲覧

DataTable(grid)の特定行特定列に値を追加するときStringからIntegerに変換されてしまう理由

mahry

総合スコア37

VB.NET

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

0グッド

0クリップ

投稿2019/12/05 04:48

編集2019/12/05 05:13

VB.NETを触り始めたばかりです。
なぜこのようなことが起きるのか、ご存じの方教えていただきたいです。

【やりたいこと】
Stringとして明け渡した値をStringのまま表示

【現在】
Stringとして明け渡した値がIntegerとして表示される

VB.NET

1Dim dt As DataTable 'DataGridViewの内容がすでにdtに格納されている前提 2 3'"0000000001" 4Dim CustomerCode As String = String.Format("{0:D10}",1) 5'1(Integer) 6dt.Rows(0)("CUSTOMERCODE") = CustomerCode 7

上記のように文字列型「0000000001」として入るはずが、実際には数値型「1」として入ってしまいます。

VB.NET

1Dim dt As DataTable 'DataGridViewの内容がすでにdtに格納されている前提 2 3'"000000001_A" 4CustomerCode = String.Format("{0:D10}",1) & "_A"

上記でやると型のエラーとして突き返されてしまいます。

DBから持ってきた情報を一度DataGridViewにセットしている場合

上記は空のグリッドにいちから手入力した際のものなのですが、
DB → DataGridView → DataTable → DB
の順で処理をしたとき、
「Stringで明け渡したはずのデータがInteger」になるのは、DBから情報を持ってきたときの、手入力で編集したカラムがInteger型だから、ということなのでしょうか?
グリッドの手入力データが全て数字だけだった場合、Integer型とみなして、String.Formatでゼロ埋めしたデータをIntegerに変換してしまうのでしょうか?

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

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

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

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

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

guest

回答3

0

DataTableのCUSTOMERCODE列の型は何でしょうか?
dt.Columns(CUSTOMERCODE).DataTypeがどのようになっているかを見てください。
(または、dt.Columns(CUSTOMERCODE).DataType.ToStringとすれば、文字列で型表記を確認することができます。)
数値系の型であれば数値扱いとなり、せっかくの0埋めも取り除かれます。

上記でやると型のエラーとして突き返されてしまいます。

というのは、その列の型がInteger等の数値系なのでしょう。
これを回避するには、
・元々のDataTableを取得する時に、書式設定したString型にしてしまう。
・DataGridViewで対象列の書式設定を行う。
参考:DataGridViewのセルに表示するテキストの書式(フォーマット)を指定する
https://dobon.net/vb/dotnet/datagridview/format.html

ただし、元のDBの対象列が数値で、グリッドで値を編集したものをDBに戻す、ということを考えるのであれば、後者のDataGridViewで対象列の書式設定を行う方がよいと思います。

投稿2019/12/05 06:19

kenshirou

総合スコア772

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

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

0

ベストアンサー

DataTable の列の型が Integer 型になっているためと思われます。String 型にすれば期待通りになるはずです。以下の画像を見てください。

イメージ説明

投稿2019/12/05 05:48

退会済みユーザー

退会済みユーザー

総合スコア0

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

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

mahry

2019/12/05 05:51

回答ありがとうございます! コードと実行結果も添付してくださったおかげで、よくわかりました。 ようやく次のステップに行けそうです。 本当にありがとうございます!
guest

0

option strict off になっていませんか?

投稿2019/12/05 04:54

退会済みユーザー

退会済みユーザー

総合スコア0

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

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

mahry

2019/12/05 04:56

回答ありがとうございます。 option strict on になってます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問