在使用Telerik公司的RadTreeView控件时,再异步调用WebService时,关于嵌套循环调用导致的阻塞现象,后来使用一次获取WS数据,加载后通过LINQ来分类操作,避免了此种情况。
#region 点击县名后,动态加载该县的所有实时险情类别信息及类别下的所有实时险情 RadTreeViewItem selectedItem = null; //选中时动态绑定 private void RadTreeView1_Selected(object sender,Telerik.Windows.RadRoutedEventArgs e) { RadTreeView source = sender as RadTreeView; selectedItem = source.SelectedItem as RadTreeViewItem; if (!selectedItem.HasItems) { getTreeSoapClient client = new getTreeSoapClient(); //实时险情列表 client.getSSQXListCompleted += new EventHandler<getSSQXListCompletedEventArgs>(client_getSSQXListCompleted); client.getSSQXListAsync(selectedItem.Header.ToString().Trim()); } } //实时险情类别 RadTreeViewItem targetTreeNode = null; //实时险情名称 void client_getSSQXListCompleted(object sender,getSSQXListCompletedEventArgs e) { IList<SSXQ> xqList = e.Result; List<string> type = xqList.Select(p => p.灾情类型).distinct().ToList(); foreach (string s in type) { targetTreeNode = new RadTreeViewItem(); targetTreeNode.Header = s; targetTreeNode.IsExpanded = true; selectedItem.Items.Add(targetTreeNode); IList<SSXQ> list = (from li in xqList where li.灾情类型 == s select li ).ToList<SSXQ>(); if (list.Count > 0) { foreach (SSXQ xq in list) { RadTreeViewItem objTreeNode = new RadTreeViewItem(); objTreeNode.Header = xq.图片标题; objTreeNode.Tag = xq.OBJECTID; objTreeNode.DataContext = xq; objTreeNode.IsExpanded = true; targetTreeNode.Items.Add(objTreeNode); } } } //设置拖拽操作 //objTreeNode.Drag(objTreeNode.Header,null,(s,ex) => //{ // Point p = ex.GetPosition(this.container); // if (p.X > 0 && p.X < this.container.Width && p.Y > 0 && p.Y < this.container.Height) // this.container.Children.Add(new RadTreeViewItem() { Header = (s as ContentControl).Content.ToString() }); //}); } #endregion
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。