存储过程实现无限级分类(3)

最后一步显示分类(只是一条select语句)

CREATE PROCEDURE sp_Column_List
  AS
SELECT Column_ID,Column_Name,Parent_ID,Column_Path,Column_Depth,
      Column_Order,Column_Intro
FROM Tb_Column
ORDER BY Column_Order
GO

接下来就是在界面呈现了,显示的时候用的是DataGrid

Html代码如下:

<asp:DataGrid id="DataGrid1" runat="server" AutoGenerateColumns="False" Width="520px" DataKeyField="Column_Id">
  <Columns>
   <asp:TemplateColumn HeaderText="分类信息">
     <ItemTemplate>
       <asp:Label id="lbname" runat="server"></asp:Label>
     </ItemTemplate>
     <EditItemTemplate>
       <asp:TextBox id="tbdgname" runat="server" Text='<%#DataBinder.Eval(Container.DataItem,"Column_Name")%>'>
       </asp:TextBox>
     </EditItemTemplate>
   </asp:TemplateColumn>
   <asp:TemplateColumn HeaderText="添加子节点">
     <ItemTemplate>
       <a href="#" onclick="Open('AddSonCate.aspx?fid=<%#DataBinder.Eval(Container.DataItem,"Column_Id")%>','son',280,80)">添加子分类</a>
     </ItemTemplate>
   </asp:TemplateColumn>
   <asp:TemplateColumn HeaderText="编辑">
     <ItemTemplate>
       <asp:LinkButton runat="server" Text="编辑" CommandName="Edit" CausesValidation="false"></asp:LinkButton>
     </ItemTemplate>
     <EditItemTemplate>
       <asp:LinkButton runat="server" Text="更新" CommandName="Update" CausesValidation="False"></asp:LinkButton>&nbsp;
       <asp:LinkButton runat="server" Text="取消" CommandName="Cancel" CausesValidation="false"></asp:LinkButton>
     </EditItemTemplate>
   </asp:TemplateColumn>
   <asp:TemplateColumn HeaderText="删除">
     <ItemTemplate>
       <asp:LinkButton runat="server" ID="lbdelete" Text="删除" CommandName="Delete" CausesValidation="false" CommandArgument='<%#DataBinder.Eval(Container.DataItem,"Column_Id")%>'>
       </asp:LinkButton>
     </ItemTemplate>
   </asp:TemplateColumn>
  </Columns>
</asp:DataGrid>

最关键的地方在DataGrid_ItemDataBind事件中

private void DataGrid1_ItemDataBound(object sender,System.Web.UI.WebControls.DataGridItemEventArgs e)
        {
            if(e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem)
            {
                //得到Column_Name字段的值
                string columnName = (string)DataBinder.Eval(e.Item.DataItem,"Column_Name");
                string columnTemp = "";
                //得到深度值Column_Depth
                int columnDepth = Int32.Parse(DataBinder.Eval(e.Item.DataItem,"Column_Depth").ToString());
                if(columnDepth>1)
                {
                    for(int i = 1;i<columnDepth;i++)
                    {
                        columnTemp +="&nbsp;&nbsp;&nbsp;&nbsp;";
                    }
                    columnTemp+="┝";
                }
                Label lbname = (Label)e.Item.FindControl("lbname");
                lbname.Text = columnTemp+columnName ;
                LinkButton lbdelete = (LinkButton)e.Item.FindControl("lbdelete");
                lbdelete.Attributes.Add("OnClick","JavaScript:return confirm('确实要删掉此分类吗?');");
            }
        }

Over!

时间: 2025-01-26 23:20:42

存储过程实现无限级分类(3)的相关文章

存储过程实现无限级分类(1)

