silverlight中创建checkboxList

最近使用silverlight做了一个小程序,之所以使用silverlight是因为之前没有接触过这玩意,再加上项目组对我使用什么技术没有要求,

所以我选择了使用新的技术:Silverlight.一切从头开始啊。

在上一篇文章中我写了silverlight+webservice对数据库的访问,今天我要写的是如何在Silverlight中创建并使用CheckBoxList呢?

如何使用创建的这个CheckBoxList控件和数据库进行交互呢?OK,带着这些问题,我们开始快乐的旅行:

 

专题示例说明:我的数据库中有一个表:模块表。表中对应的字段:ID(主键),ModelName(模块名称)。

图片一对应的是职场中对应的角色名称、角色对应的权限、该角色是否拥有最高的操作权限以及最基本的操作:

当我点击"修改按钮"时,我希望在弹出来的子窗体中显示该SelectedItem的信息,如图二所示:

                                                         图一

当我选中"编号"是"4"的记录时,弹出相应的子窗口,并把对应的权限在CheckBoxList中勾选出来,OK,项目描述完毕。

                       

                                             图二

接下来就要看具体怎么实现了,精彩还在后面啊。

 

项目实现:

  

首先写一个实体类:

     public class gb_modelModel
    {
        private string id;
        public virtual string ID
        {
            get { return id; }
            set { id = value; }
        }

        private string modelName;
        public virtual string ModelName
        {
            get { return modelName; }
            set { modelName = value; }
        }

        private string desModel;
        public virtual string DesModel
        {
            get { return desModel; }
            set { desModel = value; }
        }
        /// <summary>
        /// 用于子页面的选中
        /// </summary>
        private bool isSelected;
        public virtual bool IsSelected
        {
            get { return isSelected; }
            set { isSelected = value; }
        }
    }

父页面"修改"按钮事件: 

     

GH_Roles_Child roleChild;

        /// <summary>
        /// 更新角色
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void btn_upt_Click(object sender, RoutedEventArgs e)
        {
            gh_RoleModel roleModel = (gh_RoleModel)dataGrid1.SelectedItem;
            roleChild = new GH_Roles_Child(roleModel.RoleID,roleModel.RoleName,roleModel.RoleQX,roleModel.SuperID);
            roleChild.Title = "角色信息";
            roleChild.Show();
            roleChild.Closed += new EventHandler(roleChild_Closed);
        }

        void roleChild_Closed(object sender, EventArgs e)
        {
            if (roleChild.DialogResult == true)
            {
                IEnumerable<gb_modelModel> list = (IEnumerable<gb_modelModel>)roleChild.checkBoxList1.ItemsSource;
                IEnumerable<gb_modelModel> selectedList = list.Where(a => a.IsSelected == true);
                //"update SYS_ROLE set QXM='"+va[0]+"',ZGQX="+va[1]+" where ID="+va[2]+"";

                gh_RoleModel gh_Role = new gh_RoleModel();
                //获取权限码
                foreach (var p in selectedList)
                {
                    if (p.IsSelected == true)
                    {
                        gh_Role.RoleQX += p.ID+",";
                    }
                }
                gh_Role.RoleID = roleChild.OKButton.Tag.ToString();  //主键
                gh_Role.SuperID = roleChild.radioButton1.IsChecked == true ? "1" : "0";  //最高权限
                string roleInfo = gh_Role.RoleID + "|" + gh_Role.RoleQX + "|" + gh_Role.SuperID;

                client.uptRoleCompleted += new EventHandler<GH_ServiceReference.uptRoleCompletedEventArgs>(client_uptRoleCompleted);
                client.uptRoleAsync(roleInfo);
            }
        }

        void client_uptRoleCompleted(object sender, GH_ServiceReference.uptRoleCompletedEventArgs e)
        {
            if (e.Error == null)
            {
                MessageBox.Show("修改成功");
                client.GetRolesCompleted += new EventHandler<GH_ServiceReference.GetRolesCompletedEventArgs>(client_GetRolesCompleted);
                client.GetRolesAsync();
            }
        }

       

子窗口:

   xaml:

       <TextBlock Height="23" HorizontalAlignment="Left" Margin="65,61,0,0" Name="textBlock2" Text="角色模块" VerticalAlignment="Top" />

       <ListBox Height="111" HorizontalAlignment="Left" Margin="131,61,0,0" x:Name="checkBoxList1" VerticalAlignment="Top" Width="204" >
            <ListBox.ItemsPanel>
                <ItemsPanelTemplate>
                    <controlsToolkit:WrapPanel Orientation="Vertical" Height="100" />
                </ItemsPanelTemplate>
            </ListBox.ItemsPanel>
            <ListBox.ItemTemplate>
                <DataTemplate>
                    <CheckBox IsChecked="{Binding IsSelected,Mode=TwoWay}" x:Name="chk" Height="16" ><!--IsSelected用于标记是否选中-->
                        <TextBlock Text="{Binding ModelName}" FontSize="13"  />
                    </CheckBox>
                </DataTemplate>
            </ListBox.ItemTemplate>
        </ListBox>

 

xaml.cs:

        //创建webservice的服务实例名client

        GH_ServiceReference.GH_serviceSoapClient client = new GH.GH_ServiceReference.GH_serviceSoapClient();
        public GH_Roles_Child()
        {
            InitializeComponent();
        }

        string moName = "";  //变量用于记忆父页面传递过来的值modelName,以便进行设置是否选中
        public GH_Roles_Child(string id,string roleName,string modelName,string superRole)  //重载构造函数
        {
            InitializeComponent();

            OKButton.Tag = id;
            textBox1.Text = roleName;

            client.getModelsCompleted += new EventHandler<GH_ServiceReference.getModelsCompletedEventArgs>(client_getModelsCompleted);  //获取所有模块信息
            client.getModelsAsync();

            moName = modelName;

        }
        /// <summary>
        /// 返回控件是否被选中
        /// </summary>
        /// <param name="s"></param>
        /// <returns></returns>
        private bool getModelChecked(string s)
        {
            string[] mName = moName.Split(',');
            for (int i = 0; i < mName.Length;i++ )
            {
                if (s.Equals(mName[i]))  //如果该checkBoxList1列表中有和父页面传递过来的值相同的模块项
                {
                    return true;  //选中
                }
            }
            return false;   
        }
        /// <summary>
        /// 获取所有的模块信息,并选中父页面显示的模块
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        void client_getModelsCompleted(object sender, GH_ServiceReference.getModelsCompletedEventArgs e)
        {
            if (e.Error == null)
            {
                XmlReader reader = XmlReader.Create(new StringReader(e.Result.ToString()));
                XDocument doc = XDocument.Load(reader);
                var model = from item in doc.Descendants("models")
                            select new gb_modelModel()
                            {
                                ID = (string)item.Element("modelID"),
                                ModelName = (string)item.Element("modelName"),
                                IsSelected = (bool)getModelChecked((string)item.Element("modelName"))   //判断是否选中,并赋值给IsSelected
                            };

                checkBoxList1.ItemsSource = model.ToList();
                //checkBoxList1.DisplayMemberPath = "ModelName";   //不能同时在代码中设置DisplayMemberPath属性又在前台页面设计使用ItemTemplate属性
                checkBoxList1.UpdateLayout();
            }
        }

 

 

posted @ 2012-09-24 17:29  jsping68  阅读(2058)  评论(1编辑  收藏  举报