GridView功能之实现上传、下载文件————东北石油大学软工11-3 15

        这几天做了一个本校项目,东北石油大学软件学院主页。其中大量用到了GridView、DataList来进行数据的操作,且必须是纯代码生成,不可以用GridView的绑定数据源(具体因为什么我也不知道,可能是项目合并的时候会有问题),做了几天之后对GridView有点感悟,写出来供大家参考参考,本科生水平 不喜勿喷。

      1、GridView实现动态创建数据表

        private void  Page_Load(object sender, EventArgs e)

       {

           if(!isPostBack)

            Listfile();

          }

      void ListFile()                             //加载文件列表——————————————————
        {

             DataRow row;
            DataSet ds = new DataSet();
            DataTable dtTable = new DataTable();
            ds = BLL.bllWC.BLL_LoadFile();            //获取数据库内容
            for (int i = 0; i < ds.Tables[0].Rows.Count; i++)  //判断数据库里有几行记录
            {
                row = dtTable.NewRow();
                dtTable.Rows.Add(row);                             //创造的新表跟数据库里的记录一样多
            }
           
            string Head1 = "序号";                                     //手动创建列名 (可以任意多个)
            DataColumn head1 = new DataColumn(Head1);
            dtTable.Columns.Add(head1);//加入第一列
            string Head2 = "文件名";
            DataColumn head2 = new DataColumn(Head2);
            dtTable.Columns.Add(head2);//加入第二列
            string Head3 = "文件类型";
            DataColumn head3 = new DataColumn(Head3);
            dtTable.Columns.Add(head3);//加入第三列
            string Head4 = "文件大小(KB)";
            DataColumn head4 = new DataColumn(Head4);
            dtTable.Columns.Add(head4);//加入第四列
           

 

            for (int i = 0; i < ds.Tables[0].Rows.Count; i++)        //循环取出来的表,为自己创建的表添加记录(相当于复制取出来的表 按照你自己想要的列名顺序展示)
            {
                dtTable.Rows[i][0] = ds.Tables[0].Rows[i][0].ToString();
                dtTable.Rows[i][1] = ds.Tables[0].Rows[i][1].ToString();
                dtTable.Rows[i][2] = ds.Tables[0].Rows[i][2].ToString();
                dtTable.Rows[i][3] = ds.Tables[0].Rows[i][3].ToString();
            }
            GridView1.DataSource = dtTable;
            GridView1.DataBind();
        }

      2、GridView实现上传文件

 protected void Button1_Click(object sender, EventArgs e)
        {
           
            if (FileUpload1.HasFile == true && FileUpload1.PostedFile.ContentLength != 0) // 如果文件有内容
            {
                string time = DateTime.Now.ToShortDateString(); //上传时间
                string path = Server.MapPath("~/upfiles/");          //在网站Web根目录下创建文件夹upfiles存上传的文件
                double size = Convert.ToDouble(FileUpload1.PostedFile.ContentLength) / 1024; //文件大小(KB)
                string filename, filetype;
                filename = FileUpload1.FileName.ToString();
                filetype = filename.Substring(filename.LastIndexOf(".") + 1); //获取文件的后缀名  
                //如果已有此文件,不可重复上传

                DataSet ds = BLL.bllWC.BLL_GetAllFilename();

             if(ds!=null)

           {
                for (int i = 0; i < ds.Tables[0].Rows.Count; i++)        
                {
                    if (filename.Equals(ds.Tables[0].Rows[i][0].ToString()))
                    {
                        Response.Write("<script>alert('已有文件,不可重复上传!')</script>");
                        return;
                    }
                }

             }

                bool aa = BLL.bllWC.BLL_UpFile(size, filename, filetype);       //对数据库更新,把上传文件的名字、大小、类型插入进去
                if (aa == true)
                {
                    FileUpload1.SaveAs(path + FileUpload1.FileName);   //保存到指定的网站根目录下的upfiles文件夹下
                    BLL.bllWC.BLL_InsertTime(filename,time);          //原来数据库设计的没有上传时间,做完之后又新增的,所有这里有插入时间方法 (可以删了)
                    ListFile();
                }
                else
                {
                    Response.Write("<script>alert('上传文件失败!')</script>");
                    ListFile();
                }
       }
            else
            {
                Response.Write("<script>alert('文件名不存在或者文件为空!')</script>");
            }

 }

       3、GridView实现文件下载

前提:需要在GridView里编辑模板,增加列,增加ButtonField字段,Text和HeaderText设为删除,注意一定要设置行为里的CommandName(我设为了Btn_Click),然后点击GridView的RowCommand方法,进去编写。而且Page_load事件里要有上面的ListFile()方法 加载文件列表。 //如果是别的页面跳转到这个页面进行了传参,只可用IE自带浏览器保存,各个浏览器 迅雷什么的解析URL会有问题(网上搜的)

   protected void GridView1_RowCommand(object sender, GridViewCommandEventArgs e)
        {
            string strFile = Server.MapPath("upfiles/");    //文件存在哪里
            string filename = 。。。                        //文件名字,自己获取吧,我的你用不了
            strFile += filename;
            if (e.CommandName == "Btn_Click")                //如果确实点击了下载
            {
               
                if (!System.IO.File.Exists(strFile))
                {
                    Response.Write("<script language='javascript'>alert('对不起,出错了!');</script>");
                    return;
                }
                Response.Clear();
                Response.Charset = "GB2312";
                Response.ContentEncoding = System.Text.Encoding.UTF8;
                Response.ContentType = "application/octet-stream";
                FileInfo fi = new FileInfo(strFile);
                Response.AddHeader("Content-Disposition", "attachment;  filename=" + Server.UrlEncode(filename));
                Response.AddHeader("Content-Length", fi.Length.ToString());
                byte[] tmpbyte = new byte[1024 * 8];
                FileStream fs = fi.OpenRead();
                int count;
                while ((count = fs.Read(tmpbyte, 0, tmpbyte.Length)) > 0)
                {
                    Response.BinaryWrite(tmpbyte);
                    Response.Flush();
                }
                fs.Close();
                Response.End();
            }
        }

 

 

 

 

 

转载于:https://www.cnblogs.com/wc2115/p/3513522.html

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值