0

所以我有这张表,上面有我用于家谱网站的所有祖先的姓名和出生/死亡日期。关键是 ID,所有子项的 ParentID 项将设置为与父项的 ID 相同。

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

我想以某种类型的树结构显示它(这是稍后的另一个问题) - 现在我只是在 GridView 中显示它们。我在每一行的开头都有一个按钮,称为 Branch。当您在某人的记录上单击分支时,它会调用一个选择函数来检索所选记录的 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 的字符串。我似乎无法弄清楚如何在不显示在 gridview 中的情况下检索所选记录的 ID。我在创建数据源时选择了所有列,但隐藏了 ID 和 ParentID。现在它们不包含在 gridview 的行中。关于如何解决这个问题的任何想法?我希望这能很好地解释它。

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

4

1 回答 1

0

也许您正在寻找一种叫做分层查询的东西。

在 Oracle 中,你会做类似的事情:

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

编辑:现在我再次阅读了您的问题,我认为您在谈论一些 C# 东西,我对此一无所知,所以不要介意我的回答

于 2013-01-07T00:47:43.233 回答