asp.net - Open DataTable in Excel VB -


ok, interesting issue. have been tasked modifying existing vb project. user selected series of dropdowns select sql query , run query. user selects , environment dropdown, results of dropdown populates category dropdown. once category selected, dropdown of available queries. once select query , hit "run" button, gridview results of query. of query results huge. query i'm running test has 40 columns , 20,000 records. query runs in less 5 seconds takes on minute render gridview. once gridview done rendering, user has option export results excel. , this, mean code opens instance of excel through gridview.rendercontrol , displays results in excel. user doesn't want save excel file , navigate file, want open right webform using code currently.

however, user doesn't care gridview. don't care if see @ all. want open excel. instead of using gridview.rendercontrol, want open excel , populate datatable (or dataset) in memory. thoughts on best way that?

here's how populating gridview: dim myconnection sqlconnection dim mycommand sqlcommand dim mydatatable datatable dim myreader sqldatareader

        myconnection = new sqlconnection()         myconnection.connectionstring = configurationmanager.connectionstrings(connection).connectionstring          mycommand = new sqlcommand()         mycommand.commandtext = sqlquery         mycommand.commandtype = commandtype.text         mycommand.connection = myconnection          mycommand.connection.open()         myreader = mycommand.executereader(commandbehavior.closeconnection)          mydatatable = new datatable()         mydatatable.load(myreader)          if (mydatatable.rows.count > 0)             queryresultpanel.visible = true             gvlineitems.datasource = mydatatable             gvlineitems.databind()         end if          mydatatable.dispose()         mycommand.dispose()         myconnection.dispose() 

here's how they're opening , populating instance of excel:

     protected sub btnexporttoexcel_click(byval sender object, byval e system.eventargs) handles btnexporttoexcel.click         response.clear()         response.buffer = true         '         ' set content type excel.         '          response.addheader("content-disposition", "attachment;filename=gridviewexport.xls")         response.charset = ""         response.contenttype = "application/vnd.ms-excel"         '          ' turn off view state.         '          me.enableviewstate = false         dim ostringwriter new system.io.stringwriter()         dim ohtmltextwriter new system.web.ui.htmltextwriter(ostringwriter)         '          ' html control.         '         gvlineitems.rendercontrol(ohtmltextwriter)         '          ' write html browser.         '         response.write(ostringwriter.tostring())         response.[end]()     end sub 

obviously, there's no rendercontrol datatable or dataset , can't figure out how record set render in instance of excel without saving file first.

alright, here's solution found (in case interested). it's pretty simple actually. looped through datatable , used stringwriter.

    protected sub writetoexcelfile(dt datatable)     dim sw stringwriter      each datacol datacolumn in dt.columns         sw.write(datacol.columnname + vbtab)     next      dim row datarow     each row in dt.rows         sw.write(vbnewline)         dim column datacolumn         each column in dt.columns             if not row(column.columnname) nothing                 sw.write(row(column).tostring() + vbtab)             else                 sw.write(string.empty + vbtab)             end if         next column     next row      response.clear()     response.contenttype = "application/vnd.ms-excel"     response.addheader("content-disposition", "attachment;filename=datatable.xls")     response.output.write(sw.tostring())     response.flush()     system.web.httpcontext.current.response.flush()     system.web.httpcontext.current.response.suppresscontent = true     system.web.httpcontext.current.applicationinstance.completerequest() end sub 

Comments

Popular posts from this blog

node.js - Mongoose: Cast to ObjectId failed for value on newly created object after setting the value -

gradle error "Cannot convert the provided notation to a File or URI" -

python - NameError: name 'subprocess' is not defined -