如何在VB.NET嵌套For Each循环中传递GROUP_CONCAT逗号分隔的头像值
问题1:逗号分隔avatars仅返回单值的解决
你之前的写法没有对GROUP_CONCAT返回的逗号拼接字符串做拆分,相当于把image1,image2,image3整个当成单个元素存入列表,循环自然只执行一次。正确的逻辑是遍历每一行数据时,单独拆分当前行的avatars字段,再处理每个拆分后的头像地址:
Dim count As Integer = 0 For Each row As DataRow In transferstable.Rows ' 拆分当前行的avatars字段,自动过滤空值 Dim avatarUrls As String() = row.Item(8).ToString().Split({","c}, StringSplitOptions.RemoveEmptyEntries) Dim name = Truncate(row.Item("name"), 42) ' 遍历当前行的所有头像地址 For Each avatar As String In avatarUrls Dim avatarImg As Bitmap = Nothing Try ' 替换为你自己的远程Bitmap加载逻辑 avatarImg = New Bitmap(WebRequest.Create(avatar.Trim()).GetResponse().GetResponseStream()) ' 统一调整为15x15尺寸 avatarImg = New Bitmap(avatarImg, New Size(15, 15)) Catch ex As Exception ' 加载失败可设置默认占位图,或直接跳过当前头像 Continue For End Try ' 传入拆分后的头像对象到Add方法第4位参数 ListControl1.Add(name, row.Item("username"), row.Item("added"), avatarImg, row.Item("online"), images(count), 0) Next count += 1 Next
问题2:图片加载失败中断程序的解决
上述代码已经通过Try Catch包裹了Bitmap加载逻辑,遇到404、网络异常、文件不存在等问题时,只会跳过当前出错的头像,不会打断整个循环,剩余的180行数据可以正常处理。如果需要兼容加载失败的展示场景,可以在Catch分支里设置默认占位图片替代缺失的头像。
内容的提问来源于stack exchange,提问作者WiiLF
相关产品推荐
相关产品推荐

