1.產生一個TREEVIEW,節點一次性全部載入
/// <summary>
/// 初始化欄目樹
/// </summary>
private void initTree()
{
//得到根欄目
Channel rootChannel = CmsHttpContext.Current.RootChannel;
int dc = rootChannel.Channels.Count;
//清空原有的分類樹
ChannelView.Nodes.Clear();
TreeNode rootNode = new TreeNode();
rootNode.Text = "欄目樹";
rootNode.Value = rootChannel.Guid;
//rootNode.NavigateUrl = "~/Module/ChannelInfoManage/ChannelManage.aspx?Guid=" + rootChannel.Guid;
rootNode.Target = "ChannelManage";
//調用函數 用於產生子節點
CreateTree(rootChannel, rootNode);
//ChannelView為在ASPX裡聲明的一個TREEVIEW對象
ChannelView.Nodes.Add(rootNode);
ChannelView.ExpandDepth = 1;
}
/// <summary>
/// 建立欄目樹
/// </summary>
/// <param name="rootChannel">根欄目</param>
/// <param name="rootNode">根節點</param>
public void CreateTree(Channel rootChannel, TreeNode rootNode)
{
if (rootChannel.Channels.Count > 0 && rootChannel.Channels != null)
{
foreach (Channel subChannel in rootChannel.Channels)
{
TreeNode subNode = new TreeNode();
//TREEVIEW節點中節點的顯示名稱
subNode.Text = subChannel.Name;
//設定節點的值
subNode.Value = subChannel.Guid;
//subNode.NavigateUrl = "~/Module/ChannelInfoManage/ChannelManage.aspx?Guid=" + subChannel.Guid;
subNode.Target = "ChannelManage";
//在節點前面是否顯示複選框
subNode.ShowCheckBox = true;
//擷取一個值,表示複選框是否被選中
subNode.Checked = subChannel.IsHiddenModePublished;
//根節點加入子節點
rootNode.ChildNodes.Add(subNode);
//遞迴調用,產生子節點
CreateTree(subChannel, subNode);
}
}
}
二:TREEVIEW的動態載入產生,點擊某個節點,其下的節點動態產生。
protected void Page_Load(object sender, EventArgs e)
{
if (!Page.IsPostBack)
{
//設定提交按鈕確認屬性
submitButtonInit(submitButton);
//初始化欄目樹
Channel rootChannel = context.RootChannel;
TreeNode rootNode = new TreeNode();
rootNode.Text = rootChannel.Name;
rootNode.Value = rootChannel.Guid;
//設定動態填充節點
rootNode.PopulateOnDemand = true;
//設定節點為摺疊
rootNode.Expanded = false;
//TREEVIEW加入了根節點
ChannelView.Nodes.Add(rootNode);
}
}
/// <summary>
/// 初始化確定按鈕,在用戶端確認某欄目是否被隱藏
/// </summary>
private void submitButtonInit(Button submitButton)
{
submitButton.Attributes.Add("onClick", "return confirm('請確認是否改變當前所選子欄目的隱藏狀態?')");
}
//實現動態填充TREEVIEW的函數
protected void ChannelView_TreeNodePopulate(object sender, TreeNodeEventArgs e)
{
Channel curChannel = null;
ChannelCollection channelCol = null;
curChannel = context.Searches.GetByGuid(e.Node.Value) as Channel;
channelCol = curChannel.Channels;
if (channelCol != null && channelCol.Count > 0)
{
foreach (Channel subChannel in channelCol)
{
TreeNode node = new TreeNode();
node.Text = subChannel.Name;
node.Value = subChannel.Guid;
node.ShowCheckBox = true;
node.Checked = channelOperater.IsChannelHided(subChannel);
node.PopulateOnDemand = true;
node.Expanded = false;
e.Node.ChildNodes.Add(node);
}
}
}
三:捕獲TREEVIEW節點前的複選框是否被選中或取消。
TREEVIEW ChannelView=new TREEVIEW();
ChannelView.CheckedNodes
treeview的CheckedNodes屬性代表了被節點前的複選框選中了的節點集合TREENODECOLLECTION
至於那些取消了本來打鉤的複選框的節點集合
TreeNodeCollection tc = new TreeNodeCollection();
有以下產生:
int i = 0;
protected void ChannelView_TreeNodeCheckChanged(object sender, TreeNodeEventArgs e)
{
if (e.Node.Checked == false)
tc.Add(e.Node);
}