天天看點

兩級關鍵詞,複選框級聯選擇。借助hiddenField

1. 級聯複選框

   關鍵詞分兩級,子級選中時父級自動選中;父級取消選中時子級自動取消選中;

   由于checkboxlist的SelectedIndexChanged事件無法确定目前改變選擇的複選框。是以采用HiddenField輔助完成。将改變

選擇之前選中的複選框value值以逗号隔開存到裡面。

2. 加載頁面時初始化該值

<a></a>

 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.改變選擇時進行相應的操作。

#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 &amp;&amp; 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&amp;&amp;!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

    本文轉自 陳敬(Cathy) 部落格園部落格,原文連結http://www.cnblogs.com/janes/archive/2010/08/10/1796582.html:,如需轉載請自行聯系原作者