2013-01-06 76 views
0

所以我有这张表的名称和我用于族谱网站的所有祖先的出生/死亡日期。关键是ID,所有孩子的ParentID项目将被设置为与父母的ID相同。使用sql命令来查找记录 - sql中的树结构

ID - int (key) 
FirstName - string 
Lastname - string 
Born - int 
Died - int 
ParentID - int 
hasChildren - bool 

我想表明它在某种类型的树结构(这是另一个问题后) - 现在我只是显示在GridView他们。我在每行的分支开始处都有一个按钮。当您点击某人记录上的分支时,它会调用select函数来检索所选记录的ID,以便我可以使用SELECT命令来搜索所有记录,并使用与所选记录的ID相匹配的ParentID。这样做,我将重新填充所选记录的所有子项(父项)的网格。因为我不想显示在网格中的ID和PARENTID,我可以使用无法恢复:

GridViewRow row = GridView1.Rows[GridView1.SelectedIndex]; 

什么,我脑子里想的是一样的东西:

 SqlDataSource ds = (SqlDataSource)GridView1.DataSourceObject; 
    string selectstring = "SELECT [ID],[FirstName],[MiddleName],[LastName],[BirthDate],[DeathDate],[ParentID],[hasChild] FROM [test2].[dbo].[Geneology] where ParentID = " + x; 
    SqlDataSource2.SelectCommand = selectstring; 

其中x是所选记录ID的字符串。我似乎无法弄清楚如何检索选定记录的ID,而不显示在gridview中。我在创建数据源时选择了所有列,但隐藏了ID和ParentID。现在它们不包含在gridview的行中。有关如何去做这件事的任何想法?我希望这解释得很好。

OK - 我修好了。我必须将DataKey设置为ID,以便GridView.SelectedValue返回ID。它的工作现在。我只需要弄清楚如何返回一个级别,而不用重新填充所有记录的网格。

+0

做一个谷歌搜索乔Celko,你会想出一些伟大的文章和[例子](http://www.ibase.ru/devinfo/DBMSTrees/sqltrees.html) –

回答

0

也许你正在寻找一种叫做Hierarchical Queries的方法。

在Oracle中,你会做类似的东西:

select t.* 
from table t 
connect by t.id = t.parent_id 
start with t.id = my_id 

编辑:现在,我再次看了你的问题,我想你在谈论一些C#的thingie,我一无所知,所以请不要介意我的回答