如何使用C#从SQL数据库在DataGridView中插入图像

时间:2015-06-12 07:28:41

标签: c# sql-server datagridview

我正在开发一个应用程序,其中5个图像保存在数据库中的单个id上。现在我想在调用datagrigview时检索这些图像。我的以下代码适用于picturebox,但我希望在SQl服务器数据库的datagridview中包含相同pincode的多个图像。

try
{
    string sql = "Select IMAGE from UserInput where PINCODE = '" + txt_LPin.Text + "'";
    if (conn.State != ConnectionState.Open)
        conn.Open();
    cmd = new SqlCommand(sql, conn);
    SqlDataReader reader = cmd.ExecuteReader();
    reader.Read();
    if (reader.HasRows)
    {
        //txt_LName.Text = reader[0].ToString();
        byte[] img = (byte[])(reader[1]);

        if (img == null)
            pb_get1.Image = null;
        else
        {
            MemoryStream ms = new MemoryStream(img);

            pb_get1.Image = Image.FromStream(ms);
        }
    }
    else
    {
        txt_LPin.Text = "";
        txt_LName.Text = "";
        pb_get1.Image = null;
        MessageBox.Show("This ID does not exist.");
    }
    conn.Close();
}
catch (Exception ex)
{
    conn.Close();
    MessageBox.Show(ex.Message);
}

我已尝试使用dataGridView的代码,但它在图像的位置显示图像的交叉标记intead。

SqlDataAdapter adpat = new SqlDataAdapter();
adpat.SelectCommand = new SqlCommand("select IMAGE from UserInput", conn);
DataTable table = new DataTable("UserInput");
adpat.Fill(table);
//create image column:
DataGridViewImageColumn photoColumn = new DataGridViewImageColumn();
photoColumn.DataPropertyName = "Picture";
photoColumn.Width = 200;
photoColumn.HeaderText = "Picture column";
photoColumn.ReadOnly = true;
photoColumn.ImageLayout = DataGridViewImageCellLayout.Normal;
dataGridView1.Columns.Add(photoColumn);
//bind data to dgv:
dataGridView1.DataSource = new BindingSource(table, null);

2 个答案:

答案 0 :(得分:1)

要在gridview中插入图片,您可以使用:

1)我们需要数据源:

dataGridView1.DataSource = datasouce;

2)通过写作创建图像列;

DataGridViewImageColumn img = new DataGridViewImageColumn();
img.Name = "img";
img.HeaderText = "Image Column";
img.ValuesAreIcons = true;
dataGridView1.Columns.Add(img);

3)和最后

int number_of_rows = dataGridView1.RowCount;
for (int i = 0; i < number_of_rows; i++)
{
if (dataGridView1.Rows[i].Cells[6].Value.ToString() == "true")
{
Icon image = Properties.Resources.succcess_icon;
dataGridView1.Rows[i].Cells["img"].Value = image;
}
else
{
Icon image =Properties.Resources.cancel_icon;
dataGridView1.Rows[i].Cells["img"].Value = image;
}
}

答案 1 :(得分:0)

问题由以下代码行解决;

        conn.Open();
        SqlDataAdapter sda = new SqlDataAdapter("Select Image,Name from UserInput where PINCODE = '" + txt_LPin.Text + "'",conn);
        DataTable dt = new DataTable();
        sda.Fill(dt);
        dataGridView1.DataSource = dt;
        conn.Close();