VB.NET WinForm中DataGridView中如何显示带有路径的图片?

于之 2011-06-10 03:26:39
VB.NET WinForm中DataGridView中如何显示带有路径的图片?

我是在datagridview中添加了一个 DataGridViewImageColumn 的栏位,这个要如何来对其显示有路径的图片呢? 请指教,谢谢!
...全文
328 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
于之 2011-07-01
  • 打赏
  • 举报
回复
非常谢谢! 已经OK了
Friday 2011-06-15
  • 打赏
  • 举报
回复
图片那列的值是 rowProductImage = Image.FromFile(Common.productImgPath & myReader("productImage"))

而不是 'D:\Photo\A001.jpg' as cpath 路径,你试着把对应的那列数据路径转成图片就行了
于之 2011-06-14
  • 打赏
  • 举报
回复
我是代码是一个查找按钮,要求查到值后,才在datagridview中显示出记录与图片。我的查找代码如下:

[code=vb.net]
DataGridView1.DataSource = Nothing
DataGridView1.DataBindings.Clear()

mydataset.Clear()

Dim strcon As String = My.Settings.Book2011ConnString
Dim conn As SqlConnection
conn = New SqlConnection(strcon)
Dim nitemid As String = Trim(TextBox1.Text)

Dim nstrsql As String = " 1=1 "

If TextBox1.Text <> "" Then
nstrsql += " and namealias like '" & nitemid & "%' "
Else
MsgBox("对不起!请一定要输入条件!", MsgBoxStyle.Information)
conn.Close()
Return
End If

Dim str_cmd As String = "select 'D:\Photo\A001.jpg' as cpath,bookid,bookname,uprice,qty" '-- 其实本来只是 cpath字段的,为了方便测试,换了一具体路径.
str_cmd += " from Booktable "
str_cmd += " where " & nstrsql

Dim da As New SqlClient.SqlDataAdapter
da.SelectCommand = New SqlClient.SqlCommand(str_cmd, conn)
da.SelectCommand.CommandTimeout = 0

mydataset.Dispose()
da.Fill(mydataset, "temp1")
DataGridView1.DataSource = mydataset.Tables(0)
DataGridView1.AutoGenerateColumns = False
da.Dispose()
conn.Close()
conn.Dispose()
[/code]

那我要如何改呢? 好象跟你的做法相差挺大啊! 请再指点,谢谢!
于之 2011-06-14
  • 打赏
  • 举报
回复
我是代码是一个查找按钮,要求查到值后,才在datagridview中显示出记录与图片。我的查找代码如下:

[code=vb.net]
DataGridView1.DataSource = Nothing
DataGridView1.DataBindings.Clear()

mydataset.Clear()

Dim strcon As String = My.Settings.Book2011ConnString
Dim conn As SqlConnection
conn = New SqlConnection(strcon)
Dim nitemid As String = Trim(TextBox1.Text)

Dim nstrsql As String = " 1=1 "

If TextBox1.Text <> "" Then
nstrsql += " and namealias like '" & nitemid & "%' "
Else
MsgBox("对不起!请一定要输入条件!", MsgBoxStyle.Information)
conn.Close()
Return
End If

Dim str_cmd As String = "select 'D:\Photo\A001.jpg' as cpath,bookid,bookname,uprice,qty" '-- 其实本来只是 cpath字段的,为了方便测试,换了一具体路径.
str_cmd += " from Booktable "
str_cmd += " where " & nstrsql

Dim da As New SqlClient.SqlDataAdapter
da.SelectCommand = New SqlClient.SqlCommand(str_cmd, conn)
da.SelectCommand.CommandTimeout = 0

mydataset.Dispose()
da.Fill(mydataset, "temp1")
DataGridView1.DataSource = mydataset.Tables(0)
DataGridView1.AutoGenerateColumns = False
da.Dispose()
conn.Close()
conn.Dispose()
[/code]

那我要如何改呢? 好象跟你的做法相差挺大啊! 请再指点,谢谢!
于之 2011-06-14
  • 打赏
  • 举报
回复
我是代码是一个查找按钮,要求查到值后,才在datagridview中显示出记录与图片。我的查找代码如下:

[code=vb.net]
DataGridView1.DataSource = Nothing
DataGridView1.DataBindings.Clear()

mydataset.Clear()

Dim strcon As String = My.Settings.Book2011ConnString
Dim conn As SqlConnection
conn = New SqlConnection(strcon)
Dim nitemid As String = Trim(TextBox1.Text)

Dim nstrsql As String = " 1=1 "

