vb.net - while filling data grid view using sql reader application getting slow -
i have windows form...i trying fill data grid view using sql datareader,,
while clicking button try fill data grid view..
wrote 1 function filling grid view..
sub filldgv() dgvreleased.rows.clear() dim carid string dim vehicleno string dim driverid string dim krrt integer dim dt integer dim cmd new sqlcommand("ibs_fetchresleasevehicle", con.connect) cmd.commandtype = commandtype.storedprocedure cmd.parameters.add("@locid", sqldbtype.int).value = glocid dr = cmd.executereader while dr.read if dr("tbarcode") dbnull.value carid = "" else carid = dr("tbarcode") end if if dr("plateno") dbnull.value vehicleno = "" else vehicleno = dr("plateno") end if if dr("delecode") dbnull.value driverid = "" else driverid = dr("delecode") end if if dr("krrt") dbnull.value else krrt = dr("krrt") end if if dr("dt") dbnull.value else dt = dr("dt") end if dim row0 string() = {carid, vehicleno, driverid, krrt, dt} dgvreleased.rows.insert(0, row0) end while dr.close() con.disconnect() end sub
then calling function in button click event.here first removing records grid view filling..while coming more records data grid view system getting hang..is there way simple manner..any appreciable..
use
datagridview.rows.addrange
. collect data in list(of datagridviewrow), after loop add them datagridview:sub filldgv() dim listrows new list(of datagridviewrow)() dim cmd = new sqlcommand("ibs_fetchresleasevehicle") cmd.commandtype = commandtype.storedprocedure cmd.connection = con.connect cmd.parameters.add("@locid", sqldbtype.int).value = glocid dim dr = cmd.executereader dim listrows new list(of datagridviewrow)() while dr.read dim dgvrow = new datagridviewrow dim o = {dr("tbarcode").tostring(), dr("plateno").tostring(), dr("delecode").tostring(), if(isdbnull(dr("krrt")), 0, dr("krrt")), if(isdbnull(dr("dt")), 0, dr("dt")) } dgvrow.createcells(o) listrows.add(dgvrow) end while dr.close() con.disconnect() dim savedbool = dgvreleased.allowusertoaddrows dgvreleased.allowusertoaddrows = false dgvreleased.rows.addrange(listrows.toarray()) dgvreleased.allowusertoaddrows = savedbool end sub
use datatable & databinding, populate datatable in background-thread:
sub filldgv() dim dt new datatable dt.columns.add("", gettype(string)) dt.columns.add("", gettype(string)) dt.columns.add("", gettype(string)) dt.columns.add("", gettype(integer)) dt.columns.add("", gettype(integer)) dgvreleased.datasource = dt task.factory.startnew(sub() populate(dt)) ''you can replace last line this: 'dim bgw = new backgroundworker() 'addhandler bgw.dowork, sub() populate(dt) 'bgw.runworkerasync() end sub sub populate(dt datatable) dim cmd = new sqlcommand("ibs_fetchresleasevehicle") cmd.commandtype = commandtype.storedprocedure cmd.connection = con.connect cmd.parameters.add("@locid", sqldbtype.int).value = glocid dim dr = cmd.executereader while dr.read dim o = {dr("tbarcode").tostring(), dr("plateno").tostring(), dr("delecode").tostring(), if(isdbnull(dr("krrt")), 0, dr("krrt")), if(isdbnull(dr("dt")), 0, dr("dt")) } dt.rows.add(o) end while dr.close() con.disconnect() end sub
tip:
instead if
conditions, can use shortly if operator:
so instead:
if isdbnull(dr("tbarcode") carid = 0 else carid = dr("tbarcode") end if
written:
carid = if(isdbnull(dr("tbarcode")), 0, dr("tbarcode"))
thanks @sss: string fields can simply:
carid = dr("tbarcode").tostring()
Comments
Post a Comment