以文本方式查看主题
- Foxtable(狐表) (http://foxtable.net/bbs/index.asp)
-- 专家坐堂 (http://foxtable.net/bbs/list.asp?boardid=2)
---- 求助:listview中如何获取二进制保存的图片呢? (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=68337)
|
-- 作者:李孝春
-- 发布时间:2015/5/14 23:38:00
-- 求助:listview中如何获取二进制保存的图片呢?
在帮助文件中的代码如下:
Dim lvw As WinForm.ListView = e.Form.Controls("ListView1") lvw.StopRedraw() \'暂停绘制 lvw.Rows.Clear() \'清除原来的行 lvw.Images.Clear() \'清除原来的图片 lvw.View = ViewMode.LargeIcon
\'显示模式为大图标 lvw.Images.LargeSize = New
Size(130,150) \'定义大图标尺寸 For Each dr As DataRow In DataTables("员工").DataRows
\'从数据表中提取数据 Dim Key As String = dr("照片") \'获取此员工的照片文件 lvw.Images.AddLargeImage(Key, Key) \'添加照片,直接用文件名作为图片键值 Dim vr As WinForm.ListViewRow = lvw.Rows.Add() \'增加一行 vr.Text = dr("姓名") \'设置标题 vr.ImageKey = Key
\'设置图片键值 Next lvw.ResumeRedraw()
可以获取直接显示保存在本地的员工照片
但是采用二进制列保存的照片如何进行显示呢?
目前有员工信息,物料附件两表,
求解!
下面代码是实现在窗体中的图片管理显示对应二进制图片内容的 求整合!
Dim pbx As WinForm.PictureBox = Forms("员工信息管理").Controls("PictureBox1") If e.Sender.ComboList = "" Return End If If Tables("员工信息").Current Is Nothing Then pbx.Image = Nothing Else \' 判断选择的是不是 图片格式,如果不是 则不执行代码 Dim dt As DataRow = DataTables("物料附件").SQLFind("附件名称=\'" & e.Sender.SelectedItem & "\' and 物料编码=\'" & Tables("员工信息").Current("编号") & "\' And [附件类别] = \'员工信息\'") If dt IsNot Nothing \'必须要判断不然 报错 Dim nm() As String = e.Sender.SelectedItem.split(".") Dim tpjh As String = "bmp,jpg,png,gif" If tpjh.Contains(nm(nm.Length-1)) Then \'如果是图片格式则显示 pbx.Image = dt.SQlLoadImage("附件内容") \'从后台提取照片并显示 Else pbx.Image = Nothing End If End If End If
[此贴子已经被作者于2015/5/14 23:49:28编辑过]
|
-- 作者:Bin
-- 发布时间:2015/5/15 8:41:00
--
先把文件加载回来本地,再赋值.
数据量大效率很低.不建议这样. 除非一页显示少量数据
|
-- 作者:李孝春
-- 发布时间:2015/5/15 9:24:00
-- 回复:(Bin)先把文件加载回来本地,再赋值.数据量大效...
烦请老师多多指导 我昨天弄了一个晚上都没有同 按照下面那显示代码 总是提示错误
|
-- 作者:Bin
-- 发布时间:2015/5/15 9:26:00
--
提示什么错误?
|
-- 作者:李孝春
-- 发布时间:2015/5/15 11:50:00
-- 回复:(Bin)提示什么错误?
Dim lvw As WinForm.ListView = e.Form.Controls("ListView1") lvw.StopRedraw() \'暂停绘制 lvw.Rows.Clear() \'清除原来的行 lvw.Images.Clear() \'清除原来的图片 lvw.View = ViewMode.LargeIcon \'显示模式为大图标 lvw.Images.LargeSize = New Size(130,150) \'定义大图标尺寸
For Each dr As DataRow In DataTables("员工信息").DataRows \'从数据表中提取数据 Dim Key As String = dr("照片") \'获取此员工的照片文件 MessageBox.Show(key) lvw.Images.AddLargeImage(Key, Key) \'添加照片,直接用文件名作为图片键值 Dim vr As WinForm.ListViewRow = lvw.Rows.Add() \'增加一行 vr.Text = dr("名字") \'设置标题 vr.ImageKey = Key \'设置图片键值 Next lvw.ResumeRedraw()
提示照片列不属于员工信息 照片咧是二进制列 在加载表的时候没有进行加载的
如果采用dt.SQlLoadImage直接提示不能转换成字符
求解
[此贴子已经被作者于2015/5/15 11:50:33编辑过]
|
-- 作者:Bin
-- 发布时间:2015/5/15 11:52:00
--
用1楼的代码 报什么错?
|
-- 作者:李孝春
-- 发布时间:2015/5/15 14:54:00
-- 回复:(Bin)用1楼的代码 报什么错?
一楼的代码不报错
但是那是两个不同的地方
所以图像不对应显示
[此贴子已经被作者于2015/5/15 16:35:16编辑过]
|
-- 作者:大红袍
-- 发布时间:2015/5/15 15:30:00
--
Dim lvw As WinForm.ListView = e.Form.Controls("ListView1") lvw.StopRedraw() \'暂停绘制 lvw.Rows.Clear() \'清除原来的行 lvw.Images.Clear() \'清除原来的图片 lvw.View = ViewMode.LargeIcon \'显示模式为大图标 lvw.Images.LargeSize = New Size(130,150) \'定义大图标尺寸
For Each dr As DataRow In DataTables("员工信息").DataRows \'从数据表中提取数据 Dim Key As String = dr("_Identify") \'获取此员工的照片文件 Dim img = dr.SQlLoadImage("照片") If img IsNot Nothing Then lvw.Images.LargeImages.Add(key, img) End If Dim vr As WinForm.ListViewRow = lvw.Rows.Add() \'增加一行 vr.Text = dr("名字") \'设置标题 vr.ImageKey = Key \'设置图片键值 Next lvw.ResumeRedraw()
|
-- 作者:李孝春
-- 发布时间:2015/5/18 19:54:00
-- 回复:(大红袍)Dim lvw As WinForm.ListView = e.Fo...
此主题相关图片如下:5259.tmp.png
运行出错,且貌似读取速度相当慢,不知道有没有什么好的办法变通没有呢?
|
-- 作者:大红袍
-- 发布时间:2015/5/18 19:54:00
--
测试没有问题,没有变通方法。
|