【问题标题】:Error! unable to cast object of type 'system.object ' to type 'system.byte[]'错误!无法将“system.object”类型的对象转换为“system.byte[]”类型
【发布时间】:2017-03-04 13:57:34
【问题描述】:

我正在尝试通过 CellClick 事件从 DataGridView 访问数据以形成表单。在 VB .NET

当我单击单元格时,我会从表格中获取所有数据以形成表格,但无法在 PictureBox 中看到图像。 当我仅尝试此代码时:

 pic1 = selectedRow.Cells(13).Value
    Dim ms As New MemoryStream(pic1)
    pb_stud_pic.Image = Image.FromStream(ms)

我得到错误!无法将“system.object”类型的对象转换为“system.byte[]”类型

然后我尝试下面的代码:但是我没有在图片框中获取图像..

我尝试过的:

 Private Sub DataGridView1_CellClick(sender As System.Object, e As System.Windows.Forms.DataGridViewCellEventArgs) Handles DataGridView1.CellClick
        Try

            Dim index As Integer = e.RowIndex
            Dim selectedRow As New DataGridViewRow()
            selectedRow = DataGridView1.Rows(index)

            txt_stud_no.Text = selectedRow.Cells(0).Value.ToString()
            txt_stud_name.Text = selectedRow.Cells(1).Value.ToString()
            dtp_stud_dob.Value = selectedRow.Cells(2).Value.ToString()
            txt_stud_gender.Text = selectedRow.Cells(3).Value.ToString()

            If txt_stud_gender.Text = "Male" Then
                rdo_male.Checked = True
            Else
                rdo_female.Checked = True
            End If

            cb_stud_blood.Text = selectedRow.Cells(4).Value.ToString()

            txt_stud_add.Text = selectedRow.Cells(5).Value.ToString()
            txt_stud_city.Text = selectedRow.Cells(6).Value.ToString()
            txt_stud_pc.Text = selectedRow.Cells(7).Value.ToString()
            txt_stud_mob.Text = selectedRow.Cells(8).Value.ToString()
            cb_adyear.Text = selectedRow.Cells(9).Value.ToString()
            cb_cbranch.Text = selectedRow.Cells(10).Value.ToString()
            txt_stud_email.Text = selectedRow.Cells(11).Value.ToString()
            cb_csem.Text = selectedRow.Cells(12).Value.ToString()

            con.Open()
            dr = cm.ExecuteReader()
            If dr.Read() Then
                If Not dr.IsDBNull(dr.GetOrdinal("Image")) Then
                    pic1 = CType(dr("Image"), Byte())
                    pic1 = selectedRow.Cells(13).Value
                    pic1 = ds.Tables("Student").Rows(i)(13)

                    If Not (pic1 Is Nothing) Then
                        Dim ms As New MemoryStream(pic1)
                        pb_stud_pic.Image = Image.FromStream(ms)
                    Else
                        pb_stud_pic.Image = Nothing
                    End If
                End If
            End If
            con.Close()

        Catch ex As Exception
            MessageBox.Show("Error!" & ex.Message)
            con.Close()
        End Try
    End Sub

【问题讨论】:

  • DGV 单元格始终返回 OBject,但如果它是 DataGridViewImageColumn,则该值是包装在对象中的图像

标签: .net vb.net visual-studio


【解决方案1】:

您是否尝试过使用 BinaryFormatter,请参阅此处的 MSDN: https://msdn.microsoft.com/en-us/library/system.runtime.serialization.formatters.binary.binaryformatter.aspx?cs-save-lang=1&cs-lang=vb#code-snippet-1

您必须将对象序列化为 MemoryStream 并在流上调用 ToArray 方法将其转换为字节数组,并希望能够将其分配给 Image 成员。对不起,我的 VB 语法技能落后了几十年。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-12-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多