Because it takes a long time to use recursive algorithms when using Treeview to display large-capacity database data, users are required to wait for a long time. So how can we improve the user experience when using Treeview to display large-capacity database data?
This problem is well solved by the user's self-selection method.
The specific method is as follows:
Private void btnopendata_click (Object sender, eventargs E)
{
If (openfiledialog1.showdialog () = dialogresult. OK)
{
// Obtain the data source
Datafilename = openfiledialog1.filename;
String constring = @ "provider = Microsoft. Jet. oledb.4.0; Data Source =" + datafilename;
This. lbltishi. forecolor = color. Red;
This. lbltishi. Text = "the topic Resource Directory is being generated ...... ";
This. Refresh ();
DS. Clear ();
// Ds1.clear ();
Oledbconnection con = new oledbconnection ();
Try
{
Con. connectionstring = constring;
Con. open ();
Oledbcommand cmd = new oledbcommand ();
Cmd. Connection = con;
Cmd. commandtext = "select * From tchannel order by channel_parentid ";
Cmd. commandtype = commandtype. text;
Oledbdataadapter da = new oledbdataadapter (CMD );
Da. Fill (DS );
}
Catch (exception ex)
{
Throw (Ex );
}
Finally
{
Con. Close ();
}
// Generate a level-1 tree directory
Treeview1.nodes. Clear ();
Treenode Tn = new treenode ("All column resources ");
This. treeview1.nodes. Add (TN );
Addtree ("0", TN );
}
}
Private void addtree (string parentid, treenode pnode)
{
// Use dataview to improve user experience, and add the next sub-directory "Please double-click to search for sub-resources (XXXXX)" under all sub-directories of the same level, so that you can expand it by double-clicking.
Dataview dvtree = new dataview (Ds. Tables [0]);
Dvtree. rowfilter = "channel_parentid = '" + parentid + "'";
Foreach (datarowview row in dvtree)
{
Treenode node = pnode. nodes. Add (row ["channel_name"]. tostring ());
Node. nodes. Add ("double-click to search for sub-resources (" + row ["channel_id"]. tostring () + ")");
}
}
Private void treeview1_nodemousedoubleclick_1 (Object sender, treenodemouseclickeventargs E)
{
// Obtain the Treeview from the double-clicked Node
Treeview TD = (Treeview) sender;
// Obtain the current node
Treenode Tn = TD. selectednode;
// Obtain the parent node of the current node
Treenode parenttn = tn. parent;
// Obtain the value of channel_id from "double-click to search for sub-resource (channel_id)" to find all the next nodes with the value of channel_parentid in the database;
Int start = tn. Text. lastindexof ("(");
Int end = tn. Text. lastindexof (")");
Try
{
String channelparentid = tn. Text. substring (start + 1, end-start-1 );
// If the value is found, double-click the node "Please double-click to search for the sub-resource (channel_id.
// Delete the node to add a new subnode.
Tn. Remove ();
Addtree (channelparentid, parenttn );
}
// Otherwise, it is a valid node that has been searched. obtain the corresponding data resource path and query the data table.
Catch (argumentoutofrangeexception ee)
{
// Obtain the data resource path of the current node, and remove "All column resources \" on layer 0 to obtain the real data resource path.
Try
{
This. lblcurdata. Text = tn. fullpath. substring (7 );
String channelid = This. lblcurdata. text;
Bindgrid (channelid, typestring, this. datetimepicker1.value, this. datetimepicker2.value); // query data operations
}
Catch (argumentoutofrangeexception ef)
{
This. lblcurdata. Text = "all columns ";
Bindgrid ("-", typestring, this. datetimepicker1.value, this. datetimepicker2.value );
}
}
}