treeview应用问题,通过id获得节点,出了遍历就没有什么好办法吗 我在生成treeview的时候,每生成一个节点都要通过id获得它的父节点。所以每次遍历开销太大,寻优化的方法 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 在asp.net版里没人回复,转到c#里,各位为答复一下吧,up有分 这是我在Winform里写的一种解决办法,只要在数据中进行一次循环就可以生成全部树节点.private void Form1_Load(object sender, System.EventArgs e){ int PreIDLength=0; TreeNode PreNode=new TreeNode(); dataTable1.Rows.Add(new string[]{"0001","财务部"}); dataTable1.Rows.Add(new string[]{"0002","工程部"}); dataTable1.Rows.Add(new string[]{"00020001","开发1部"}); dataTable1.Rows.Add(new string[]{"00020002","开发2部"}); dataTable1.Rows.Add(new string[]{"000200010001","硬件组"}); dataTable1.Rows.Add(new string[]{"00010001","会计"}); dataTable1.Rows.Add(new string[]{"00010002","出纳"}); dataTable1.Rows.Add(new string[]{"000100020001","出纳一"}); dataTable1.Rows.Add(new string[]{"0001000200010001","出纳1"}); dataTable1.Rows.Add(new string[]{"00010002000100010001","出纳a"}); dataTable1.DefaultView.Sort="Column1"; dataGrid1.DataSource=dataTable1; treeView1.Nodes.Add(PreNode); for(int i=0;i<dataTable1.Rows.Count;i++) { TreeNode trnAdd=new TreeNode(); trnAdd.Text=dataTable1.DefaultView[i][1].ToString().Trim(); trnAdd.Tag=dataTable1.DefaultView[i]; int IDLength=dataTable1.DefaultView[i][0].ToString().Trim().Length; for(int j=0;j<=(PreIDLength-IDLength)/4;j++) { PreNode=PreNode.Parent; } PreNode.Nodes.Add(trnAdd); PreIDLength=dataTable1.DefaultView[i][0].ToString().Trim().Length; PreNode=trnAdd; }}要点:1.使用ID表示树的层次关系,因此对ID和数据有比较严格的要求;2.首先必须对数据按照ID排序,确定子节点紧跟着父节点.否则不能生成正确的树结构;3.使用两个变量保存上个节点的ID长度和上个节点,以对后续数据判断.这种方法还是有一点限制的,另外数据设计不大符合范式的要求. 多线程操作问题 想开发个可编程的程序,如何弄呢? 初学WPF,一个定制控件,求助 程序打包的问题 在winform中的DATAGRID绑定数据后,如何设置列宽?? 200分问一个在DataGrid中插入一行的奇怪问题.请高手帮忙啊,尤其是刚选出的专家啊. 关于listview自动更新问题 ASP.NET WEB开发怎么从网页打开另一个网页并获取数据呢? 怎樣更快地找到找到自己需要的資料 如何在DataGrid控件列中加入我想要的其他控件,比如CheckBox? 这样的效果是如何实现的? 我写的断点续传的程序为什么速度很慢?
private void Form1_Load(object sender, System.EventArgs e)
{
int PreIDLength=0;
TreeNode PreNode=new TreeNode(); dataTable1.Rows.Add(new string[]{"0001","财务部"});
dataTable1.Rows.Add(new string[]{"0002","工程部"});
dataTable1.Rows.Add(new string[]{"00020001","开发1部"});
dataTable1.Rows.Add(new string[]{"00020002","开发2部"});
dataTable1.Rows.Add(new string[]{"000200010001","硬件组"});
dataTable1.Rows.Add(new string[]{"00010001","会计"});
dataTable1.Rows.Add(new string[]{"00010002","出纳"});
dataTable1.Rows.Add(new string[]{"000100020001","出纳一"});
dataTable1.Rows.Add(new string[]{"0001000200010001","出纳1"});
dataTable1.Rows.Add(new string[]{"00010002000100010001","出纳a"});
dataTable1.DefaultView.Sort="Column1";
dataGrid1.DataSource=dataTable1;
treeView1.Nodes.Add(PreNode);
for(int i=0;i<dataTable1.Rows.Count;i++)
{
TreeNode trnAdd=new TreeNode();
trnAdd.Text=dataTable1.DefaultView[i][1].ToString().Trim();
trnAdd.Tag=dataTable1.DefaultView[i];
int IDLength=dataTable1.DefaultView[i][0].ToString().Trim().Length;
for(int j=0;j<=(PreIDLength-IDLength)/4;j++)
{
PreNode=PreNode.Parent;
}
PreNode.Nodes.Add(trnAdd);
PreIDLength=dataTable1.DefaultView[i][0].ToString().Trim().Length;
PreNode=trnAdd;
}
}要点:
1.使用ID表示树的层次关系,因此对ID和数据有比较严格的要求;
2.首先必须对数据按照ID排序,确定子节点紧跟着父节点.否则不能生成正确的树结构;
3.使用两个变量保存上个节点的ID长度和上个节点,以对后续数据判断.这种方法还是有一点限制的,另外数据设计不大符合范式的要求.