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