Check viewstate of your page is it false?
2nd are you binding your treeview everytime when page is loading or Init? ideally if viewstate is true of your page you shouldn't bind data to treeview every time. Bind it on first page load i.e.
if(!IsPostBack)
tvTaxon.DataSource = DataSource...
FYI:
There are three basic phases of every server control happens every time:
Init
Load
Render
if there is any data control TreeView in your case then databind also happens. Most of the data control adds datasource to viewstate when first time you supply data to it, on subsequent postbacks TreeView extracts data from viewstate thats why we don't need to pass it again-n-again.
If you are sure you are not binding your TreeView everytime time please add the code where you are binding your treeview to the SQL datasource. the code should include the event name in which you are assigning the source for example Page_load, the code should also show if there is any if statment prior to assigning datasource.
ideally you should add all code i.e. markup of aspx + code where you are binding data + code where you are evaluating check statements like you added in the first comment.
Thanks,
Hemant