2013-01-06 75 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,我一無所知,所以請不要介意我的回答