silverlight 如何操作 带 checkbox的 treeview

    技术2022-05-20  28

    关于在silverlight 中添加 带有 checkbox 的treeview 的方法,我是参考了这个博客的做法:

    http://www.cnblogs.com/daizhj/archive/2009/01/08/1372088.html

     

     

    用wcf服务取出数据库的父子节点,然后绑定 ,wcf服务如下:

    public class car_info { public string m_id { get; set; } public string m_lat { get; set; } public string m_lng { get; set; } public string m_cards { get; set; } public string m_speed { get; set; } public string m_direction { get; set; } public string m_simid { get; set; } } [ServiceContract(Namespace = "")] [AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Allowed)] public class DBService2 { [OperationContract] public string executeSql(string strSql) { string connectionString = System.Configuration.ConfigurationSettings.AppSettings["DbServiceConnectionString"]; SqlConnection conn = new SqlConnection(connectionString); conn.Open(); SqlCommand cmd = new SqlCommand(); cmd.Connection = conn; cmd.CommandText = strSql; string result = cmd.ExecuteScalar().ToString(); conn.Close(); return result; } // 在此处添加更多操作并使用 [OperationContract] 标记它们 [OperationContract] public List<car_info> getinfo(string[] carid) { List<car_info> Car_info = new List<car_info>(); string connectionString = System.Configuration.ConfigurationSettings.AppSettings["DbServiceConnectionString"]; SqlConnection conn = new SqlConnection(connectionString); conn.Open(); for (int i = 0; i < carid.Count(); i++) { string sql = "select a.carid carid,carno,simno,lo,la,speed,direction from tPosition a,tcar b where a.carid=b.carid and a.positionid =(select max(positionid) from tPosition where carid=a.carid )and b.carno='" + carid[i]+"'"; SqlCommand cmd1 = new SqlCommand(sql, conn); SqlDataReader myReader = cmd1.ExecuteReader(); while (myReader.Read()) { /* Car_info.m_id = (string)myReader["carid"]; Car_info.m_cards = (string)myReader["carno"]; Car_info.m_simid = (string)myReader["simno"]; Car_info.m_lng=(string)myReader["lo"]; Car_info.m_lat = (string)myReader["la"]; Car_info.m_speed = (string)myReader["speed"]; Car_info.m_direction = (string)myReader["direction"];*/ Car_info.Add(new car_info() { m_id = Convert.ToString(myReader["carid"]), m_cards = (string)myReader["carno"], m_simid = Convert.ToString(myReader["simno"]), m_lng = Convert.ToString(myReader["lo"]), m_lat = Convert.ToString(myReader["la"]), m_speed = Convert.ToString(myReader["speed"]), m_direction = Convert.ToString(myReader["direction"]) }); } myReader.Close(); } conn.Close(); return Car_info; } }

     

    然后在客户端调用,绑定节点,代码如下

    DateServiceClient dataServiceClient = new DateServiceClient(); ObservableCollection<ForumInfo> forumList = new ObservableCollection<ForumInfo>(); DBService2Client getinfo = new DBService2Client(); ObservableCollection<car_info> CarInfo = new ObservableCollection<car_info>(); public MainPage() { InitializeComponent(); dataServiceClient.GetForumDataCompleted += new EventHandler<GetForumDataCompletedEventArgs>(dataServiceClient_GetForumDataCompleted); dataServiceClient.GetForumDataAsync(); } private void button1_Click(object sender, RoutedEventArgs e) { } private void UserControl_Loaded(object sender, RoutedEventArgs e) { //button1.Content = GlobalParams.staff_id; } void dataServiceClient_GetForumDataCompleted(object sender, GetForumDataCompletedEventArgs e) { try { forumList = e.Result; AddTreeNode(0, null); } catch { throw new NotImplementedException(); } } private void AddTreeNode(int parentID, TreeViewItem treeViewItem) { List<ForumInfo> result = (from forumInfo in forumList where forumInfo.ParendID == parentID select forumInfo).ToList<ForumInfo>(); if (result.Count > 0) { foreach (ForumInfo foruminfo in result) { TreeViewItem objTreeNode = new TreeViewItem(); StackPanel sp = new StackPanel(); CheckBox cb_child = new CheckBox(); CheckBox cb = new CheckBox(); cb.Checked += new RoutedEventHandler((sender, e) => { foreach (TreeViewItem item in objTreeNode.Items) { ((item.Header as StackPanel).Children[0] as CheckBox).IsChecked = true; } }); cb.Unchecked += new RoutedEventHandler((sender, e) => { foreach (TreeViewItem item in objTreeNode.Items) { ((item.Header as StackPanel).Children[0] as CheckBox).IsChecked = false; } }); //--获取checkbox选中的car信息 cb_child.Checked += new RoutedEventHandler((sender, e) => { ObservableCollection<string> Carid = new ObservableCollection<string>(); TreeViewItem treeMainItem = new TreeViewItem(); for (int m = 0; m < TreeOfLife.Items.Count; m++) { treeMainItem = (TreeOfLife.Items[m]) as TreeViewItem; foreach (TreeViewItem item in treeMainItem.Items) { if (((item.Header as StackPanel).Children[0] as CheckBox).IsChecked == true) { Carid.Add(((item.Header as StackPanel).Children[0] as CheckBox).Content.ToString()); } } } getinfo.getinfoCompleted += getinfo_getinfoCompleted; getinfo.getinfoAsync(Carid); }); cb_child.Unchecked += new RoutedEventHandler((sender, e) => { ObservableCollection<string> Carid = new ObservableCollection<string>(); TreeViewItem treeMainItem = new TreeViewItem(); for (int m = 0; m < TreeOfLife.Items.Count; m++) { treeMainItem = (TreeOfLife.Items[m]) as TreeViewItem; foreach (TreeViewItem item in treeMainItem.Items) { if (((item.Header as StackPanel).Children[0] as CheckBox).IsChecked == true) { Carid.Add(((item.Header as StackPanel).Children[0] as CheckBox).Content.ToString()); } } } getinfo.getinfoCompleted += getinfo_getinfoCompleted; getinfo.getinfoAsync(Carid); }); //--获取checkbox选中的car信息结束 if (treeViewItem == null) { cb.Content = foruminfo.ForumName.ToString(); sp.Children.Add(cb); objTreeNode.Header = sp; } else { cb_child.Content = foruminfo.ForumName.ToString(); sp.Children.Add(cb_child); objTreeNode.Header = sp; } //objTreeNode.Header = foruminfo.ForumName.ToString(); objTreeNode.DataContext = foruminfo; //此样式将会添加的所有叶子结点上 objTreeNode.ItemContainerStyle = this.Resources["RedItemStyle"] as Style; //objTreeNode.IsSelected = true; //objTreeNode.IsEnabled = false; //objTreeNode.IsExpanded = true; //添加根节点 if (treeViewItem == null) { TreeOfLife.Items.Add(objTreeNode); } else { treeViewItem.Items.Add(objTreeNode); } AddTreeNode(foruminfo.ForumID, objTreeNode); } } } private void banding(ObservableCollection<car_info> listinfo) { dataGrid1.ItemsSource = listinfo; } private void button1_Click_1(object sender, RoutedEventArgs e) { // ObservableCollection<string> Carid = new ObservableCollection<string>() { "100001", "100002" }; //getinfo.getinfoCompleted += getinfo_getinfoCompleted; //getinfo.getinfoAsync(Carid); } void getinfo_getinfoCompleted(object sender, getinfoCompletedEventArgs e) { try { CarInfo = e.Result; banding(CarInfo); } catch { throw new NotImplementedException(); } }

     

    其中有这几个地方 :

    cb.Checked += new RoutedEventHandler((sender, e) => { foreach (TreeViewItem item in objTreeNode.Items) { ((item.Header as StackPanel).Children[0] as CheckBox).IsChecked = true; } }); cb.Unchecked += new RoutedEventHandler((sender, e) => { foreach (TreeViewItem item in objTreeNode.Items) { ((item.Header as StackPanel).Children[0] as CheckBox).IsChecked = false; } }); //--获取checkbox选中的car信息 cb_child.Checked += new RoutedEventHandler((sender, e) => { ObservableCollection<string> Carid = new ObservableCollection<string>(); TreeViewItem treeMainItem = new TreeViewItem(); for (int m = 0; m < TreeOfLife.Items.Count; m++) { treeMainItem = (TreeOfLife.Items[m]) as TreeViewItem; foreach (TreeViewItem item in treeMainItem.Items) { if (((item.Header as StackPanel).Children[0] as CheckBox).IsChecked == true) { Carid.Add(((item.Header as StackPanel).Children[0] as CheckBox).Content.ToString()); } } } getinfo.getinfoCompleted += getinfo_getinfoCompleted; getinfo.getinfoAsync(Carid); }); cb_child.Unchecked += new RoutedEventHandler((sender, e) => { ObservableCollection<string> Carid = new ObservableCollection<string>(); TreeViewItem treeMainItem = new TreeViewItem(); for (int m = 0; m < TreeOfLife.Items.Count; m++) { treeMainItem = (TreeOfLife.Items[m]) as TreeViewItem; foreach (TreeViewItem item in treeMainItem.Items) { if (((item.Header as StackPanel).Children[0] as CheckBox).IsChecked == true) { Carid.Add(((item.Header as StackPanel).Children[0] as CheckBox).Content.ToString()); } } } getinfo.getinfoCompleted += getinfo_getinfoCompleted; getinfo.getinfoAsync(Carid); });

     

    这里分别对对父子节点的checkbox的checked事件做了相应处理,其中cb.Checked 是实现子节点的全选;cb_child.Checked  是遍历子节点的所有节点值,利用这些节点值生成一个数组,实现动态的调用(这里是动态绑定一个datagrid)。

     


    最新回复(0)