问题描述
ASP.NETC#选择Excel文件并读取到Gridview中,但是出错!代码如下:protectedvoidButton1_Click(objectsender,EventArgse){if(FileUpload1.HasFile==false){Response.Write("<script>alert('请您选择Excel文件')</script>");return;}stringIsXls=System.IO.Path.GetExtension(FileUpload1.FileName).ToString().ToLower();if(IsXls!=".xls"&&IsXls!=".xlsx"){Response.Write("<script>alert('只可以选择Excel文件')</script>");return;}stringfilename=FileUpload1.FileName;stringsavePath=Server.MapPath(filename);//Server.MapPath获得虚拟服务器相对路径//FileUpload1.SaveAs(savePath);//SaveAs将上传的文件内容保存在服务器上DataSetds=ExcelSqlConnection(savePath,filename);//调用自定义方法this.GridView1.DataSource=ds;this.GridView1.DataBind();'-IListSource不包含任何数据源。}publicstaticSystem.Data.DataSetExcelSqlConnection(stringfilepath,stringtableName){DataSetds=newDataSet();try{stringstrCon=string.Format("Provider=Microsoft.Jet.OLEDB.4.0;DataSource={0};ExtendedProperties=Excel8.0",tableName);OleDbConnectionmyConn=newOleDbConnection(strCon);stringstrCom="SELECT*FROM[Sheet1$]";myConn.Open();//打开数据链接,得到一个数据集OleDbDataAdaptermyCommand=newOleDbDataAdapter(strCom,myConn);myCommand.Fill(ds,"[Sheet1$]");myConn.Close();}catch(Exceptionee){}returnds;}运行时却光标停留在:this.GridView1.DataBind();提示:IListSource不包含任何数据源。
解决方案
解决方案二:
publicvoidReadExcel(stringsExcelFile,GridViewdgBom){DataTableExcelTable;DataSetds=newDataSet();//Excel的连接OleDbConnectionobjConn=newOleDbConnection("Provider=Microsoft.ACE.OLEDB.12.0;DataSource="+sExcelFile+";"+"ExtendedProperties=Excel8.0;");objConn.Open();DataTableschemaTable=objConn.GetOleDbSchemaTable(System.Data.OleDb.OleDbSchemaGuid.Tables,null);stringtablename=schemaTable.Rows[0][2].ToString().Trim();//获取Excel的表名,默认为sheet1.stringstrsql="select*from["+tablename+"]";OleDbCommandobjCmd=newOleDbCommand(strsql,objConn);OleDbDataAdaptermyData=newOleDbDataAdapter(strsql,objConn);myData.Fill(ds,tablename);dgBom.DataSource=ds;dgBom.DataBind();objConn.Close();ExcelTable=ds.Tables[tablename];}OK了
解决方案三:
LZ在自导自演呀
解决方案四:
你这样直接绑定DataSetds,则ASP.NET会默认转换为这样的绑定this.GridView1.DataSource=ds.Tables[0];//这是微软的语法糖,你别被迷惑了,建议楼主多看点书,特别理解各控件的工作机制。假如,你返回的ds==null,则ds.Tables[0]会报错,因为一个null对象,是不能使用.(点号操作符)的当然,这也只是我个人分析,具体楼主自己检查
解决方案五:
给楼主一个Excel导入导出的实例,,将导入的数据datatable与datagridview绑定即可
解决方案六:
是不是office驱动问题?还有就是你得先把文件上传到服务器,然后获取绝对路径,调用office驱动读取数据填充到DataTable中,然后绑定Gridview上去