用户控件
<%@ Control Language="C#" AutoEventWireup="true" CodeBehind="WebUserControl2.ascx.cs" Inherits="MultiDropdownSample.WebUserControl2" %>
<script language="javascript" type="text/javascript">
// window.onload = function (ctlId) {// //CloseTree(ctlId);// debugger;// alert("aa");// }// function OpenTree(ctlId) {// var obj = document.getElementById(ctlId + "TreeView1");// obj.style.visibility = "hidden";// obj.style.height = "0px";// }function OpenTree(ctlId) {
var Panel = document.getElementById(ctlId + "PanelTree");
Panel.style.height = "500px";// alert("kai");// var lstBox = document.getElementById(ctlId + "DDList");// var div = document.getElementById("divTree");// div.style.display = '';var obj = document.getElementById(ctlId + "TreeView1");
if (obj.style.visibility == "visible") {
CloseTree(ctlId);
}
else {obj.style.visibility = "visible";obj.style.height = "100px";}
}
function CloseTree(ctlId) {//debugger;var obj = document.getElementById(ctlId + "TreeView1");
obj.style.visibility = "hidden";obj.style.height = "0px";// if (obj.style.visibility == "visible") {// CloseListBox(ctlId);// }// else {// obj.style.visibility = "visible";// obj.style.height = "100px";// }}function CloseListBox(ctlId) {var panel = document.getElementById(ctlId + "Panel2");
var tabl = document.getElementById(ctlId + "Table2");
// var lstBox = document.getElementById(ctlId + "DDList");var lstBox = document.getElementById(ctlId + "PanelTree");
lstBox.style.visibility = "hidden";lstBox.style.height = "0px";panel.style.height = tabl.style.height;
}
function OnTreeNodeChecked(ctlId) {var ele = event.srcElement;if(ele.type=='checkbox')
{var childrenDivID = ele.id.replace('CheckBox','Nodes');
var div = document.getElementById(childrenDivID);if(div==null)return;
var checkBoxs = div.getElementsByTagName('INPUT');
for(var i=0;i<checkBoxs.length;i++)
{if(checkBoxs[i].type=='checkbox')
checkBoxs[i].checked=ele.checked;
}
}
//点?击÷复′选?框ò时±触¥发¢事?件tvar o = window.event.srcElement;if (o.tagName == "INPUT" && o.type == "checkbox") {
__doPostBack("", "");
}
}
</script>
<script language="javascript" type="text/javascript">
//checkbox点?击÷事?件t
function OnCheckEvent(ctlID)
{var objNode = event.srcElement;if(objNode.tagName != "INPUT" || objNode.type != "checkbox")
return;//获?得?当±前°树÷结á点?var ck_ID = objNode.getAttribute("ID");
var node_ID = ck_ID.substring(0,ck_ID.indexOf("CheckBox")) + "Nodes";
var curTreeNode = document.getElementById(node_ID);//级?联a选?择?SetChildCheckBox(curTreeNode,objNode.checked);SetParentCheckBox(objNode);
//点?击÷复′选?框ò时±触¥发¢事?件tvar o = window.event.srcElement;
if (o.tagName == "INPUT" && o.type == "checkbox") {
__doPostBack("", "");
}
}
//子ó结á点?字?符?串?var childIds = "";
//获?取?子ó结á点?ID数y组éfunction GetChildIdArray(parentNode)
{if (parentNode == null)
return;var childNodes = parentNode.children;var count = childNodes.length;for(var i = 0;i < count;i ++)
{var tmpNode = childNodes[i];if(tmpNode.tagName == "INPUT" && tmpNode.type == "checkbox")
{childIds = tmpNode.id + ":" + childIds;}
GetChildIdArray(tmpNode);
}
}
//设è置?子ó结á点?的?checkboxfunction SetChildCheckBox(parentNode,checked)
{if(parentNode == null)
return;var childNodes = parentNode.children;var count = childNodes.length;for(var i = 0;i < count;i ++)
{var tmpNode = childNodes[i];if(tmpNode.tagName == "INPUT" && tmpNode.type == "checkbox")
{tmpNode.checked = checked;
}
SetChildCheckBox(tmpNode,checked);
}
}
//设è置?父?结á点?的?checkboxfunction SetParentCheckBox(childNode)
{if(childNode == null)
return;var parent = childNode.parentNode;if(parent == null || parent == "undefined")
return;do{parent = parent.parentNode;
}
while (parent && parent.tagName != "DIV");
if(parent == "undefined" || parent == null)
return;var parentId = parent.getAttribute("ID");
var objParent = document.getElementById(parentId);childIds = "";GetChildIdArray(objParent);
//判D断?子ó结á点?状′态?childIds = childIds.substring(0,childIds.length - 1);var aryChild = childIds.split(":");
var result = false;
//当±子ó结á点?的?checkbox状′态?有D一?个?为atrue,?其?父?结á点?checkbox状′态?即′为atrue,否?则ò为afalsefor(var i in aryChild)
{var childCk = document.getElementById(aryChild[i]);if(childCk.checked)result = true;}
parentId = parentId.replace("Nodes","CheckBox");
var parentCk = document.getElementById(parentId);if(parentCk == null)
return;if(result)parentCk.checked = true;elseparentCk.checked = false;
SetParentCheckBox(parentCk);
}
</script>
<%--<asp:panel id="Panel2" Height="1px" runat="server" Width="160px" BackColor="White">--%>
<TABLE id="Table2" style="TABLE-LAYOUT: fixed; HEIGHT: 24px" cellSpacing="0" borderColorDark="#cccccc"
cellPadding="0" width="100%" borderColorLight="#7eb3e3" border="1" runat="server">
<TR id="rowDD" style="HEIGHT: 15px" runat="server">
<TD noWrap>
<asp:Label id="DDLabel" style="CURSOR: default" runat="server" Width="100%" ToolTip="" Font-Size="Smaller"
Font-Names="Arial" BorderColor="Transparent" BorderStyle="None" height="15px"></asp:Label></TD>
<TD id="colDDImage" style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; PADDING-BOTTOM: 0px; PADDING-TOP: 0px; BACKGROUND-COLOR: #7eb3e3"
width="20" background="Image/DDImage.bmp" runat="server"></TD>
</TR>
</TABLE>
<asp:Panel ID="PanelTree" runat="server" Width="100%">
<div style="Z-INDEX: 9999; POSITION: absolute" >
<asp:TreeView ID="TreeView1" runat="server" Width="100%" ShowCheckBoxes="All">
</asp:TreeView>
</div>
</asp:Panel>
<%--</asp:panel> --%>
后台cs代码
using System;using System.Collections.Generic;using System.Linq;using System.Web;using System.Web.UI;using System.Web.UI.WebControls;using System.Collections;namespace MultiDropdownSample{public partial class WebUserControl2 : System.Web.UI.UserControl
{// protected System.Web.UI.WebControls.TreeView DDList;private string _SelectedText;
#region Public properties/// <summary>/// Get and Set the width of the Dropdown
/// </summary>
//public double ListWidth
//{// get { return Panel2.Width.Value; }// set { Panel2.Width = (Unit)value; }//}/// <summary>
/// Gets arraylist of selected values
/// </summary>
public ArrayList SelectedValues
{get{ArrayList selectedValues = new ArrayList();
//foreach (System.Web.UI.WebControls.ListItem li in TreeView1.CheckedNodes)//{// if (li.Selected)// { selectedValues.Add(li.Value); }//}foreach (TreeNode item in TreeView1.CheckedNodes)
{if (item.Checked){selectedValues.Add(item.Value);
}
}
return selectedValues;}
}
/// <summary>/// Gets arraylist of selected texts
/// </summary>
public ArrayList SelectedTexts
{get{ArrayList selectedTexts = new ArrayList();
//foreach (System.Web.UI.WebControls.ListItem li in DDList.Items)//{// if (li.Selected)// { selectedTexts.Add(li.Text); }//}foreach (TreeNode item in TreeView1.CheckedNodes)
{if (item.Checked){selectedTexts.Add(item.Text);
}
}
return selectedTexts;}
}
/// <summary>/// Gets the selected text , the items are separated by comma
/// </summary>
public string SelectedText
{get{string selText = string.Empty;
//foreach (System.Web.UI.WebControls.ListItem li in DDList.Items)//{// if (li.Selected)// { selText += li.Text + ","; }//}foreach (TreeNode item in TreeView1.CheckedNodes)
{if (item.Checked){selText += item.Text + ",";}
}
if (selText.Length > 0)selText = selText.Length > 0 ? selText.Substring(0, selText.Length - 1) : selText;
return selText;}
set{_SelectedText = value;DDLabel.Text = _SelectedText;
DDLabel.ToolTip = _SelectedText;
}
}
/// <summary>/// Gets the selected items of the list
/// </summary>
public ArrayList SelectedItems
{get{ArrayList selectedItems = new ArrayList();
//foreach (System.Web.UI.WebControls.ListItem li in DDList.Items)//{// if (li.Selected)// { selectedItems.Add(li); }//}foreach (TreeNode item in TreeView1.CheckedNodes)
{if (item.Checked){selectedItems.Add(item);
}
}
return selectedItems;}
set{ArrayList selectedItems = value;
string selText = string.Empty;
// Deselect all the selected items//foreach (System.Web.UI.WebControls.ListItem li in DDList.Items)//{ li.Selected = false; }foreach (TreeNode item in TreeView1.CheckedNodes)
{item.Checked = false;}
// Select the items from the list//foreach (System.Web.UI.WebControls.ListItem selItem in selectedItems)//{// System.Web.UI.WebControls.ListItem li = DDList.Items.FindByText(selItem.Text);// if (li != null)// { li.Selected = true; selText += li.Text + ","; }//}foreach (TreeNode selItem in selectedItems)
{TreeNode node = TreeView1.FindNode(Server.HtmlEncode(selItem.Text.Trim()));if (node != null)
{node.Checked = true;selText += node.Text + ",";}
//TreeNode item=this.TreeView1.Nodes.IndexOf(..FindNode(.CheckedNodes..Contains(selItem)}if (selText.Length > 0)selText = selText.Length > 0 ? selText.Substring(0, selText.Length - 1) : selText;
SelectedText = selText;
}
}
/// <summary>/// Gets the list
/// </summary>
public System.Web.UI.WebControls.TreeView TreeViewList
{get { return this.TreeView1; }
set { TreeView1 = TreeViewList; }}
#endregion#region Public methods/// <summary>/// Remove all items in the list
/// </summary>
public void Clear()
{this.TreeView1.Nodes.Clear();// DDList.Items.Clear();
}#endregion#region Private methods/// <summary>/// Set the attributes of the controls
/// </summary>
public void PageInit()
{string ctlID = this.UniqueID + "_";
//TreeView1.Attributes.Add("onchange", "SelectedIndexChanged('" + ctlID + "');");//TreeView1.Attributes.Add("onmouseout", "CloseListBox('" + ctlID + "');");//PanelTree.Attributes.Add("onmouseout", "CloseListBox('" + ctlID + "');");// DDLabel.Attributes.Add("onclick", "OpenListBox('" + ctlID + "');");// colDDImage.Attributes.Add("onclick", "OpenListBox('" + ctlID + "');");//SetTreeNodeAutoSelectParentNodeHandle//TreeView1.Attributes.Add("onclick", "SetTreeNodeAutoSelectParentNodeHandle('" + ctlID + "');");//TreeView1.Attributes.Add("onclick", "OnCheckBoxCheckChanged(event)");DDLabel.Attributes.Add("onclick", "OpenTree('" + ctlID + "');");
colDDImage.Attributes.Add("onclick", "OpenTree('" + ctlID + "');");
TreeView1.Attributes.Add("onmouseover", "OpenTree('" + ctlID + "');");
PanelTree.Attributes.Add("onmouseout", "CloseTree('" + ctlID + "');");
//TreeView1.Attributes.Add("OnClick", "OnTreeNodeChecked('" + ctlID + "');");TreeView1.Attributes.Add("onclick", "OnCheckEvent('" + ctlID + "');");
// this.Attributes.Add("onload", "CloseTree('" + ctlID + "');");if (!Page.ClientScript.IsStartupScriptRegistered(this.GetType(), "onloadjs"))
Page.ClientScript.RegisterStartupScript(this.GetType(), "onloadjs",
"window.onload = function() { CloseTree('" + ctlID + "');};", true);
}
/// <summary>/// Page load event
/// </summary>
/// <param name="sender"></param>/// <param name="e"></param>private void Page_Load(object sender, System.EventArgs e)
{if (!Page.IsPostBack){PageInit();
TreeView1.Height = 0;
if (TreeView1.Nodes.Count > 0)DDLabel.Text = TreeView1.Nodes[0].Text;
elseDDLabel.Text = string.Empty;
}
else{ // set the selected text and tooltip
DDLabel.Text = SelectedText;DDLabel.ToolTip = SelectedText;
}
string ctlID = this.UniqueID + "_";
}
#endregion}}
调用示例
webForm.aspx页面
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="WebForm3.aspx.cs" Inherits="MultiDropdownSample.WebForm3" %>
<%@ Register TagPrefix="uc1" TagName="WebUserControl2" Src="WebUserControl2.ascx" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title></title>
</head>
<body>
<form id="form1" runat="server" >
<div height="55px">
<uc1:WebUserControl2 id="MultiSelectDropDown1" runat="server"></uc1:WebUserControl2>
</div>
<asp:DropDownList ID="DropDownList1" runat="server">
</asp:DropDownList>
</form>
</body>
</html>
pageload 事件
protected void Page_Load(object sender, EventArgs e)
{if (!Page.IsPostBack){MultiSelectDropDown1.Clear();
//MultiSelectDropDown1.List.Items.Add(new System.Web.UI.WebControls.ListItem("Apple", "1"));//MultiSelectDropDown1.List.Items.Add(new System.Web.UI.WebControls.ListItem("Grapes", "2"));//MultiSelectDropDown1.List.Items.Add(new System.Web.UI.WebControls.ListItem("Orange", "3"));//MultiSelectDropDown1.List.Items.Add(new System.Web.UI.WebControls.ListItem("Strawberry", "4"));//MultiSelectDropDown1.List.Items.Add(new System.Web.UI.WebControls.ListItem("Water Melon", "5"));//MultiSelectDropDown1.TreeViewList.Nodes.Add(new TreeNode { Text = "1" });TreeNode userTools = new TreeNode();
userTools.Text = "User Tools";MultiSelectDropDown1.TreeViewList.Nodes.Add(userTools);
TreeNode userTool1 = new TreeNode();
userTool1.Text = "User Tool 1";MultiSelectDropDown1.TreeViewList.Nodes[MultiSelectDropDown1.TreeViewList.Nodes.IndexOf(userTools)].ChildNodes.Add(userTool1);
// tree.Nodes[0].Nodes.Add(userTool1); // This also worksTreeNode userTool2 = new TreeNode();
userTool2.Text = "User Tool 2";MultiSelectDropDown1.TreeViewList.Nodes[MultiSelectDropDown1.TreeViewList.Nodes.IndexOf(userTools)].ChildNodes[userTools.ChildNodes.IndexOf(userTool1)].ChildNodes.Add(userTool2);
// tree.Nodes[0].Nodes[0].Nodes.Add(userTool2); // This also works}}