If TextBox1.Text <> "" Then
nstrsql += " and namealias like '" & nitemid & "%' "
Else
MsgBox("对不起!请一定要输入条件!", MsgBoxStyle.Information)
conn.Close()
Return
End If

Dim str_cmd As String = "select 'D:\Photo\A001.jpg' as cpath,bookid,bookname,uprice,qty" '-- 其实本来只是 cpath字段的,为了方便测试,换了一具体路径.
str_cmd += " from Booktable "
str_cmd += " where " & nstrsql

Dim da As New SqlClient.SqlDataAdapter
da.SelectCommand = New SqlClient.SqlCommand(str_cmd, conn)
da.SelectCommand.CommandTimeout = 0

mydataset.Dispose()
da.Fill(mydataset, "temp1")
DataGridView1.DataSource = mydataset.Tables(0)
DataGridView1.AutoGenerateColumns = False
da.Dispose()
conn.Close()
conn.Dispose()
[/code]

那我要如何改呢? 好象跟你的做法相差挺大啊! 请再指点,谢谢!
Friday 2011-06-13
  • 打赏
  • 举报
回复
\\192.168.0.1\public\image\A001.jpg
你试下换下路径看看,放在你程序下面某个文件夹里,用相对路径看看
于之 2011-06-13
  • 打赏
  • 举报
回复
请有做过的人出来帮一下忙,谢谢!
Friday 2011-06-13
  • 打赏
  • 举报
回复
DataGridView 中加的DataGridViewImageColumn 栏位
这点和你相同,也是一开始就没设好DataGridView 的列
Friday 2011-06-13
  • 打赏
  • 举报
回复

' 选种一行订单,刷新订单明细信息,这个方法是从另一个点击事件触发的,你也可以让窗体一加窗就执行也行
Private Function selectOrderRow(ByVal rowIndex As Integer)
Dim selectedOrderNumber = (Me.orderGridView.Rows(rowIndex).Cells("orderNumber").Value)

Dim getMemberDiscountSql = "select memberDiscount from [order] where orderNumber = '{0}'"
getMemberDiscountSql = String.Format(getMemberDiscountSql, selectedOrderNumber)
Dim orderMemberDiscount = Common.getDataValue(getMemberDiscountSql, Common.getLocalConn)


orderDetailGridView.Rows.Clear()


Dim sql = "select * from orderDetail inner join product on orderDetail.serverProductId = product.serverProductId where orderNumber = '{0}'"
sql = String.Format(sql, selectedOrderNumber)
Try
Dim myReader = Common.getDataReader(sql, Common.getLocalConn)
While myReader.Read()
Dim rowProductBarcode = myReader("orderDetail.ProductBarcode")
Dim rowProductName = myReader("productName")
Dim rowProductNumber = myReader("productNumber")
Dim rowProductImage = Nothing
If (Not (myReader("productImage") Is DBNull.Value)) And File.Exists(Common.productImgPath & myReader("productImage")) Then
rowProductImage = Image.FromFile(Common.productImgPath & myReader("productImage"))
End If

Dim rowColor = myReader("color")
Dim rowSize = myReader("size")
Dim rowUnit = myReader("unit")
Dim rowSalePrice = Integer.Parse(myReader("orderDetail.salePrice"))
Dim rowBasicPrice = Integer.Parse(myReader("orderDetail.basicPrice"))
Dim rowAgentPrice = Integer.Parse(myReader("orderDetail.agentPrice"))
Dim rowOrderPrice = Integer.Parse(myReader("orderPrice"))
Dim rowPromotionPrice = Integer.Parse(myReader("orderDetail.promotionPrice"))
Dim rowOrderCount = Integer.Parse(myReader("orderCount"))
Dim rowProductDiscount = Integer.Parse(myReader("orderDetail.productDiscount"))
Dim rowDetailTotal = rowOrderPrice * rowOrderCount
Dim rowStatus = Integer.Parse(myReader("orderDetail.status"))


Dim rowStatusInfo = "销售"
If (rowStatus = 2) Then
rowStatusInfo = "退坏货"
End If
If (rowStatus = 3) Then
rowStatusInfo = "退良品"
End If
'说明下,DGV我没有直接用DGV.dataSouce=XX,而是用DGV.Rows.Add(),这样直接查出一行就加上一行,
Dim addedRowIndex = orderDetailGridView.Rows.Add(rowProductBarcode, rowProductName, rowProductNumber, rowProductImage, rowColor, rowSize, rowUnit, rowAgentPrice, rowSalePrice, rowProductDiscount, orderMemberDiscount, rowPromotionPrice, rowOrderPrice, rowOrderCount, rowDetailTotal, rowStatusInfo)
orderDetailGridView.Rows(addedRowIndex).Selected = False

