首页 | 互联网 | IT动态 | IT培训 | Cisco | Windows | Linux | Java | .Net | Oracle | 软件测试 | C/C++ | 嵌入式开发 | 存储世界 | 服务器
网络设备 | IDC | 安全 | 求职招聘 | 数字网校 | 网页设计 | 平面设计 | 技术专题 | 电子书下载 | 教学视频 | 源码下载 | 搜索 | 博客 | 论坛
中国IT实验室Dotnet频道
中国IT教育
Google
首页 ASP.NET  C#  XML/WebService ADO.NET VC.NET VB.NET .NET 资讯动态 专题 RSS订阅 讨论 下载
您现在的位置: 中国IT实验室 >> Dotnet >> ASP.NET >> 正文

.net开发中的支持树型的GridView控件

    重写:Rows#region 重写:Rows
     

    private TreeListViewRowCollection _rowsCollection;
        [Browsable(false)]
        public new TreeListViewRowCollection Rows
        {
            get
            {
                ArrayList _rowsArray = new ArrayList();
                for (int i = 0; i < base.Rows.Count; i++)
                {
                    _rowsArray.Add((TreeListViewRow)base.Rows[i]);
                }
                this._rowsCollection = new TreeListViewRowCollection(_rowsArray);
                return this._rowsCollection;
            }
        }
        #endregion

        重载:OnInit#region 重载:OnInit
        protected override void OnInit(EventArgs e)
        {
            base.OnInit(e);
            Page.RegisterRequiresPostBack(this);

            if (!Page.ClientScript.IsClientScriptIncludeRegistered("JS_TreeListView"))
            {
                this.Page.ClientScript.RegisterClientScriptInclude(this.GetType(), "JS_TreeListView", Page.ClientScript.GetWebResourceUrl(this.GetType(), "GoldMantis.Web.UI.Resource.TreeListView.JS_TreeListView.js"));
            }
        }
        #endregion

        IPostBackDataHandler Members#region IPostBackDataHandler Members

        public bool LoadPostData(string postDataKey, NameValueCollection postCollection)
        {
            return false;
        }

        public void RaisePostDataChangedEvent()
        {

        }

        #endregion

        方法:RenderCheckBoxExField#region 方法:RenderCheckBoxExField
        /**//// <summary>
        /// 处理CheckBoxExField类型的列
        /// </summary>
        private void RenderCheckBoxExField()
        {
            if (!this.ShowHeader && !this.ShowFooter)
            {
                return;
            }

            foreach (DataControlField field in Columns)
            {
                if (field is CheckBoxExField)
                {
                    int checkBoxExFieldIndex = Columns.IndexOf(field) + this.GetAutoGenerateButtonCount();
                    foreach (GridViewRow row in Rows)
                    {
                        if (row.RowType == DataControlRowType.Header)
                        {
                            row.Cells[checkBoxExFieldIndex].Controls.Clear();
                        }
                        if (row.RowType == DataControlRowType.DataRow)
                        {
                            row.Cells[checkBoxExFieldIndex].Controls[0].ID = "cbChoose";
                            ((CheckBox)row.Cells[checkBoxExFieldIndex].Controls[0]).Attributes.Add("onclick", "ChooseTree(this);");
                        }
                    }

                    注册脚本#region 注册脚本
                    string script = @"
    var modifyId = """" ;
    var choosedId = """";
    var choosedIndex;
    function ChooseTree(obj)
    {
        var cTrId = obj.parentElement.parentElement.parentElement.id;
        var treeTable = document.getElementById("""+this.ClientID+@""");
        for( var i = 0; i < treeTable.rows.length; i++ )
        {
            if( treeTable.rows[i].id.indexOf(cTrId) != -1 && treeTable.rows[i].id != cTrId )
            {
                document.getElementById(treeTable.rows[i].id+""_cbChoose"").checked = obj.checked;
            }
        }
        choosedId = """";
        choosedIndex = new Array();
        for( var i = 1; i < treeTable.rows.length; i++ )
        {
            if( document.getElementById(treeTable.rows[i].id+""_cbChoose"").checked )
            {
                choosedId += treeTable.rows[i].id.substring(treeTable.rows[i].id.lastIndexOf(""/"")+1) + "","";
                choosedIndex.push(i);
            }
        }
       
        choosedId = choosedId.substring(0,choosedId.length-1);
    }";
                    if (!Page.ClientScript.IsStartupScriptRegistered("TreeListView_CheckBoxExField"))
                    {
                        Page.ClientScript.RegisterStartupScript(GetType(), "TreeListView_CheckBoxExField", script, true);
                    }
                    #endregion
                }
            }
        }
        方法:GetAutoGenerateButtonCount#region 方法:GetAutoGenerateButtonCount
        private int GetAutoGenerateButtonCount()
        {
            int num = 0;
            if (this.AutoGenerateDeleteButton || this.AutoGenerateEditButton || this.AutoGenerateSelectButton)
            {
                num = 1;
            }
            return num;
        }
        #endregion
        #endregion

        protected override void Render(HtmlTextWriter writer)
        {
            RenderCheckBoxExField();
            base.Render(writer);
        }
    }

 


 public class TreeListViewRow : GridViewRow
    {
        public TreeListViewRow(int rowIndex, int dataItemIndex, DataControlRowType rowType, DataControlRowState rowState)
            : base(rowIndex, dataItemIndex, rowType, rowState)
        {

        }
       
        protected override void OnPreRender(EventArgs e)
        {
            base.OnPreRender(e);
            if (this.RowType == DataControlRowType.DataRow)
            {
                if (this.Parent.Parent is TreeListView)
                {
                    TreeListView treeListView = this.Parent.Parent as TreeListView;
                    DataRow dr = ((DataTable)treeListView.DataSource).Rows[this.DataItemIndex] as DataRow;
                    string str = GetTreeNodeImg(dr, Convert.ToBoolean(dr["TreeListView$Row$IsLeaf"]), Convert.ToBoolean(dr["TreeListView$Row$IsBottom"]));
                    this.Cells[treeListView.NodeColumnIndex].Text = str + this.Cells[treeListView.NodeColumnIndex].Text;
                    this.ID = dr["TreeList$ViewRow$ClientID"].ToString();
                    if (treeListView.ExpendDepth > 0)
                    {
                        this.Style["display"] = treeListView.ExpendDepth >= Convert.ToInt32(dr["TreeListView$Row$Depth"]) ? "block" : "none";
                    }
                }
            }
           
        }

        获取Tree的图片#region 获取Tree的图片
        string GetTreeNodeImg(DataRow dr, bool isLeaf, bool isBottom)
        {
            return GetTreeNodeOtherImg(dr) + GetTreeNodeLastImg(isLeaf, isBottom);
        }
        string GetTreeNodeOtherImg(DataRow dr)
        {
            if (dr["TreeListView$Row$ParentRow"] != null&&!dr["TreeListView$Row$ParentRow"].Equals(DBNull.Value))
            {
                DataRow drParentRow = dr["TreeListView$Row$ParentRow"] as DataRow;
                bool parentIsBottom = Convert.ToBoolean(drParentRow["TreeListView$Row$IsBottom"]);
                if (parentIsBottom)
                {
                    return GetTreeNodeOtherImg(drParentRow) + string.Format("<img src={0} align=absmiddle>", TreeListView.TreeImageFolder + "white.gif");
                }
                else
                {
                    return GetTreeNodeOtherImg(drParentRow) + string.Format("<img src={0} align=absmiddle>", TreeListView.TreeImageFolder + "i.gif");
                }

            }
            else
            {
                return string.Empty;
            }
        }
        string GetTreeNodeLastImg(bool isLeaf, bool isBottom)
        {
            //最后靠近的那个Image
            string lastImg = string.Empty;
            if (isLeaf)
            {
                if (isBottom)
                {
                    lastImg = string.Format("<img src={0} align=absmiddle>", TreeListView.TreeImageFolder + "l.gif");
                }
                else
                {
                    lastImg = string.Format("<img src={0} align=absmiddle>",TreeListView.TreeImageFolder + "t.gif");
                }
            }
            else
            {
                if (isBottom)
                {
                    lastImg = string.Format("<img src={0} align=absmiddle onclick='ClickNode(this,true,\"{1}\");' style=\"cursor: hand\">", TreeListView.TreeImageFolder + "lminus.gif", this.Parent.Parent.ClientID);
                }
                else
                {
                    lastImg = string.Format("<img src={0} align=absmiddle onclick='ClickNode(this,true,\"{1}\");' style=\"cursor: hand\">", TreeListView.TreeImageFolder + "tminus.gif", this.Parent.Parent.ClientID);
                }
            }
            return lastImg;

        }
        #endregion

 

Js代码实现折叠效果

Code

 

var lExpend = "lminus.gif";
var lPinch = "lplus.gif";  
var tExpend = "tminus.gif";
var tPinch = "tplus.gif";        

function ClickNode(img,isBottom,tableId)
{
    var imgId = img.src.substring(img.src.lastIndexOf("/")+1);
    var url = img.src.substring(0,img.src.lastIndexOf("/")+1);
    var oldTrId = img.parentElement.parentElement.id;
    var newTrId = oldTrId.substring(oldTrId.indexOf("_")+1);
   
    if( isBottom)
    {
        if( imgId == lExpend)
        {
            img.src =  url+ lPinch;
            img.parentElement.id = lPinch;
            PinchNode(newTrId,oldTrId,tableId);
        }
        else
        {
            img.src = url + lExpend;
            img.parentElement.id = lExpend;
            ExpendNode(newTrId,oldTrId,tableId);
        }  
    }
    else
    {
        if( imgId == tExpend )
        {
            img.src =  url+ tPinch;
            img.parentElement.id = tPinch;
            PinchNode(newTrId,oldTrId,tableId);
     
        }
        else
        {
            img.src = url + tExpend;
            img.parentElement.id = tExpend;
            ExpendNode(newTrId,oldTrId,tableId);
        }  
    }
}

function ExpendNode(newId,oldId,tableId)
{
    var tree = document.getElementById(tableId);
    for( var i = 0; i < tree.rows.length; i++ )
    {
        if( tree.rows[i].id.indexOf(newId) != -1 && tree.rows[i].id != oldId )
        {
            var isExpend = true;
            var pId = tree.rows[i].id;
          
            while( pId != oldId)
            {
                for( var j = 0; j < 2; j++ )
                    pId = pId.substring( 0,pId.lastIndexOf("/"));
                var parent = document.getElementById(pId);
                if( parent != null )
                {
                    var tempId = parent.cells[2].id;
                    if( tempId == lExpend || tempId == tExpend || tempId == "")
                        ;
                    else
                    {
                        isExpend = false;
                        break;
                    }
                }
                else
                    break;
            }
            if( isExpend )
               tree.rows[i].style.display="block"; 
        }
    }
}

function PinchNode(newId,oldId,tableId)
{
    var tree = document.getElementById(tableId);
    for( var i = 0; i < tree.rows.length; i++ )
    {
        if( tree.rows[i].id.indexOf(newId) != -1 && tree.rows[i].id != oldId)
        {
            tree.rows[i].style.display = "none";
        }
    }
}

上一页  [1] [2] 

【责编:Luzi】

中国IT教育

相关产品和培训
文章评论
 友情推荐链接
 认证培训
 专题推荐

 ·WEB程序开发--ASP.NET和PHP、JSP究竟学哪个?
 ·五步带你入门XML
 ·关于Java框架技术专题
 ·XML全攻略技术专题
 ·JAVA开源技术介绍专题
 ·Java嵌入式开发之J2ME技术专题
 ·超前体验 Oracle 11g的5个新特性…
 ·揭密使用VB.NET的五个实用技巧
 ·Oracle和SQL Server常用函数对比专题…
 ·展现C#世界 C#程序设计专题…
 今日更新
 社区讨论
 博客论点
 频道精选
 Dotnet频道相关导航