C#这样一个问题,点击datagridview,将点击的这一行的信息显示在窗体控件上。

textbox,comobox,已经解决,求picturebox的解决方案。我的代码是这样写的:
private void dataGridView1_CellMouseClick(object sender, DataGridViewCellMouseEventArgs e)
{
int rownuber = dataGridView1.CurrentCell.RowIndex;
textBox2.Text = dataGridView1.Rows[rownuber].Cells[0].Value.ToString();
textBox3.Text = dataGridView1.Rows[rownuber].Cells[1].Value.ToString();
comboBox1.Text = dataGridView1.Rows[rownuber].Cells[2].Value.ToString();
}
public static Image ReturnPhoto(byte[] streamByte) //声明了一个方法
{
MemoryStream ms = new MemoryStream(streamByte);
Image img = Image.FromStream(ms);
return img;
}
private void dataGridView1_CellMouseClick(object sender, DataGridViewCellMouseEventArgs e)//连接数据库,调用方法
{
SqlConnection conn = new SqlConnection(connString);
SqlDataAdapter adp = new SqlDataAdapter("select uimage from users where uid='"+textBox2.Text +"' ", conn);
DataSet ds = new DataSet();
adp.Fill(ds);
this.pictureBox1.Image = ReturnPhoto((byte[])ds.Tables[0].Rows[0][0]);
}

这要看你在数据库里存的是图片路径还是二进制流
如果是路径的话,可以直接使用PictureBox.ImageLocation = "图片路径"
如果是二进制流的话,需要先转换成Image对象,然后
PictureBox.Image = newImage; //newImage是你根据流生成的Image对象追问

是二进制流,转换确实出问题了。
无从下手。

追答

你怎么转换的,把代码贴上来

追问

public static Image ReturnPhoto(byte[] streamByte) //声明了一个方法
{
MemoryStream ms = new MemoryStream(streamByte);
Image img = Image.FromStream(ms);
return img;
}

追答

这个不好说,光从代码上没有看出问题,你报的什么错,有没有断点调试一下?
能把你读出byte[] 的代码也贴一下吗?问题有可能出在那里
图片的类型和大小也可能有影响,关键是看报错
PS:你断点调试一下ds.Tables[0].Rows[0][0]中的值是否正确
还有建议你把
(byte[])ds.Tables[0].Rows[0][0] 改成 ds.Tables[0].Rows[0]["uimage"] as byte[]

追问

我才刚学习,断点测试知道,不熟练。

追答

发生这种情况一般是你读出的二进制流有问题,也可能是你存进数据库的二进制流本身有问题
建议你在这句前断点一下,并监视变量streambyte的值是否正确
PS:触发断点后可以右键选择“快速监视”,在表达式中输入变量名并回车就行了

追问

存入数据库的二进制流应该没问题,就是怎么读取,单元格那一行中的那个数据,并显示在picturebox上出问题了。我也不是很清楚,初学,见谅。

追答

你数据库里字段类型是不是Image?我感觉是你存的数据有问题,一个图片不可能才7个byte吧?

追问

数据库里图片的格式是用的image类型。

追答

那估计就是存入时就有问题了,建议你再好好检查一下,最好加下断点调试一下
你把那个上传的代码也贴一下吧

温馨提示:内容为网友见解,仅供参考
第1个回答  2012-01-11
一楼说的就决定你显示图片的方法
相似回答