- PR -

DataGridViewの内容をtxtで出力する際のエラー

1
投稿者投稿内容
Asami
会議室デビュー日: 2007/07/11
投稿数: 5
投稿日時: 2007-07-11 22:35
こんばんわ、Asamiと申します。本日はよろしくお願いいたします。

現在、Windowsアプリケーションを作成していて、DataGridViewで表示されている内容をtxt形式で出力したいと考えていて下記のコードを書きましたが、
DataGridViewの内容を出力するときのコードにエラーが出てしまいます。(デバック時ではなく、書き込んだ時点で波線になってしまいます)
環境は、WindowsXP, SQL Server2005, VisualStudio2005です。

下記は出力ボタンを押したときの処理のすべてです。

この中でエラーが出るのは、「エラーが出ます@〜C」と書いてある行です。
具体的なエラーの内容は、
@   「エラー 1 型 'System.Windows.Forms.DataGridViewCell' の値を 'String' に変換できません。」
A〜C「エラー 2 演算子 '&' は、型 'String' および 'System.Windows.Forms.DataGridViewCell' に対して定義されていません。」
と出てしまいます。
エラーが出る行をコメントアウトして実行すると、ヘッダー行のみ出力される状態です。

どなたかこのエラーの解決策のアドバイスを頂けないでしょうか。
私の質問で不十分な点がありましたらご指摘ください。
よろしくお願いいたします。


Private Sub btnDownload_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnDownload.Click

Dim sr As IO.StreamWriter
Dim linetext As String
Dim datafile As String = ""
Dim ret As Integer
Dim intindex As Integer

'待機カーソル(砂時計)を表示する
Me.Cursor = Cursors.WaitCursor

ret = SaveFileDialog1.ShowDialog()
If ret = Windows.Forms.DialogResult.OK Then
datafile = SaveFileDialog1.FileName
ElseIf ret = Windows.Forms.DialogResult.Cancel Then
'待機カーソル(砂時計)戻す
Me.Cursor = Cursors.Default
Exit Sub
End If

'行数を取得
Dim intcount As Integer =Me.M_WORKINGRESULTDataGridView.BindingContext(Me.M_WORKINGRESULTDataGridView.DataSource,Me.M_WORKINGRESULTDataGridView.DataMember).Count

'ファイルを作成する
sr = New IO.StreamWriter(datafile, False, System.Text.Encoding.GetEncoding("shift_JIS"))

'フィールド名の生成(カンマ区切り)
linetext = Me.DataGridView1.Columns(0).HeaderText & ","
linetext &= Me.DataGridView1.Columns(1).HeaderText & ","
linetext &= Me.DataGridView1.Columns(2).HeaderText & ","
linetext &= Me.DataGridView1.Columns(3).HeaderText

'ファイルへの書き込み
sr.WriteLine(linetext)

'1行ずつ読み込んでtxt形式で書き込む
For intindex = 0 To intcount - 1 Step 1
linetext = Me.DataGridView1.Item(intindex, 0)           ←エラーが出ます@
linetext = linetext & "," & Me.DataGridView1.Item(intindex, 1)←エラーが出ますA
linetext = linetext & "," & Me.DataGridView1.Item(intindex, 2)←エラーが出ますB
linetext = linetext & "," & Me.DataGridView1.Item(intindex, 3)←エラーが出ますC

'ファイルへの書き込み()
sr.WriteLine(linetext)

Next intindex

'ファイルを閉じる
sr.Close()

'待機カーソル(砂時計)を元に戻す
Me.Cursor = Cursors.Default

MsgBox("データをエクスポートしました")

End Sub


[ メッセージ編集済み 編集者: Asami 編集日時 2007-07-11 22:38 ]

[ メッセージ編集済み 編集者: Asami 編集日時 2007-07-11 23:04 ]
Jitta
ぬし
会議室デビュー日: 2002/07/05
投稿数: 6267
お住まい・勤務地: 兵庫県・海手
投稿日時: 2007-07-12 08:01
いや、もう、メッセージのとおりで。。。
1も、2〜4も、原因は同じです。
「型」について知ってください。

とりあえず、cell まで入力して[F1]
_________________
ひろれい
ぬし
会議室デビュー日: 2006/03/02
投稿数: 486
お住まい・勤務地: 万博開催地
投稿日時: 2007-07-12 08:55
関係ないけど。

linetext は StringBuilder にした方が良いと思われ。

参考: 文字列処理を高速に行う
Asami
会議室デビュー日: 2007/07/11
投稿数: 5
投稿日時: 2007-07-12 11:08
Jittaさん、ひろれいさん、返信ありがとうございます。
ヘルプなどを見た結果、エラーが出る行の末尾にvalue.ToStringを追加する事で、なんとか内容は出力することができました。ありがとうございます。

ただ、、
ヘッダー行はきちんと出力されていますが、DataGridViewの内容の方は、
行単位のレコードを書き込みたいのに列単位のデータが書き込まれてしまいました。

例)
 現状  :00001,00002,00003,・・・
やりたい事:00001,○○太郎,○○タロウ,・・・

私ももう少し考えてみますが、かなり力不足なところがあるので、
もう一度、お力添え頂けないでしょうか。

よろしくお願いいたします。
ひろれい
ぬし
会議室デビュー日: 2006/03/02
投稿数: 486
お住まい・勤務地: 万博開催地
投稿日時: 2007-07-12 11:32
考える前に、調べるクセをつけましょう。

  DataGridView.Item プロパティ
くんちん
常連さん
会議室デビュー日: 2002/10/07
投稿数: 46
投稿日時: 2007-07-12 11:35
>現状  :00001,00002,00003,・・・
単なるコーディングミスかと。

http://msdn2.microsoft.com/ja-jp/library/ms158656(VS.80).aspx
くんちん
常連さん
会議室デビュー日: 2002/10/07
投稿数: 46
投稿日時: 2007-07-12 11:37
ひろれいさん。
申し訳ございません。
同じURLでした。
Asami
会議室デビュー日: 2007/07/11
投稿数: 5
投稿日時: 2007-07-13 17:59
ひろれいさん、くんちんさん返答ありがとうございました。
無事、出力する事ができました。

item(intindex, 0)⇒誤
Item(0, intindex)⇒正

でした。
本当にありがとうございました。
1

スキルアップ/キャリアアップ(JOB@IT)