在做考题的的时候,涉及到分类,虽然不是无限级的,但是,为了以后扩展用,想做成无限级,在网上找找了,一个用存储过程作的,虽然添加,编辑,移动,用的是存储过程,可是在读出来的时候只用了一条Select 语句,感觉挺爽的,下面我把存储过程列出来,我只用到了添加,编辑,没有用到移动. 1,表结构 =================================================== 表结构: 表名:Tb_Column 表结构(所有字段非空): Column_ID int 主键(注:非标识

存储过程实现无限级分类(2)

删除的存储过程 CREATE PROCEDURE sp_Column_Delete ( @Column_ID int ) AS Declare @Err As int Set @Err = 0 Begin Tran --首先查询该节点下是否有子节点 Select Column_ID From Tb_Column Where Parent_ID = @Column_ID IF @@RowCount<>0 Begin Set @Err = 1 Goto theEnd End --获取该节点的Col

无限级分类(非递归算法/存储过程版/GUID主键)完整数据库示例_(2)插入记录

-- ======================================== -- Author:  <杨俊明,jimmy.yang@cntvs.com> -- Description: <无限级分类插入记录> -- Return     : 成功返回0,重名返回1 -- ======================================== Create PROCEDURE [dbo].[up_Class_InsertEx]  @newId uniqueide

mysql 无限级分类实现思路_Mysql

第一种方案: 使用递归算法,也是使用频率最多的,大部分开源程序也是这么处理,不过一般都只用到四级分类.这种算法的数据库结构设计最为简单.category表中一个字段id,一个字段fid(父id).这样可以根据WHERE id = fid来判断上一级内容,运用递归至最顶层. 分析:通过这种数据库设计出的无限级,可以说读取的时候相当费劲,所以大部分的程序最多3-4级分类,这就足以满足需求,从而一次性读出所有的数据,再对得到数组或者对象进行递归.本身负荷还是没太大问题.但是如果分类到更多级,那是不可取

琥珀无限级分类联动菜单AJAX版

ajax|菜单|联动菜单 我做好琥珀无限级分类联动菜单Javascript版后,在蓝色理想和CSDN上发表了一下,梅花雪兄在CSDN上提出了效率不足的问题,我也认识到了这一点,本打算项目完工后再进行完善,但一时技痒,便在网上寻找了一下资料,最后做出了此AJAX版无限级分类联动菜单.因时间匆忙,做得比较粗糙,但已利用AJAX技术,实现无限级联动,待过一段时间再完善此版本.希望能给大家提供一些帮助,有好的建议或bug可在此帖后回复或浏览http://www.51ajax.com/bbs/发帖.运行环

ASP把无限级分类生成数组

数组 把无限级分类循环出来确实是一件头疼的事情.比如,我们要循环出一个SELECT,或一个TABLE,要写一大堆判断.有没好点的办法呢?我的做法是生成数组,可以重复调用,直接循环数组就行了.为了方便,我把它写成了类. class.asp 返回所有分类的数组,并按顺序排列有4个属性:set aa=new classlistaa.id="id"//编号的名称aa.classname="classname"//分类名称aa.pid="pid"//父ID

PHP无限级分类查找父层函数

函数 如: classID          classFID          className          classCount      1                  0                   中国                     0      2                  1                   浙江                     0      3                  1                

php+mysql实现无限级分类 | 树型显示分类关系

    无限级分类,主要是通过储存上级分类的id以及分类路径来实现.由于数据的结构简单,所以要将分类的关系由树状显示,我只能想到用递归的方式给于实现,下面是分类数据表结构和自己写的一个树状显示函数,有什么不妥的地方希望大家能指出.     表结构:id字段为分类标识,name字段为分类名,father_id字段为所属父分类的id,path字段为分类路径(储存该分类祖先的集合),isdir判断是否是目录(1为是,0为否).     显示函数: //$count为分类等级 sort_list($st

无限级分类树型节点演示

<!-- 看到论坛里有人发了一个树型菜单,需者甚众,看了一下演示,似乎不难实现,趁着周六没事,便也写了一个出来理论上支持无限级分类,发上来与大家分享!!'-------------------------- 名称:无限级分类树型菜单演示 作者:y0h最后更新:2004-09-19 22:40 环境:ASP+ACCESS '//----------List表定义 'Create Table List(ID AUTOINCREMENT,ParentID long,Title Text(50),Url