这是我的代码:
protected void imgbtnDF_Click(object sender, ImageClickEventArgs e)
    {
        SqlConnection myConn = new SqlConnection("server=(local); database=cycps; uid=sa; pwd=;");
        myConn.Open();
        //获取imgbtnDelete的ImageButton对象
        ImageButton imgbtn = (ImageButton)sender;
        //引用imgbtnDelete控件的父控件上一级控件
        GridViewRow gvr = (GridViewRow)imgbtn.Parent.Parent;
        //获取文件真实姓名
        string sqlStr = "select dname from [don] where did='" + GridView1.DataKeys[gvr.RowIndex].Value.ToString() + "'";
      
      
        DataSet ds = new DataSet();
        //获取文件路径
        string strFilePath = Server.MapPath("Don//" + Request.QueryString["dname"]);
        ds.Dispose();
        myConn.Close();
if (File.Exists(strFilePath))
        {
            System.IO.FileInfo file = new System.IO.FileInfo(strFilePath);
            Response.Clear();
            Response.ClearHeaders();
            Response.Buffer = true;
            Response.ContentType = "application/octet-stream";
            Response.AddHeader("Content-Disposition", "attachment;filename=" + HttpUtility.UrlEncode(file.Name));
            Response.AppendHeader("Content-Length", file.Length.ToString());
            Response.WriteFile(file.FullName);
            Response.Flush();
            Response.End();        }数据库表里面就只有id和name信息,我一直在想我点了那个下载按钮后,怎么把值传啊?是不是这句错了??
string sqlStr = "select dname from [don] where did='" + GridView1.DataKeys[gvr.RowIndex].Value.ToString() + "'";
string strFilePath = Server.MapPath("Don//" + Request.QueryString["dname"]);
这句也有问题对不对??
该怎么做啊。大虾教我啊 我初学

解决方案 »

  1.   

    你可以直接把文件路径存数据库啊,绑定时直接绑定到gridview嘛
      

  2.   

    等一下 你数据库存的文件路径是不是完整路径.如果是的.点击gridview的按钮时 根据ID查询这个完整路径 你就可以实现下载.
      

  3.   

    我这个是通过a标签传递到一般处理页面来实现下载的 其实一样的 我数据库的存储方式也是存储的文件完整路径 
    参考using System;
    using System.Collections;
    using System.Data;
    using System.Linq;
    using System.Web;
    using System.Web.Services;
    using System.Web.Services.Protocols;
    using System.Xml.Linq;namespace Asiastar.NR.Ajax
    {
        /// <summary>
        /// $codebehindclassname$ 的摘要说明
        /// </summary>
        [WebService(Namespace = "http://tempuri.org/")]
        [WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
        public class Handler1 : IHttpHandler
        {        public void ProcessRequest(HttpContext context)
            {
                context.Response.ContentType = "text/plain";            string id = context.Request["id"].ToString();//获取资源的编号
                System.IO.Stream iStream = null;
                byte[] buffer = new Byte[10000];
                int length;
                long dataToRead;
                NRBLL.File bf = new Asiastar.NRBLL.File();
                Guid guid = new Guid(id);
                if (bf.FN_SerchPathByFileId(guid).Tables[0].Rows[0]["FilePath"] != null)//判断数据库路径是否存在  
                {
                    string filepath = bf.FN_SerchPathByFileId(guid).Tables[0].Rows[0]["FilePath"].ToString();//获取资源完整路径    D:\资源文件\600cc139-14cf-448e-9e50-daa972d35e01.jpg
                    string Oidfilename = bf.FN_SerchPathByFileId(guid).Tables[0].Rows[0]["FileNam"].ToString();//旧文件名称
                    //string filename = System.IO.Path.GetFileName(filepath);//获取文件名称+后缀名 600cc139-14cf-448e-9e50-daa972d35e01.JPG
                    //int index = filepath.IndexOf(".");
                    //string filetype = filepath.Substring(index).ToLower();//后缀名
                    //string newfilename = Oidfilename;
                    //string filepath1 = bf.FN_SerchPathByFileId(guid).Tables[0].Rows[0]["FilePath"].ToString().Substring(0,filepath.Length - 8);
                    try
                    {
                        string fileName = HttpUtility.UrlEncode(System.Text.Encoding.UTF8.GetBytes(Oidfilename));//解码(注意这里2层解码)
                        Oidfilename = Oidfilename.Replace("+", "%20");  //将“+”替换成“空格”
                        iStream = new System.IO.FileStream(filepath, System.IO.FileMode.Open, System.IO.FileAccess.Read, System.IO.FileShare.Read);
                        dataToRead = iStream.Length;
                        context.Response.ContentType = "application/octet-stream";
                        context.Response.AddHeader("Content-Disposition", "attachment; filename=" + HttpUtility.UrlEncode(Oidfilename, System.Text.Encoding.UTF8));  //下载的时候下载原来的文件名称
                        while (dataToRead > 0)
                        {
                            if (context.Response.IsClientConnected)
                            {
                                length = iStream.Read(buffer, 0, 10000);
                                context.Response.OutputStream.Write(buffer, 0, length);
                                context.Response.Flush();
                                buffer = new Byte[10000];
                                dataToRead = dataToRead - length;
                            }
                            else
                            {
                                dataToRead = -1;
                            }
                        }                }
                    catch (Exception ex)
                    {
                        NR.Error.Log.LogType(ex.ToString());
                    }
                    finally
                    {
                        if (iStream != null)
                        {
                            iStream.Close();
                        }
                    }
                }
                else
                {
                    NR.Error.Log.LogType("找不到文件!");
                }
            }
            public bool IsReusable
            {
                get
                {
                    return false;
                }
            }
        }
    }
      

  4.   

    关键数据绑定到gridview,你是怎么做的?
      

  5.   

    我觉得你最好把需要下载的文件放在一个站点或虚拟目录中,例如 允许用户下载 text.rar 这个文件,你就需要用户可以通过url访问到这个文件,即 http://你的网址/download/test.rar这样就只需要在gridview那里的imagebutton的代码那里写个重定向到 http://你的网址/download/test.rar
    这个网址就可以下载了.
      

  6.   

    你可以直接把文件路径存数据库,然后绑定时直接绑定到gridview这样绑定,弄个Hyperlink              <ItemTemplate>
                         <asp:HyperLink ID="HyperLink1" runat="server"                             Text='<%# Eval("FileName") %>'  
                                NavigateUrl='<%# Eval("FileName").ToString() %>' 
                                             
                         </asp:HyperLink>
                    </ItemTemplate>
      

  7.   


    路径该怎么存呢?该怎样写?我这样写存进去对么?D:\工作区\系统开发-张帅\财院操盘手\实验室\Don\1
    这样的路径存进数据库对不?
      

  8.   

    这gridview里面的下载功能我快疯了。。叫我这种不学这个的做网站受不了~你的意思是我这样写D:\工作区\系统开发-张帅\财院操盘手\实验室\Don\1
    格式上是没有问题的吧?  大哥 有下载功能的案例么?我QQ329916824 我学金融的做这个太吃力了