winform项目显示图片问题

memory_dyy 2017-04-18 01:49:10
在winform中 想用listview+imagelist显示数据库中的二进制流图片

点击按钮后 listview 显示所有图片 现在问题是 我把数据库中的数据流存到imagelist中时 只存了一张 其他的加载不出来

怎么把数据库中的数据流都存到image list中呢
private void button3_Click(object sender, EventArgs e)
{
byte[] imagebytes = null;
string cnnString = "Data Source=MEMORY-DYY;Initial Catalog=test;Integrated Security=True";
SqlConnection cnn = new SqlConnection(cnnString);
cnn.Open();
SqlCommand com = new SqlCommand("select * from tblImage where id=3", cnn);
SqlDataReader dr = com.ExecuteReader();

while (dr.Read())
{
imagebytes = (byte[])dr.GetValue(1);
}
dr.Close();
cnn.Close();
MemoryStream ms = new MemoryStream(imagebytes);
Image image = Image.FromStream(ms, true);
imageList1.Images.Add(image);
this.listView1.LargeImageList = imageList1;
ListViewItem item = new ListViewItem();

int count = this.imageList1.Images.Count;
MessageBox.Show(count + "");//测试
for (int i = 0; i < 5; i++)
{
listView1.Items.Add("图片" + (i + 1));
listView1.Items[i].ImageIndex = i;
}
...全文
248 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
wc_ling 2017-04-19
  • 打赏
  • 举报
回复
第一 select * from tblImage where id=3这句只会查出一条信息 如果你查出所有图片,应该所回一个table 循环table,add到你的list里面 或者跟本不用list,直接用返回的table加载到显示页面都可以
信不信由你zzy 2017-04-19
  • 打赏
  • 举报
回复
select * from tblImage where id=3 你只取出了一条记录,然后你一条记录里面又只有一张图片 所以你最后LISTVIEW里面只有一张图片啊
memory_dyy 2017-04-19
  • 打赏
  • 举报
回复
引用 1楼wang_peng_yl 的回复:
private void button3_Click(object sender, EventArgs e) { byte[] imagebytes = null; string cnnString = "Data Source=MEMORY-DYY;Initial Catalog=test;Integrated Security=True"; SqlConnection cnn = new SqlConnection(cnnString); cnn.Open(); SqlDataAdapter da = new SqlDataAdapter("select * from tblImage where id=3", cnn); DataTable dt = new DataTable(); da.Fill(dt); cnn.Close(); foreach(DataRow dr in dt.Rows ) { imagebytes = (byte[])dr["列名"]; MemoryStream ms = new MemoryStream(imagebytes); Image image = Image.FromStream(ms, true); imageList1.Images.Add(image); } this.listView1.LargeImageList = imageList1; ListViewItem item = new ListViewItem(); int count = this.imageList1.Images.Count; MessageBox.Show(count + "");//测试 for (int i = 0; i < 5; i++) { listView1.Items.Add("图片" + (i + 1)); listView1.Items[i].ImageIndex = i; } }
列名是什么意思
memory_dyy 2017-04-19
  • 打赏
  • 举报
回复
引用 2楼xdashewan 的回复:
你怎么说也得把添加imageList的代码放循环里去吧,不然只添加一次当然只有一张
能不能具体说一下怎么加啊 从数据库中取出的是二进制流 怎么循环添加
memory_dyy 2017-04-19
  • 打赏
  • 举报
回复
引用 6楼wc_ling 的回复:
第一 select * from tblImage where id=3这句只会查出一条信息 如果你查出所有图片,应该所回一个table 循环table,add到你的list里面 或者跟本不用list,直接用返回的table加载到显示页面都可以
什么table winform里面不用listview 吗
memory_dyy 2017-04-19
  • 打赏
  • 举报
回复
引用 5楼信不信由你zzy 的回复:
select * from tblImage where id=3 你只取出了一条记录,然后你一条记录里面又只有一张图片 所以你最后LISTVIEW里面只有一张图片啊
这个是我测试的。改成查询表中所有内容也没有用啊
xdashewan 2017-04-18
  • 打赏
  • 举报
回复
你怎么说也得把添加imageList的代码放循环里去吧,不然只添加一次当然只有一张
wang_peng_yl 2017-04-18
  • 打赏
  • 举报
回复
private void button3_Click(object sender, EventArgs e) { byte[] imagebytes = null; string cnnString = "Data Source=MEMORY-DYY;Initial Catalog=test;Integrated Security=True"; SqlConnection cnn = new SqlConnection(cnnString); cnn.Open(); SqlDataAdapter da = new SqlDataAdapter("select * from tblImage where id=3", cnn); DataTable dt = new DataTable(); da.Fill(dt); cnn.Close(); foreach(DataRow dr in dt.Rows ) { imagebytes = (byte[])dr["列名"]; MemoryStream ms = new MemoryStream(imagebytes); Image image = Image.FromStream(ms, true); imageList1.Images.Add(image); } this.listView1.LargeImageList = imageList1; ListViewItem item = new ListViewItem(); int count = this.imageList1.Images.Count; MessageBox.Show(count + "");//测试 for (int i = 0; i < 5; i++) { listView1.Items.Add("图片" + (i + 1)); listView1.Items[i].ImageIndex = i; } }

110,538

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