//上传文件
    protected void btnUpload_Click(object sender, EventArgs e)
    {
        //判断是否选择文件
        if (FileUpload1.HasFile)
        {
            //第一步 上传文件
            string filename = FileUpload1.FileName;  
            DateTime today = System.DateTime.Today;
            filename = today.ToShortDateString() + filename;  //生成服务器端文件名
            string fileExt = System.IO.Path.GetExtension(filename);
            string filePath = Server.MapPath("~/MasterPage/BasicInfoManagement/upload/" + filename);            if (fileExt == ".xls" || fileExt == ".xlsx" || filename.IndexOf("") < 1)
            {
                JScript.AlertByControl(btnUpload, "数据导入失败.可能是文件格式或路径不正确!");
            }
            else
            {
                FileUpload1.PostedFile.SaveAs(filePath);
            }
            //第二步   将EXCEL数据导入Gridview        }
        else
        {
            JScript.AlertByControl(btnUpload, "请选择上传文件!");
        }
    }
          RT     当没有选择文件时,提示请选择上传文件,但是选择文件后,点击上传,不进入调试,直接刷新为空 ?         获取文件路径后,如何将文件内容转化为datatable ?
        

解决方案 »

  1.   

     /// <summary>
            /// 将csv文件中的数据转成dataTabel
            /// </summary>
            /// <param name="path">csv路径</param>
            /// <returns>DataTable</returns>
            public DataTable CSVToDS(string path)
            {
                String line;
                String[] split = null;
                DataTable table = new DataTable("auto");
                DataRow row = null;
                StreamReader sr = new StreamReader(path, Encoding.Default);            //创建与数据源对应的数据列 
                line = sr.ReadLine();
                split = line.Split(',');
                 
                foreach (String colname in split)
                {
                    
                    table.Columns.Add(colname, System.Type.GetType("System.String"));
                    
                }
                //将数据填入数据表 
                int j = 0;
                while ((line = sr.ReadLine()) != null)
                {
                    j = 0;
                    row = table.NewRow();
                    split = line.Split(',');                
                    foreach (String colname in split)
                    {                    if (j > table.Columns.Count-1) continue;
                        row[j] = colname.Trim().Replace("'","").Replace("\"","");
                        j++;
                    }
                    table.Rows.Add(row);
                   
                }
                sr.Close();
                //显示数据 
                return table;
            }
            /// <summary>
            /// 将excel文件另存csv文件
            /// </summary>
            /// <param name="excelFileName">Excel文件路径</param>
            /// <param name="csvFileName">csv文件路径</param>
            public static void SaveAsExcel(string excelFileName, string csvFileName)
            {
                //定义一个COM中空类型的对象(作用类似于大家所熟悉的null) 
                object missing = System.Reflection.Missing.Value;            //创建Excel应用程序对象(会帮我们在启动Excel进程) 
                Excel.Application app = new Excel.ApplicationClass();            Excel.Workbook  wb = app.Application.Workbooks.Open(excelFileName, missing, missing, missing, missing, missing, missing, missing,
                missing, missing, missing, missing, missing, missing, missing);
                //不出现提示,用默认的选择
                app.Application.DisplayAlerts = false;
                //不运行excel界面
                app.Application.Visible = false;            Excel.Worksheet sheet = (Excel.Worksheet)wb.ActiveSheet;
                try
                {
                    //另存为csv格工,注意Excel.XlFileFormat.xlCSV参数,要另存为别的格式,也是在这里设置                sheet.SaveAs(csvFileName, Excel.XlFileFormat.xlCSV, missing, missing, false, false, false, missing, missing, false);
                }
                finally
                {                wb.Close(false, missing, missing);                app.Quit();
                }
            }
      

  2.   

      
           Excel.Application app = new Excel.ApplicationClass();             这个是文件名还是 要导入什么包? 
      

  3.   

             为什么点击上传后fileupload会刷新为空, 要更改什么属性? 
      

  4.   

    FileUpload只要页面刷新了 它的值就会被清空,回到原始状态的
    FileUpload是只读控件
      

  5.   

      断点放在第一个if那,  点击上传后, 路径已经自动清空了, 所以判断if后,直接调到else,执行  "请选择上传文件" 
               那如何来获取路径呢? 
      

  6.   

    首先 FileUpload 是只读控件,页面刷过后,肯定清空。点击上传,不进入调试,直接刷新为空分析了。1.你的页面给定FileUpload1 事件了么?
    你把断点设在 protected void btnUpload_Click(object sender, EventArgs e)上看看走不走。
    2.你使用AJAX了么?有没有注册事件?
    3.是不是动态绑定的事件?有委托么?
    等等....
      

  7.   

             上传Excel文件显示到GridView  大家是怎么做的?  以前很少做文件的导入导出, 不是很清楚.
      

  8.   


             我是嵌套的母板页, 包含UpdatePanel,应该就是这个原因吧!   但是不能删除, 要怎么设置才行? 
             另外,FileUpload有单击事件吗? 事件里没找到,双击会进入到前台代码 .       
      

  9.   

          好了   在页面添加了这个
      <asp:UpdatePanel ID="UpdatePanel1" runat="server" UpdateMode = "Conditional">
            <ContentTemplate>
             </ContentTemplate>
            <Triggers>
                <asp:PostBackTrigger ControlID="btnUpload" />
            </Triggers>

        </asp:UpdatePanel>
     
        
            感谢大家的帮助!  
      

  10.   

    page_load事件下加
    ScriptManager.GetCurrent(Me.Master.Page).RegisterPostBackControl(btnupload);