小弟刚学习用ComponentArt   Web.UI   这个控件。最近用到其中的TreeViwe(带CheckBox),发现了一个令我郁闷了好几天,又不知道怎么解决的问题,希望用过ComponentArt   Web.UI的高手帮忙解答。 新建一个aspx页面     加入如下代码。 
<script   language="javascript"> 
    function   nodeCheckChanged(node) 
  { 
        var   status   =   "Unchecked";   
        if   (node.Checked)   status   =   "Checked"; 
        document.getElementById("lblClientSideCheck").innerHTML   =   status   +   ":   '"   +   node.ID   +   "'"; 
    } 
</script> <form   id="Form1"   method="post"   runat="server"> 
<table> 
<tr> 
<td   align="center"> 
<COMPONENTART:TREEVIEW   id="tvRoles"   runat="server"   ClientSideOnNodeCheckChanged="nodeCheckChanged"   EnableViewState="true" 
ImagesBaseUrl="images/"   LineImagesFolderUrl="images/lines/"   ShowLines="true"   NodeLabelPadding="3"   ItemSpacing="0"   DefaultImageHeight="16" 
DefaultImageWidth="16"   LineImageHeight="20"   LineImageWidth="19"   NodeEditCssClass="NodeEdit"   HoverNodeCssClass="HoverTreeNode" 
SelectedNodeCssClass="SelectedTreeNode"   NodeCssClass="TreeNode"   CssClass="TreeView"   KeyboardEnabled="true"   NodeEditingEnabled="false" 
DragAndDropEnabled="false"   Width="220"   Height="320"> </COMPONENTART:TREEVIEW> </td> 
<td> <asp:button   id="btOK"   Runat="server"   Text="确定"> </asp:button> 
<td> <asp:label   id="lblClientSideCheck1"   runat="server"   CssClass="hint"> &nbsp; </asp:label> </td> 
</tr> 
</table> 
</form> 
页面中加入一个Button的原因只是为了点击Button时回发服务器。 
cs代码 
private   void   Page_Load(object   sender,   System.EventArgs   e) 

if   (!IsPostBack) 

buildTree(); 

} private   void   buildTree() 

DataSet   dataSet=new   DataSet();       
dataSet=//(...这里假设dataSet已被具有父子关系的数据所赋值     注:最大的根节点的父节点的ID应为null   否则下面的dataSet.Relations会报错) 
dataSet.Relations.Add("NodeRelation",dataSet.Tables[0].Columns["RolesID"],dataSet.Tables[0].Columns["RolesParentID"]); 
foreach(DataRow   dbRow   in   dataSet.Tables[0].Rows) 

if(dbRow.IsNull("RolesParentID")) 

ComponentArt.Web.UI.TreeViewNode   newNode=   CreateNode(dbRow["RolesName"].ToString(),dbRow["RolesID"].ToString(),dbRow["ImagerUrl"].ToString(),true); 
this.tvRoles.Nodes.Add(newNode); 
PopulateSubTree(dbRow,newNode); 



private   void   PopulateSubTree(DataRow   dbRow,   ComponentArt.Web.UI.TreeViewNode   node) 

foreach   (DataRow   childRow   in   dbRow.GetChildRows("NodeRelation")) 
{                                                                         
ComponentArt.Web.UI.TreeViewNode   childNode   =   CreateNode(childRow["RolesName"].ToString(),dbRow["RolesID"].ToString(),dbRow["ImagerUrl"].ToString(),true); 
node.Nodes.Add(childNode); 
PopulateSubTree(childRow,   childNode); 

} private   ComponentArt.Web.UI.TreeViewNode   CreateNode(string   RolesName,string   RolesID,string   imageurl,bool   expanded) 

ComponentArt.Web.UI.TreeViewNode   node   =   new   ComponentArt.Web.UI.TreeViewNode(); 
node.Text   =   RolesName;   
node.ID=RolesID; 
node.ShowCheckBox=true; 
node.ImageUrl   =   imageurl;   
node.Expanded   =   expanded; 
return   node; 

运行程序,当点击CheckBox时     使CheckBox处于被选中的状态。然后再点击Button     回发到服务器后,你会发现以前没有被选中的CheckBox中的个别竟然变成了已选中的状态。 经过这几天的研究发现当注释掉private   ComponentArt.Web.UI.TreeViewNode   CreateNode(string   RolesName,string   RolesID,string   imageurl,bool   expanded)这个函数中的node.ID=RolesID的时候,上述情况就不再发生,但是当加入node.ID=RolesID的时候却又出现上面的情况。 这个问题郁闷了几天,我想大家用TreeView就是为了用他的node.ID;但是在ComponentArt   Web.UI   中的TreeView却出现这样的情况。郁闷。 
不知道大家可否有解决办法或者有好用一点的TreeView控件。 
要是有的话麻烦发到         谢谢了!!!