none
求助picturebox显示图片 RRS feed

  • 问题

  •   数据库中有一张学生信息表,有字段img保存有图片信息,  因为img在datagridview 里不能显示,所以当前datagridview 里面显示的学生表没有img字段。已经实现了双击datagridview 弹出子窗体里form2,里面若干textbox就显示了双击那一行的编信息,现在在form2加了一个picturebox,想实现对应学生的图片,

      我是这样想的,根据当前某个textbox显示的内容查找数据库的学生表,从而显示出来。

      下面是部分代码                             
                        SqlCommand cmd = new SqlCommand("SELECT img FROM 学生 where StudentID='" + form2.textBox1.Text + "'", cn);
                        SqlDataAdapter da = new SqlDataAdapter(cmd);
                        DataSet ds = new DataSet();
                        da.Fill(ds, "学生");
                        int c = ds.Tables["img"].Rows.Count;
                        if (c >0)
                        {
                            Byte[] byteBLOBData = new Byte[0];
                       
                            byteBLOBData = (Byte[])(ds.Tables["学生"].RowsCoffee["img"]);//貌似好像这里有问题!!!
                           
    MemoryStream stmBLOBData = new MemoryStream(byteBLOBData);
                            

                            fm1.pictureBox1.Image = Image.FromStream(stmBLOBData);

                            cn.Close();

    可有人晓得啊?

     

    2008年8月17日 6:06

答案

  • 哪的问题?

    SELECT img FROM 学生 where StudentID='" + form.textBox1.Text + "'"

     

    StudentID字段是字符型还是数字型?数字型不要加单引号

     

    另外检查你的form.textBox1.Text是否有值

     

    2008年8月17日 12:29
    版主

全部回复

  •  

    应该写

    Code Snippet

     

    byteBLOBData  = (Byte[])(ds.Tables["学生"].Rows[0]["img"]);

     

     

     

     

    2008年8月17日 6:35
    版主
  •  

    不行,错误提示:未将对象引用设置到对象的实例。picturebox还是显示不出图片。

     

    可能是我问题没有表达清楚。

     

    简单的说:假设有张学生表,存有学号和图片,testbox里显示的是学号,就是picturebox怎样t根据testbox的内容来显示图片???

    能不能给个参考的代码?

    谢谢!

     

     

    2008年8月17日 7:47
  •  

    Code Snippet

    正确写法

     

    DataSet ds = new DataSet();
    da.Fill(ds, "学生");
    int c = ds.Tables["学生"].Rows.Count;
    if (c > 0)
    {
        Byte[] byteBLOBData;

        byteBLOBData = (Byte[])(ds.Tables["学生"].Rows[0]["img"]);
        MemoryStream stmBLOBData = new MemoryStream(byteBLOBData);
        this.pictureBox1.Image = Image.FromStream(stmBLOBData);
    }

     

     

     

     

    你原来

    int c = ds.Tables["img"].Rows.Count;

     

    没有img这个表

    2008年8月17日 9:17
    版主
  •  

    private void dataGridView1_CellDoubleClick(object sender, DataGridViewCellEventArgs e)
            {
                if (dataGridView1.Columns[e.ColumnIndex].HeaderText == "Name")
                  
                 {
                    int id;
                    id = dataGridView1.CurrentCell.RowIndex;
                    EditStudent form = new EditStudent();
                    DataTable dt = new DataTable();
                    dt = (DataTable)dataGridView1.DataSource;
                    form.textBox1.Text = dt.Rows[id]["StudentID"].ToString();
                    form.textBox2.Text = dt.Rows[id]["ClassNumber"].ToString();
                    form.textBox3.Text = dt.Rows[id]["Name"].ToString();
                    form.textBox4.Text = dt.Rows[id]["Sex"].ToString();
                    form.textBox5.Text = dt.Rows[id]["Home"].ToString();
                    form.textBox6.Text = dt.Rows[id]["DormNumber"].ToString();

                    try
                    {
                        String strCn = (@"server=(local)\sqlexpress;integrated Security=true;Database=同学录1");
                        SqlConnection cn = new SqlConnection(strCn);
                        cn.Open();
                        SqlCommand cmd = new SqlCommand("SELECT img FROM 学生 where StudentID='" + form.textBox1.Text + "'", cn);
                        SqlDataAdapter da = new SqlDataAdapter(cmd);
                        DataSet ds = new DataSet();
                        da.Fill(ds,"学生");
                        int c = ds.Tables["学生"].Rows.Count;
                        if (c > 0)
                        {
                            Byte[] byteData;
                            byteData = (Byte[])(ds.Tables["学生"].Rows[0]["img"]);
                            MemoryStream stmData = new MemoryStream(byteData);
                            form.pictureBox1.Image = Image.FromStream(stmData);
                        }
                        cn.Close();
                   }
                    catch (Exception ex)
                    {
                        MessageBox.Show(ex.Message);
                    }
                  
                    form.Show ();

                }
            }
    还是有问题,麻烦看看啊?

    2008年8月17日 10:08
  • 哪的问题?

    SELECT img FROM 学生 where StudentID='" + form.textBox1.Text + "'"

     

    StudentID字段是字符型还是数字型?数字型不要加单引号

     

    另外检查你的form.textBox1.Text是否有值

     

    2008年8月17日 12:29
    版主
  • 你把你的错误贴上来很快就能解决,写法问题不大,处理好几个问题,当你的学生表里面的img字段没有正确存入图片的时候需要进行处理否则肯定会发生异常的! 第二就是确保你存到数据库里的byte[] 是用Image.Save,形成的,没有进行过特别的处理!

    2008年8月18日 2:34