最初にオフにしてください - ここにあるすべての情報とスニペットに感謝します。感謝します。私の問題;GDIでの一般的なエラー+画像付きのDatagridviewデータをXMLに保存
イメージを含むいくつかのdatagridviewデータをXMLファイルに保存しようとしています。その後、再びグリッドでそれを読み取ろうとしています。私はデータセット&テーブル(無制限)を使用して、私が知っている限りXMLを簡単に書くことができます。バインディングはimagecolumnで動作しません。
データを保存してからもう一度読むことができます。しかし - とき、私は再びデータを保存しよう - それは「サブSaveToFileメソッド」に次の行に失敗し、次のエラーで
Img.Save(ms, System.Drawing.Imaging.ImageFormat.Jpeg)
:
An unhandled exception of type System.Runtime.InteropServices.ExternalException' occurred in System.Drawing.dll Additional information: A generic error occurred in GDI+.
すべてのアイデアは、私は何が欠けていますか?
Private Sub SaveToFile(sender As Object, e As EventArgs) Handles SaveToolStripMenuItem.Click
Dim rows As Integer = DataGridView1.Rows.Count - 1
Dim cols As Integer = DataGridView1.Columns.Count - 1
Dim MyByte As Byte() = Nothing
Dim Img As Image = Nothing
Dim ms = New MemoryStream()
DataSet1.Observations.Rows.Clear()
For i = 0 To rows
For j = 0 To cols
If j = 0 Then
Img = DataGridView1.Rows(i).Cells(j).Value
Img.Save(ms, System.Drawing.Imaging.ImageFormat.Jpeg)
MyByte = ms.ToArray()
DataSet1.Observations.Rows.Add.Item(1) = Compress(MyByte)
ms.close()
ElseIf j >= 1 Then
If DataGridView1.Rows(i).Cells(j).Value IsNot Nothing Then
DataSet1.Observations.Rows(i).Item(j + 1) = DataGridView1.Rows(i).Cells(j).Value.ToString
End If
End If
Next
Next
File.Delete("C:\test2.quad")
DataSet1.WriteXml("C:\test2.quad")
End Sub
Private Sub OpenFile(sender As Object, e As EventArgs) Handles OpenToolStripMenuItem.Click
Dim ms = New MemoryStream()
Dim MyByte As Byte()
DataSet1.Clear()
DataGridView1.Rows.Clear()
DataSet1.ReadXml("C:\test2.quad")
Dim rows As Integer = DataSet1.Observations.Rows.Count - 2
Dim cols As Integer = DataSet1.Observations.Columns.Count - 1
For i = 0 To rows
For j = 1 To cols
If j = 1 Then
MyByte = Decompress(DataSet1.Observations.Rows(i).Item(1))
Dim stream As New MemoryStream(MyByte)
DataGridView1.Rows.Add(Image.FromStream(stream))
stream.Close()
ElseIf j >= 2 And DataSet1.Observations.Rows(i).Item(j) IsNot Nothing Then
DataGridView1.Rows(i).Cells(j - 1).Value = DataSet1.Observations.Rows(i).Item(j).ToString
End If
Next
Next
End Sub
作業している行の数はいくつですか? – Plutonix
InternalExceptionがありますか?もしあれば、それは何と言いますか? –
@AlexB。その例外にはこれ以上何も言えません。ファイルアクセスの問題からリソースを超過するまで、それはすべてのものを捕まえるものです。実際に 'GDIでジェネリックエラーが発生しました' *は追加情報です – Plutonix