两级关键词,复选框级联选择。借助hiddenField

1. 级联复选框
   关键词分两级,子级选中时父级自动选中;父级取消选中时子级自动取消选中;
   由于checkboxlist的SelectedIndexChanged事件无法确定当前改变选择的复选框。因此采用HiddenField辅助完成。将改变
选择之前选中的复选框value值以逗号隔开存到里面。

2. 加载页面时初始化该值
   

ExpandedBlockStart.gif 代码
  protected   void  Page_Load( object  sender, EventArgs e)
    {
    
if  (Request.QueryString[ " id " ==   null   ||  )
            {
                
this .hidCheckbox.Value  =   "" ;
            }
             
if  (Request.QueryString[ " id " !=   null  )
            {
            。。。。
            
if  (dr1[ " KID " ].ToString().Equals(CheckBoxList_keyword.Items[i].Value.ToString()))
                        {
                            CheckBoxList_keyword.Items[i].Selected 
=   true ;
                            hidCheckbox.Value 
+=   "   "   +  dr[ " KID " ].ToString()  +   " , " ;
                        }

            。。。。
            }
            
    }

 

   
3.改变选择时进行相应的操作。
   

ExpandedBlockStart.gif 代码
#region  关键词级联选择
    
    
protected   void  CheckBoxList_keyword_SelectedIndexChanged( object  sender, EventArgs e)
    {
        
string  sOld  =   this .hidCheckbox.Value;
        
foreach  (ListItem item  in  CheckBoxList_keyword.Items)
        {
            
string  sql  =   " select FirstID,KID from ServiceKey where KID=' "   +  item.Value  +   " ' " ;
            SqlDataReader dr 
=  db.GetReader(sql);
            
string  ChildID  =   "" ; // 子关键词
             string  ParentID  =   "" ; // 父关键词
              if  (dr.Read())
            {
                ChildID 
=  dr[ " KID " ].ToString();
                ParentID 
=  dr[ " FirstID " ].ToString();
            }
            dr.Close();
            
if  (ChildID  ==  ParentID) // 当前为父关键词            {
                 string  childs  =   " , " ;
                
if  ( ! item.Selected  &&  sOld.Contains(ChildID.Trim () + " , " )) // 由选中变为不选中
                {
                    sql 
=   " select FirstID,KID from ServiceKey where FirstID=' "   +  item.Value  +   " ' and 
FirstID != KID " ;
                    dr  =  db.GetReader(sql);
                    
while  (dr.Read())
                    {
                        childs 
+=  dr[ " KID " ].ToString()  +   " , " ;
                    }
                    dr.Close();
                    
if  (childs  !=   " , " )
                    {
                        
foreach  (ListItem child  in  CheckBoxList_keyword.Items)
                        {
                            
if  (childs.Contains ( " , " + child .Value .Trim () + " , " ))
                            {
                                child.Selected 
=   false ; // 子关键词自动变为未选中
                            }
                        }
                    }
                }
            }
            
else // 当獭?前°为a子哩?关?键ü词洙?
            {
                
if  (item.Selected &&! sOld .Contains (ChildID )) // 由未选中变为选中
                {
                    
foreach  (ListItem parent  in  CheckBoxList_keyword.Items)
                    {
                        
if  (parent.Value.ToString()  ==  ParentID)
                        {
                            parent.Selected 
=   true ; // 父关键词自动选中                        }
                    }
                }
            }
        }
        
// 重新构造该字符串
         string  sNew  =   "" ;
        
foreach  (ListItem li  in  CheckBoxList_keyword.Items)
        {
            
if  (li.Selected)
                sNew 
+=   "   "   +  li.Value  +   " , " ;
        }
        
this .hidCheckbox.Value  =  sNew;
    }
    
#endregion

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值