zoukankan      html  css  js  c++  java
  • 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();
                }
            }

  • 相关阅读:
    (转)很简短,但读完你会感触良多!
    (转)让 win8 快速通过认证的5个提示
    WPF 资源路径解析
    47、SimpleOrientationSensor
    45、SplashScreen
    让IE6也支持position:fixed
    utf8编码引起js输出中文乱码的解决办法(实用)
    javascript的currying函数
    sicily 1036. Crypto Columns
    sicily 6774. Buying Mortadella
  • 原文地址:https://www.cnblogs.com/jsping/p/2700399.html
Copyright © 2011-2022 走看看