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..

  1. 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 
  2. 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

Popular posts from this blog

apache - Remove .php and add trailing slash in url using htaccess not loading css -

inno setup - TLabel or TNewStaticText - change .Font.Style on Focus like Cursor changes with .Cursor -