C# 如何将带有图像的数据从数据库加载到DataGridView?

C# 如何将带有图像的数据从数据库加载到DataGridView?,c#,sql-server,winforms,datagridview,C#,Sql Server,Winforms,Datagridview,我正在尝试将数据从数据库加载到dataGridView中,当选择一行时,记录将显示在其他控件上,它可以工作,但不符合预期,特别是当图像列上有空值时,我不知道下一步该怎么做 以下是我的表格结构: TABLE TblProduct [ProductID] INT IDENTITY (1, 1) NOT NULL, [ProductType] INT NOT NULL, [Description] NVARCHAR (MAX) NULL, [Price]

我正在尝试将数据从数据库加载到dataGridView中,当选择一行时,记录将显示在其他控件上,它可以工作,但不符合预期,特别是当图像列上有空值时,我不知道下一步该怎么做

以下是我的表格结构:

TABLE TblProduct
[ProductID]   INT            IDENTITY (1, 1) NOT NULL,
[ProductType] INT            NOT NULL,
[Description] NVARCHAR (MAX) NULL,
[Price]       MONEY          NULL,
[Image]       IMAGE          NULL,
下面是我的Retrieve()方法:

以下是我的鼠标点击活动:

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;            
}
以下是我在dataGridView上选择具有图像的行时遇到的异常

System.InvalidCastException: 'Unable to cast object of type 'System.Byte[]' to type 'System.Drawing.Image'.'
在dataGridView上选择没有图像的行时

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

您必须从字节数组创建映像,并检查DB NULL

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);
}

很抱歉,它不起作用,我将它放在我的foreach循环中,并将得到以下异常:System.ArgumentOutOfRangeException:'索引超出范围。必须为非负数且小于集合的大小。参数名称:index'我知道了,我把它放错了地方,我把它放在了MouseClick事件中,现在它工作了,非常感谢。如果对你有效,别忘了结束这个问题。谢谢
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);
}