如何在datagrid中动态绑定图片 请教高手: 如何在datagrid中动态绑定图片,类似论坛中的跟贴,是否用二进制流上传,然后再下载?有代码的话,能否指点一二? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 数据库里存的是图片的路径,然后在datagrid中就可以动态梆定了!如:<asp:image id="imgFace" runat="server" ImageUrl="<%# DataBinder.Eval(Container.DataItem,"faceimg")%>" /> 楼上说的这些图片只能放在服务器上了. 而我要求的是客户端发图片,别人可以看到,其实就是论坛中贴图片的功能.datagrid用来放这些图片 客户端上传的图片就是存到服务器上或数据库里的,然后在由关联的字段显示出来的。传到服务器上的较简单,就像一楼所说的。数据库中上传图片C#代码是://实现照片上传 private void imbUp_Click(object sender, System.Web.UI.ImageClickEventArgs e) { //获取文件名 string filestr=imageFile.Value.ToString(); string FileName=filestr.Substring(filestr.LastIndexOf("\\")+1); //获取对由客户端指定的上传文件的访问 HttpPostedFile UpFile=imageFile.PostedFile; //获取文件类型 string imgContentType=UpFile.ContentType; //建立数据流对像,获取一个 Stream 对象,该对象指向一个上载文件,以准备读取该文件的内容 Stream FileStream=UpFile.InputStream; //获取上传文件的字节大小 int FileLength=(int)UpFile.ContentLength; //文件存储到字节数组 Byte []FileByte=new byte[FileLength]; //读取图象文件数据 FileStream.Read(FileByte,0,FileLength); //关闭文件流 FileStream.Close(); //定义ADO数据库连接 SqlConnection strConn=new SqlConnection(); //定义连接字符串 strConn.ConnectionString=c_Str; //定义连接命令 SqlCommand cmd=new SqlCommand(); cmd.Connection=strConn; //使用存储过程 cmd.CommandType=CommandType.StoredProcedure; //存储过程名 cmd.CommandText="pro_imgup"; //定义参数 SqlParameter imgname=new SqlParameter(); //图片名称 imgname=cmd.Parameters.Add("@ImgName",SqlDbType.VarChar,50); //参数方向 imgname.Direction=ParameterDirection.Input; //参数值 //图片名 imgname.Value=FileName.ToString(); //定义参数 SqlParameter imgdes=new SqlParameter(); //图片描述 imgdes=cmd.Parameters.Add("@ImgDes",SqlDbType.VarChar,50); //参数方向 imgdes.Direction=ParameterDirection.Input; //参数值 imgdes.Value=txtImgDes.Text.ToString(); //定义参数 SqlParameter imgcla=new SqlParameter(); //图片类型 imgcla=cmd.Parameters.Add("@ImgCla",SqlDbType.Char,4); //参数方向 imgcla.Direction=ParameterDirection.Input; //参数值 imgcla.Value=imgContentType; //定义参数 SqlParameter imgdate=new SqlParameter(); //上传时间 imgdate=cmd.Parameters.Add("@ImgDate",SqlDbType.DateTime); //参数方向 imgdate.Direction=ParameterDirection.Input; //时间为当前时间 imgdate.Value=System.DateTime.Now; //定义参数 SqlParameter imgimg=new SqlParameter(); //图片 imgimg=cmd.Parameters.Add("@ImgImg",SqlDbType.Image); //参数方向 imgimg.Direction=ParameterDirection.Input; //图片值为传上来得图片文件流 imgimg.Value=FileByte; //定义参数 SqlParameter dirid=new SqlParameter(); //图片所属文件夹目录 dirid=cmd.Parameters.Add("@DirId",SqlDbType.BigInt); //参数方向 dirid.Direction=ParameterDirection.Input; //参数值为页面传值,文件夹编号 dirid.Value=Request.QueryString["DirId"].ToString(); //打开数据连接 strConn.Open(); int odr=cmd.ExecuteNonQuery(); if(odr>0) { txtImgDes.Text=""; ImageShow(); } else Response.Write("<script>alert('图片上传失败!')</script>"); //关闭数据连接 strConn.Close(); }数据库中读取图片C#代码就是(用一个新的页面读取,DataGrid的绑定就由Img控件绑定这个页面,传一个图片ID就好了):public class imageshow : System.Web.UI.Page { private void Page_Load(object sender, System.EventArgs e) { // 在此处放置用户代码以初始化页面 if(Session["usrName"]==null) Response.Redirect("/login.aspx"); else { if(!Page.IsPostBack) { string imageid=Request.QueryString["Img_Id"].ToString(); ImageShow(imageid); } } } // private string c_Str=ConfigurationSettings.AppSettings["ConnectionString"]; // private void ImageShow(string imageid) { //定义ADO数据库连接 SqlConnection strConn=new SqlConnection(); strConn.ConnectionString=c_Str; //定义连接命令 SqlCommand cmd=new SqlCommand(); cmd.Connection=strConn; //类型为SQL语句 cmd.CommandType=CommandType.Text; //存储过程字符串 cmd.CommandText="Select Img_Name,Img_Cla,Img_Img from image where Img_Id='"+imageid+"'"; strConn.Open(); SqlDataReader dr=cmd.ExecuteReader(); if(dr.Read()) { Response.Clear(); //定义内存流 MemoryStream stream = new MemoryStream(); //定义位图 Bitmap bm = null; System.Drawing.Image image = null; //取得图像 byte[] blob = (byte[])dr[2]; //写入图像于内存流 stream.Write(blob,0,blob.Length); bm = new Bitmap(stream); int width,height; if(bm.Width>800)//限制最大宽为800像素 { width=800; height = (int)(width*((double)bm.Height/(double)bm.Width)); } else { width=bm.Width; height=bm.Height; } // GetThumbnailImage生成缩略图 image = bm.GetThumbnailImage(width,height,null,IntPtr.Zero); //设置输出流类型 Response.ContentType = dr[1].ToString(); //输出图片 image.Save(Response.OutputStream,System.Drawing.Imaging.ImageFormat.Jpeg); //加上标题 string flName = System.Web.HttpUtility.UrlEncode(dr[0].ToString(),System.Text.Encoding.UTF8); Response.AddHeader("Content-Disposition","attachment;filename="+ flName +";"); if(image!=null) image.Dispose(); if(bm!=null) bm.Dispose(); stream.Close(); Response.Flush(); Response.End(); } dr.Close(); strConn.Close(); } #region Web 窗体设计器生成的代码 override protected void OnInit(EventArgs e) { // // CODEGEN: 该调用是 ASP.NET Web 窗体设计器所必需的。 // InitializeComponent(); base.OnInit(e); } /// <summary> /// 设计器支持所需的方法 - 不要使用代码编辑器修改 /// 此方法的内容。 /// </summary> private void InitializeComponent() { this.Load += new System.EventHandler(this.Page_Load); } #endregion } asp.net 还原数据库,结束sql数据库进程的时候提示游标不存在 c# 如何实现模糊查找文件并拷贝文件? 如何让系统提示安装补丁??? C#==》声音提示 C#超简单的一个问题 弹出提示框 windows mobile C#开发应用程序,需要通过GPRS连接网络,如何处理网络无法连接错误 DEVEXPRESS 打印 将Datatable序列化的问题,OutOfMemory 希望c#的朋友能帮我解决 C#操作Socket实例 XmlDocument对象Load一个xml文件的时候提示基础连接已经关闭: 无法连接到远程服务器。在线等 如何禁止某个应用程序使用声音设备(高分求)
<asp:image id="imgFace" runat="server" ImageUrl="<%# DataBinder.Eval(Container.DataItem,"faceimg")%>" />
而我要求的是客户端发图片,别人可以看到,其实就是论坛中贴图片的功能.datagrid用来放这些图片
数据库中上传图片C#代码是:
//实现照片上传
private void imbUp_Click(object sender, System.Web.UI.ImageClickEventArgs e)
{
//获取文件名
string filestr=imageFile.Value.ToString();
string FileName=filestr.Substring(filestr.LastIndexOf("\\")+1);
//获取对由客户端指定的上传文件的访问
HttpPostedFile UpFile=imageFile.PostedFile;
//获取文件类型
string imgContentType=UpFile.ContentType;
//建立数据流对像,获取一个 Stream 对象,该对象指向一个上载文件,以准备读取该文件的内容
Stream FileStream=UpFile.InputStream;
//获取上传文件的字节大小
int FileLength=(int)UpFile.ContentLength;
//文件存储到字节数组
Byte []FileByte=new byte[FileLength];
//读取图象文件数据
FileStream.Read(FileByte,0,FileLength);
//关闭文件流
FileStream.Close();
//定义ADO数据库连接
SqlConnection strConn=new SqlConnection();
//定义连接字符串
strConn.ConnectionString=c_Str;
//定义连接命令
SqlCommand cmd=new SqlCommand();
cmd.Connection=strConn;
//使用存储过程
cmd.CommandType=CommandType.StoredProcedure;
//存储过程名
cmd.CommandText="pro_imgup";
//定义参数
SqlParameter imgname=new SqlParameter();
//图片名称
imgname=cmd.Parameters.Add("@ImgName",SqlDbType.VarChar,50);
//参数方向
imgname.Direction=ParameterDirection.Input;
//参数值
//图片名
imgname.Value=FileName.ToString();
//定义参数
SqlParameter imgdes=new SqlParameter();
//图片描述
imgdes=cmd.Parameters.Add("@ImgDes",SqlDbType.VarChar,50);
//参数方向
imgdes.Direction=ParameterDirection.Input;
//参数值
imgdes.Value=txtImgDes.Text.ToString();
//定义参数
SqlParameter imgcla=new SqlParameter();
//图片类型
imgcla=cmd.Parameters.Add("@ImgCla",SqlDbType.Char,4);
//参数方向
imgcla.Direction=ParameterDirection.Input;
//参数值
imgcla.Value=imgContentType;
//定义参数
SqlParameter imgdate=new SqlParameter();
//上传时间
imgdate=cmd.Parameters.Add("@ImgDate",SqlDbType.DateTime);
//参数方向
imgdate.Direction=ParameterDirection.Input;
//时间为当前时间
imgdate.Value=System.DateTime.Now;
//定义参数
SqlParameter imgimg=new SqlParameter();
//图片
imgimg=cmd.Parameters.Add("@ImgImg",SqlDbType.Image);
//参数方向
imgimg.Direction=ParameterDirection.Input;
//图片值为传上来得图片文件流
imgimg.Value=FileByte;
//定义参数
SqlParameter dirid=new SqlParameter();
//图片所属文件夹目录
dirid=cmd.Parameters.Add("@DirId",SqlDbType.BigInt);
//参数方向
dirid.Direction=ParameterDirection.Input;
//参数值为页面传值,文件夹编号
dirid.Value=Request.QueryString["DirId"].ToString();
//打开数据连接
strConn.Open();
int odr=cmd.ExecuteNonQuery();
if(odr>0)
{
txtImgDes.Text="";
ImageShow();
}
else
Response.Write("<script>alert('图片上传失败!')</script>");
//关闭数据连接
strConn.Close();
}
数据库中读取图片C#代码就是(用一个新的页面读取,DataGrid的绑定就由Img控件绑定这个页面,传一个图片ID就好了):
public class imageshow : System.Web.UI.Page
{
private void Page_Load(object sender, System.EventArgs e)
{
// 在此处放置用户代码以初始化页面
if(Session["usrName"]==null)
Response.Redirect("/login.aspx");
else
{
if(!Page.IsPostBack)
{
string imageid=Request.QueryString["Img_Id"].ToString();
ImageShow(imageid);
}
}
}
//
private string c_Str=ConfigurationSettings.AppSettings["ConnectionString"];
//
private void ImageShow(string imageid)
{
//定义ADO数据库连接
SqlConnection strConn=new SqlConnection();
strConn.ConnectionString=c_Str;
//定义连接命令
SqlCommand cmd=new SqlCommand();
cmd.Connection=strConn;
//类型为SQL语句
cmd.CommandType=CommandType.Text;
//存储过程字符串
cmd.CommandText="Select Img_Name,Img_Cla,Img_Img from image where Img_Id='"+imageid+"'";
strConn.Open();
SqlDataReader dr=cmd.ExecuteReader();
if(dr.Read())
{
Response.Clear();
//定义内存流
MemoryStream stream = new MemoryStream();
//定义位图
Bitmap bm = null;
System.Drawing.Image image = null;
//取得图像
byte[] blob = (byte[])dr[2];
//写入图像于内存流
stream.Write(blob,0,blob.Length);
bm = new Bitmap(stream);
int width,height;
if(bm.Width>800)//限制最大宽为800像素
{
width=800;
height = (int)(width*((double)bm.Height/(double)bm.Width));
}
else
{
width=bm.Width;
height=bm.Height;
}
// GetThumbnailImage生成缩略图
image = bm.GetThumbnailImage(width,height,null,IntPtr.Zero);
//设置输出流类型
Response.ContentType = dr[1].ToString();
//输出图片
image.Save(Response.OutputStream,System.Drawing.Imaging.ImageFormat.Jpeg); //加上标题
string flName = System.Web.HttpUtility.UrlEncode(dr[0].ToString(),System.Text.Encoding.UTF8);
Response.AddHeader("Content-Disposition","attachment;filename="+ flName +";");
if(image!=null)
image.Dispose();
if(bm!=null)
bm.Dispose();
stream.Close();
Response.Flush();
Response.End();
}
dr.Close();
strConn.Close();
} #region Web 窗体设计器生成的代码
override protected void OnInit(EventArgs e)
{
//
// CODEGEN: 该调用是 ASP.NET Web 窗体设计器所必需的。
//
InitializeComponent();
base.OnInit(e);
}
/// <summary>
/// 设计器支持所需的方法 - 不要使用代码编辑器修改
/// 此方法的内容。
/// </summary>
private void InitializeComponent()
{
this.Load += new System.EventHandler(this.Page_Load);
}
#endregion
}