主题:  有兴趣讨论无限分类法吗

蓝鲸

职务:版主
等级:5
金币:42.1
发贴:2614
#162004/9/12 19:55:41
ridincal在上个帖子中说
引用:
蓝鲸在上个帖子中说
引用:

ridincal的迭代方法,怪自己没好好学数学及数据结构,很想知道这方面的介绍。


for example:

private void AddTreeNode(DataNode dND)
{
    foreach(DataNode dn in dND.ChildNodes)
    {
         TreeNode nd = new TreeNode();
         nd.Name=dn.NodeName;
         nd.OtherAttribute="";
         ......
         dND.Nodes.Add(nd);
         AddTreeNode(nd);
    }
}


部分为伪码,要点是数据余操作分离,DataNode 数据结构需要根据数据表自行构建


非常谢谢,不过还是有些不懂。dND.ChildNodes是如何定义的?
VS的TreeNode只能得到下一级的节点,好象没法遍历所有下属节点,不知你用什么方法?


非常大鱼

缺缺

职务:管理员
等级:8
金币:41.0
发贴:9620
#172004/9/13 2:53:52

图片如下:


private void InitTree(TreeNodeCollection Nodes,string ParentId)
{
	DataView DV=new DataView();
	DV.Table=DS.Tables["NodeTree"];
	DV.RowFilter="ParentID="+ParentId;
	TreeNode Node;
	string intId;
	foreach(DataRowView DVS in DV)
	{
		Node = new TreeNode();
		Node.Text=DVS["Name"].ToString();
		Node.ImageIndex = 0;
		Nodes.Add(Node);
		intId=DVS["Id"].ToString();
		InitTree(Node.Nodes,intId);
	}
}

编辑历史:[此帖最近一次被 allinhands 编辑过(编辑时间:2004-09-13 03:01:50)]


缺缺

职务:管理员
等级:8
金币:41.0
发贴:9620
#182004/9/13 2:56:11
数据来自蓝鲸兄的贴图
唉~~好不习惯那些SqlDataAdapter,DateSet,DateView.....



janlay

职务:管理员
等级:7
金币:28.0
发贴:7244
#192004/9/13 7:36:04
蓝鲸在上个帖子中说
引用:
......
ISEnd可能名字有些误会,其实不是终结的意思。其实这个字段是分类下只有实体商品,不能再分类,因再分类可能类别不清晰,所以十脆说明以下不能再分。
如果是这样的话,商品应该放在另一个表中,而不是和目录混合在一起



=ridincal=

职务:管理员
等级:7
金币:20.0
发贴:5886
#202004/9/13 8:29:19
allinhands在上个帖子中说
引用:
数据来自蓝鲸兄的贴图
唉~~好不习惯那些SqlDataAdapter,DateSet,DateView.....

呵呵,这些东西可是ADO.Net的精髓,确实和M$的说法一致,It is not only the updated version of ADO! 其灵活性、适用性和强大的数据处理功能不是ADO能比的,还具有OLE DB、离线存取、XML数据交换等许多特性……
[纯技术观点,!AD ]



蓝鲸

职务:版主
等级:5
金币:42.1
发贴:2614
#212004/9/13 23:00:19
janlay在上个帖子中说
引用:
蓝鲸在上个帖子中说
引用:
......
ISEnd可能名字有些误会,其实不是终结的意思。其实这个字段是分类下只有实体商品,不能再分类,因再分类可能类别不清晰,所以十脆说明以下不能再分。
如果是这样的话,商品应该放在另一个表中,而不是和目录混合在一起


比如说,计算机\编程\VB,《VB6入门到精通》属于VB类,而不存放在编程或计算机类中。编程类ID中没有任何链接发书籍,VB类中有很多书,但不能再分类。如果编程中有书籍,可能在条目上要引起混乱。但在搜索是,如果是编程,那么VB、C++等就集中在一起。商品是另外一个表,用SortID与商品表外键链接。


非常大鱼

蓝鲸

职务:版主
等级:5
金币:42.1
发贴:2614
#222004/9/13 23:12:10
各位高见,真得益不浅。不过这些DataSet、DataView着实不好掌握。
还有这个DataGrid控件(System.Windows.Form.DataGrid),着实不好弄。比如说这个网格TextChanged事件,一个网格里编辑了,合计网格自动出现合计值。有时好象是这样了,但结果偏不会出现,但如果合计值不调用网格,而调用DataSet相应值,结果却好了。再者这个编辑中最后一行(不是正式行)最不好处理。真怕了,而且这方面的介绍太少,很想要关于DataGrid使用方面好的经验。


非常大鱼

蓝鲸

职务:版主
等级:5
金币:42.1
发贴:2614
#232004/9/20 2:04:29
我找到了一种使用ID路径简单的方法,不用在数据库中设置IDPath字段,只在ExNode再修改一个,增加一个私有变量:
private string mIDPath;		// 分类的ID组成的路径

public string IDPath
{
	get
	{
		return mIDPath;
	}
	set
	{
		mIDPath = value;
	}
}


并在添加Node时设置:
	// 添加到TreeView和数组
	arrNode.Add(nd);
			
	if (nd.Sort.ParentID == 0)
	{
		trvSort.Nodes[0].Nodes.Add(nd);
		nd.IDPath = "root\\0";
	}
	else
	{
		for (int i = 1; i <= arrNode.Count; i++)
		{
			if (((ExNode)arrNode[i-1]).Sort.ID == st.ParentID)
			{
				pNode = (ExNode)arrNode[i-1];
				break;
			}
		}
		pNode.Nodes.Add(nd);
		nd.IDPath = pNode.IDPath + "\\" + nd.Sort.ParentID.ToString();
	}


接下去的查找到都已经容易实现了,比如选择一个节点,子节点的路径肯定包涵父节点的,只要搜索所有包涵父节点路径的,均为其子类。


非常大鱼

yenan

职务:普通成员
等级:1
金币:0.0
发贴:82
#242005/8/3 15:45:25
给个源码我好吗,越看越晕



{ 在指尖上绽放的花朵 }

职务:普通成员
等级:5
金币:14.0
发贴:3209
#252005/8/3 17:21:23
我现在的兼职就是在用 ASPX 开发东西的。。。

不过我主负责 XML + XSL 这部分。。。

最近也看了不少 C# 的代码。。。

第一个反应就是头大。。。唉。。。路还长啊。。。