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

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

我是在datagridview中添加了一个 DataGridViewImageColumn 的栏位,这个要如何来对其显示有路径的图片呢? 请指教,谢谢!
...全文
241 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中存取.这样至少不会只能单机使用.

16,553

社区成员

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

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