彩票走势图

解决Dev控件gridControl中图片的显示问题

转帖|其它|编辑:郝浩|2011-01-21 11:50:21.000|阅读 6096 次

概述:也许有的人说,显示图片还不是很简单的事情,保存图片路径到数据库的方式显示图片也是很简单的啊!但是在gridControl中以cardview 来显示的时候没有想datagridview中相类似的cellFormatting事件来更改显示的方式,所以还通过中间转换才能够将对应的图片显示到 cardview中。

# 慧都年终大促·界面/图表报表/文档/IDE等千款热门软控件火热促销中 >>

  也许有的人说,显示图片还不是很简单的事情,保存图片路径到数据库的方式显示图片也是很简单的啊!但是在gridControl中以cardview来显示的时候没有想datagridview中相类似的cellFormatting事件来更改显示的方式,所以还通过中间转换才能够将对应的图片显示到cardview中。

  用gridControl控件中的cardview方式显示图片有两种方式,

  一种是直接把图片以二进制的形式存入数据库中,在显示时直接通过dataset将其对应的信息取出赋值给datatable再把其与gridControl的数据源绑定。即可显示。此种方式简单方便,但是比较好资源,占用了数据库大量的空间。不推荐。

  第二种是把图片以其路径的形式存入数据库中,显示时通过路径来获取图片的二进制再把获取的二进制的值赋值给datatable,绑定到gridControl即可。虽然看起来比较麻烦,但还是推荐用这种方式。暂时还没有找到更好的方法,若有人有更好的方法,希望分享下下...

  下面是两种方法实现的主要代码。

方式一:

前提:图片以二进制存到了数据库中。

Public adata As New testDatesetTableAdapters.TestTableAdapter

Public testtbaAs New testDateset.TestDataTable

adata.FillByVipNum(testtba, testNum)//table name,param1
If testtba.Rows.Count > 0 Then
GridControl1.DataSource = testtba

方式二:(C#)

//显示数据
private void showData(List<Employee > list)
{
DataTable dt = new DataTable("OneEmployee");
dt.Columns.Add("Caption", System.Type.GetType("System.String"));
dt.Columns.Add("Department", System.Type.GetType("System.String"));
dt.Columns.Add("PhotoName", System.Type.GetType(&quot;System.Byte[]"));

for (int i = 0; i < list.Count; i++)
{
DataRow dr = dt.NewRow();
dr["Caption"] = list[i].Name;
dr["Department"] = list[i].Department;
string imagePath = @"D:\C#\photos\" + list[i].PhotoPath;
dr["PhotoName"] = getImageByte(imagePath);
dt.Rows.Add(dr);
}
gridControl1.DataSource = dt;
}

//返回图片的字节流byte[]
private byte[] getImageByte(string imagePath)
{
FileStream files = new FileStream(imagePath, FileMode.Open);
byte[] imgByte = new byte [files.Length ];
files.Read(imgByte, 0, imgByte.Length);
files.Close();
return imgByte;
}

效果图为:

 

 


标签:

本站文章除注明转载外,均为本站原创或翻译。欢迎任何形式的转载,但请务必注明出处、不得修改原文相关链接,如果存在内容上的异议请邮件反馈至chenjj@cahobeh.cn

文章转载自:网络转载

为你推荐

  • 推荐视频
  • 推荐活动
  • 推荐产品
  • 推荐文章
  • 慧都慧问
扫码咨询


添加微信 立即咨询

电话咨询

客服热线
023-68661681

TOP