If (rowStatus = 1) Then
orderDetailGridView.Rows(addedRowIndex).Cells("status").Style.ForeColor = Drawing.Color.Green
Else
orderDetailGridView.Rows(addedRowIndex).Cells("status").Style.ForeColor = Drawing.Color.Red
End If


End While
Catch ex As Exception
MsgBox(ex.ToString)
End Try
End Function
于之 2011-06-13
  • 打赏
  • 举报
回复
那段代码要写在哪里呢? 我是直接在DataGridView 中加的DataGridViewImageColumn 栏位, 代码要写在哪呢?请指点,谢谢!
Friday 2011-06-13
  • 打赏
  • 举报
回复

Dim imgFileStream = Nothing
If (Not (myReader("productImage") Is DBNull.Value)) And File.Exists(Common.productImgPath & myReader("productImage")) Then
imgFileStream = New IO.FileStream(Common.productImgPath & myReader("productImage"), IO.FileMode.Open, IO.FileAccess.Read)
rowProductImage = Image.FromStream(imgFileStream)
End If

Dim addedRowIndex = storageGridView.Rows.Add(rowProductBarcode, rowProductName, rowProductNumber, rowInitStorageCount, rowReceiveCount, rowDeliverCount, rowSaleCount, rowBadCount, rowStorageCount, rowProductImage)
If Not imgFileStream Is Nothing Then
imgFileStream.Close()
End If
'以上是一部分代码,也是DGV里显示图片,你看看能不能帮助你

于之 2011-06-13
  • 打赏
  • 举报
回复
我试过了 D:\photo\A001.jpg 都一样显示不了! 仍然是一个叉叉。
jiambet 2011-06-11
  • 打赏
  • 举报
回复
帮顶下
于之 2011-06-11
  • 打赏
  • 举报
回复
我的图片是一个公用的文件服务器,所以我们的图片都是这样放的

例如:\\192.168.0.1\publice 这样。

我上面的问题是我查出来的记录结果是这样:

编号 图片路径
A0001 \\192.168.0.1\public\image\A001.jpg
A0002 \\192.168.0.1\public\image\A002.jpg
EK301 \\192.168.0.1\public\image\EK301.jpg
...


所以,我把它显示在DataGridView中,我加了一个DataGridViewImageColumn 栏位,但就是图片不能正确显示出来。
我设置了新增的 DataGridviewImageColumn栏位的DataPropertyname属性为:Image.FromFile(cpath)
Imagelayout 属性为:Zoom.

但运行时图片显示为叉叉.

始终不得要领! (注:以上那些路径图片是可以访问打开的,有权限,可读可写的)

请高手指点一下,谢谢!

谢幕人生 2011-06-10
  • 打赏
  • 举报
回复
没做过,但帮你顶一下,消失0回复!
我一般都是将图放到SQL中存取.这样至少不会只能单机使用.
内容概要:本文聚焦于“通过ADMM进行TV-L1去噪”的研究,系统阐述了基于交替方向乘子法(ADMM)实现总变差(Total Variation, TV)正则化与L1范数稀疏约束相结合的图像去噪模型。文详细解析了TV-L1模型的数学构建及其在抑制椒盐噪声、保持图像边缘结构方面的优越性,重点介绍了ADMM算法如何将复杂的凸优化问题分解为多个可高效求解的子问题,提升收敛效率与数值稳定性。配套提供的Matlab代码实现了完整的去噪流程,便于读者复现算法并开展实验验证。此外,文档还整合了电力系统、信号处理、路径规划、机器学习等多个领域的科研资源,凸显其作为综合性学术资料包的价值。; 适合人群:具备良好数学基础与Matlab编程能力,从事图像处理、信号去噪、优化算法或相关领域研究的研究生、科研人员及工程技术人员。; 使用场景及目标:① 深入理解并复现基于ADMM的TV-L1图像去噪算法;② 掌握总变差正则化与L1范数在稀疏噪声去除的理论与应用;③ 利用所提供的Matlab代码进行算法调试、性能评估与二次开发;④ 借助附带的多领域科研案例拓展研究思路,推动跨学科技术创新。; 阅读建议:建议读者结合理论推导与Matlab代码实践,逐步跟踪ADMM的迭代过程,观察其收敛行为与去噪效果,同时可参考文档末尾提供的丰富科研资源链接,拓展技术视野与研究深度。

16,717

社区成员

发帖
与我相关
我的任务
社区描述
VB技术相关讨论,主要为经典vb,即VB6.0
社区管理员
  • VB.NET
  • 水哥阿乐
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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