2017-03-04 38 views
0

DataGridViewからデータにアクセスして、CellClickイベントによって整形しようとしています。私はセルをクリックエヴァーVB .NETエラー!タイプ 'system.object'のオブジェクトを型 'system.byte []'にキャストできません

では、私は表からすべてのデータを形成するために得たが、のPictureBoxで画像を見ることができないとき。 私はこのコードをしようとしたとき:

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

私はエラーを得ました!

「[] system.byte」を入力するタイプ「のSystem.Object」のオブジェクトをキャストすることができませんでしその後、私はコードの下に試してみてください:私が試してみました何

..しかし、その後、私はピクチャボックスに画像を取得してはいけません:

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 
+0

DGVセルは常にOBjectを返しますが、DataGridViewImageColumnの場合、値はオブジェクトにラップされたImageです – Plutonix

答えて

0

は、あなたがに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構文のスキルは数十年遅れています。

関連する問題