Image.FromStream不是System.Windows.Forms.DataGridViewImageColumn的成员

时间:2017-03-28 17:25:53

标签: vb.net winforms datagridview xampp

所以我使用此代码在DataGridView

中显示我的数据
Sub display_Infodata()
    DGUSERS.Rows.Clear()
    Dim sql As New MySqlDataAdapter("select * from tbl_info", con)
    Dim ds As New DataSet
    DGUSERS.AllowUserToAddRows = False
    DGUSERS.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.Fill
    DGUSERS.RowTemplate.Height = 40
    sql.Fill(ds, 0)
    For i As Integer = 0 To ds.Tables(0).Rows.Count - 1
        Dim xx As Integer = DGUSERS.Rows.Add
        Dim uid As String = ds.Tables(0).Rows(i).Item(0).ToString
        Dim sqls As New MySqlDataAdapter("select * from tbl_other where userid='" & uid & "'", con)
        Dim dss As New DataSet

        sqls.Fill(dss, 0)
        With DGUSERS.Rows(xx)
            If dss.Tables(0).Rows.Count > 0 Then
                .Cells(0).Value = uid
                .Cells(1).Value = ds.Tables(0).Rows(i).Item(2).ToString
                .Cells(2).Value = ds.Tables(0).Rows(i).Item(3).ToString
                .Cells(3).Value = ds.Tables(0).Rows(i).Item(4).ToString
                .Cells(4).Value = ds.Tables(0).Rows(i).Item(5).ToString
                .Cells(5).Value = ds.Tables(0).Rows(i).Item(6).ToString
                .Cells(6).Value = dss.Tables(0).Rows(0).Item(1).ToString
                .Cells(7).Value = ds.Tables(0).Rows(0).Item(2).ToString
                .Cells(8).Value = ds.Tables(0).Rows(0).Item(8).ToString
                .Cells(9).Value = ds.Tables(0).Rows(0).Item("Image")
                .Cells(10).Value = dss.Tables(0).Rows(0).Item(2).ToString
                .Cells(11).Value = dss.Tables(0).Rows(0).Item(3).ToString
            Else

            End If
        End With
    Next
End Sub

它显示并有效,但我的问题是,当我尝试在另一个表单的DataGridView中显示数据时,它会显示以下错误:

Error screenshot

这就是我使用的:

Try
    With View_Info
        Dim index As Integer
        Dim selectedRow As DataGridViewRow
        selectedRow = DGUSERS.Rows(index)

        .UserID.Text = DGUSERS.SelectedRows(0).Cells("UserID").Value
        .UserType.Text = DGUSERS.SelectedRows(0).Cells("UserType").Value
        .Fname.Text = DGUSERS.SelectedRows(0).Cells("Firstname").Value
        .Mname.Text = DGUSERS.SelectedRows(0).Cells("Middlename").Value
        .Lname.Text = DGUSERS.SelectedRows(0).Cells("Lastname").Value
        .Contact.Text = DGUSERS.SelectedRows(0).Cells("Contact").Value
        .Standing.Text = DGUSERS.SelectedRows(0).Cells("Standing").Value
        .Guardian.Text = DGUSERS.SelectedRows(0).Cells("Guardian").Value
        .ContactG.Text = DGUSERS.SelectedRows(0).Cells("GuardianContact").Value
        .DPCreated.Text = DGUSERS.SelectedRows(0).Cells("DateCreated").Value
        .DPValidity.Text = DGUSERS.SelectedRows(0).Cells("Validity").Value

        Dim img As Byte()
        img = DGUSERS.SelectedRows(0).Cells("Image").Value
        Dim ms As New MemoryStream(img)

        .UploadImage.Image = Image.FromStream(ms)
        .Show()
        .Focus()

    End With
Catch ex As Exception
    MsgBox(ex.Message & " Please select a corresponding records.", MsgBoxStyle.Exclamation)
End Try

请帮忙吗?

2 个答案:

答案 0 :(得分:0)

很难看到完整的图片,但问题很可能是您创建了DataGridViewImageColumn,您已选择拨打Image

编译器将始终选择具有相同名称的库/预导入的命名空间对象的局部变量,属性或类。因此,我们将使用名为Image的列而不是System.Drawing.Image,因为前者是“更本地化”。

尝试同时指定命名空间,它应该可以工作:

.UploadImage.Image = System.Drawing.Image.FromStream(ms)

答案 1 :(得分:0)

所以我要解决的问题是:

Dim pCell As New DataGridViewImageCell
pCell = Me.DGUSERS.Item("Picture", e.RowIndex)

.UploadImage.Image = byteArrayToImage(pCell.Value)

并使用此功能:

Private Function byteArrayToImage(ByVal byt As Byte()) As Image

    Dim ms As New System.IO.MemoryStream()
    Dim drwimg As Image = Nothing

    Try
        ms.Write(byt, 0, byt.Length)
        drwimg = New Bitmap(ms)
    Finally
        ms.Close()
    End Try

    Return drwimg

End Function