2017-09-03 14 views
1

データベースからdataGridViewにデータをロードしようとしていますが、行が選択されてもレコードは他のコントロールに表示されますが、正常に動作しますが、特に画像列にnull値がある場合、 「トンは何をすべきか知っている次のデータベースからの画像を含むデータをDataGridViewに読み込むには?

ここにあります私のテーブル構造:ここで

TABLE TblProduct 
[ProductID] INT   IDENTITY (1, 1) NOT NULL, 
[ProductType] INT   NOT NULL, 
[Description] NVARCHAR (MAX) NULL, 
[Price]  MONEY   NULL, 
[Image]  IMAGE   NULL, 

だ私の取得()メソッド:

private void Retrieve() 
{ 
    dataGridView1.Rows.Clear(); 

    string sql = "SELECT * FROM TblProduct"; 
    cmd = new SqlCommand(sql, connection); 
    connection.Open(); 
    adapter = new SqlDataAdapter(cmd); 
    adapter.Fill(dt);  

    foreach (DataRow row in dt.Rows) 
    {     
     dataGridView1.Rows.Add(row[0].ToString(), row[1].ToString(), row[2].ToString(), Convert.ToDecimal(row[3]), row["Image"]); 
    } 
    connection.Close(); 
    dt.Rows.Clear(); 
} 

はここに私のMouseClickとイベントです:

private void dataGridView1_MouseClick(object sender, MouseEventArgs e) 
{ 
    typeTxt.Text = dataGridView1.SelectedRows[0].Cells[1].Value.ToString(); 
    descriptionTxt.Text = dataGridView1.SelectedRows[0].Cells[2].Value.ToString(); 
    priceTxt.Text = dataGridView1.SelectedRows[0].Cells[3].Value.ToString(); 
    pictureBox1.Image = (Image)dataGridView1.SelectedRows[0].Cells["Image"].Value;    
} 

はここで画像

System.InvalidCastException: 'Unable to cast object of type 'System.Byte[]' to type 'System.Drawing.Image'.' 

を持って、あなたは何の画像

System.InvalidCastException: 'Unable to cast object of type 'System.DBNull' to type 'System.Drawing.Image'.' 

答えて

1

をしなければならない持っていないDataGridViewの上の行を選択する際のDataGridViewに行を選択するときに私が得る例外ですバイト配列からImageを作成し、DBヌルもチェックします。

var value = dataGridView1.SelectedRows[0].Cells["Image"].Value 
if(value != DBNull.Value) 
{ 
    byte[] data = (byte[]) value; 
    MemoryStream ms = new MemoryStream(data); 
    pictureBox1.Image = Image.FromStream(ms); 
} 
+0

申し訳ありませんが、私はforeachループに入れ、この例外が発生します。System.ArgumentOutOfRangeException: 'インデックスが範囲外です。負でなく、コレクションのサイズより小さくなければなりません。 パラメータ名:index ' –

+0

私は間違った場所に置いていました。私はMouseClickイベントに入れました。今すぐ動作します。ありがとうございましたJan –

+0

ようこそ。それがあなたのために働く場合は、質問を閉じることを忘れないでください。ありがとう! –

関連する問題